<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alertmanager on K-Life Hack | システムアーキテクチャ &amp; DevOps</title><link>https://klifehack.com/tags/alertmanager/</link><description>Recent content in Alertmanager on K-Life Hack | システムアーキテクチャ &amp; DevOps</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sun, 07 Jun 2026 14:07:56 +0900</lastBuildDate><atom:link href="https://klifehack.com/tags/alertmanager/index.xml" rel="self" type="application/rss+xml"/><item><title>PrometheusとAlertmanagerによるアラート制御とSMTP連携の設計</title><link>https://klifehack.com/p/prometheus-alertmanager-smtp-routing/</link><pubDate>Sun, 07 Jun 2026 14:07:56 +0900</pubDate><guid>https://klifehack.com/p/prometheus-alertmanager-smtp-routing/</guid><description>&lt;h1 id="prometheusとalertmanagerによる監視通知基盤の高度化異常検知と通知制御の分離設計"&gt;PrometheusとAlertmanagerによる監視通知基盤の高度化：異常検知と通知制御の分離設計
&lt;/h1&gt;&lt;p&gt;インフラストラクチャの監視において、異常の検知と通知の制御は明確に分離されるべき設計領域です。本稿では、Prometheusによるアラート評価とAlertmanagerによる通知ルーティングの分離アーキテクチャ、アラートストームを抑制するための制御機能、およびNaver SMTPを利用した通知経路の実装仕様について解説します。&lt;/p&gt;
&lt;h2 id="1-評価とルーティングの分離アーキテクチャ"&gt;1. 評価とルーティングの分離アーキテクチャ
&lt;/h2&gt;&lt;p&gt;監視パイプラインにおいて、PrometheusとAlertmanagerは以下のように役割を分担します。この分離は、単一責任の原則（Single Responsibility Principle）に基づいています。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;コンポーネント&lt;/th&gt;
					&lt;th style="text-align: left"&gt;役割&lt;/th&gt;
					&lt;th style="text-align: left"&gt;具体的な処理&lt;/th&gt;
					&lt;th style="text-align: left"&gt;出力&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;b&gt;Prometheus&lt;/b&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;&lt;b&gt;評価エンジン&lt;/b&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;rule_files&lt;/code&gt;で定義されたルールを評価間隔（例: 30秒）ごとに評価する。&lt;/td&gt;
					&lt;td style="text-align: left"&gt;条件合致時に「firing」状態のアラートを生成し、AlertmanagerへHTTP POSTで送信する。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;b&gt;Alertmanager&lt;/b&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;&lt;b&gt;ルーティングエンジン&lt;/b&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;受信したアラートに対し、グループ化、抑制、サイレンス処理を適用する。&lt;/td&gt;
					&lt;td style="text-align: left"&gt;外部通知チャネル（Email、Slackなど）へ整理された通知を配信する。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;💡 &lt;b&gt;分離が必要な理由&lt;/b&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;エンジンの専門化&lt;/b&gt;: Prometheusは時系列データベース（TSDB）としての読み書き性能に特化しています。外部ネットワークプロトコル、再試行ロジック、レート制限、状態管理（SMTPやWebhook連携など）を排除することで、コアエンジンの安定性を担保します。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;高可用性の確保&lt;/b&gt;: 複数のPrometheusサーバーから、冗長化されたAlertmanagerクラスターへアラートを集約して送信することが可能になり、通知経路の単一障害点（SPOF）を排除できます。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="2-アラートルールの構成要素と状態遷移"&gt;2. アラートルールの構成要素と状態遷移
&lt;/h2&gt;&lt;p&gt;Prometheusにおけるアラートルールは、YAML形式で定義されます。GPUの温度上昇を検知するルールの定義例を以下に示します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;alert&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;GpuHighTemperature&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;expr&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpu_temperature_celsius &amp;amp;gt; 80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;for&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;severity&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;warning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;component&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;gpu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;annotations&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;summary&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;GPU temp on {{ $labels.host }}/{{ $labels.gpu }} = {{ $value }}°C&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;description&lt;/span&gt;: |&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; GPU {{ $labels.gpu }} on {{ $labels.host }} has been &amp;amp;gt; 80°C for 5 minutes.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; Threshold: 80°C / Critical: 85°C.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; Check: nvidia-smi -q -d TEMPERATURE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コアパラメータの機能は以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;expr&lt;/code&gt;&lt;/b&gt;: 評価条件となるPromQL式。この式が結果（時系列データ）を返した場合、アラート条件が満たされたとみなされます。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;for&lt;/code&gt;&lt;/b&gt;: 条件が満たされてから実際にアラートが「firing」状態に移行するまでの待機時間。一時的なスパイクによる誤検知を防ぎます。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;labels&lt;/code&gt;&lt;/b&gt;: アラートに付与されるメタデータ。Alertmanagerでのルーティングやグループ化の基準として使用されます。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;annotations&lt;/code&gt;&lt;/b&gt;: 通知文面に使用されるテンプレート。&lt;code&gt;{{ $labels.host }}&lt;/code&gt;や&lt;code&gt;{{ $value }}&lt;/code&gt;などの変数を用いて、動的な情報を埋め込むことが可能です。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;アラートの状態遷移ライフサイクルは、&lt;code&gt;for&lt;/code&gt;パラメータの存在により、以下の3つの状態を遷移します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; [ expr がデータを返した時 ]
 +------------+ --------------------&amp;amp;gt; +------------+
 | inactive | | pending |
 +------------+ &amp;amp;lt;-------------------- +------------+
 ^ [ expr の結果が空になった時 ] |
 | | [ &amp;#39;for&amp;#39; で指定した時間が経過 ]
 | v
 | +------------+
 +--------------------------------| firing |
 [ expr の結果が空になった時 ] +------------+
 (RESOLVED 通知の送信)
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;inactive&lt;/code&gt;&lt;/b&gt;: 正常状態。PromQLの評価結果が空の状態です。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;pending&lt;/code&gt;&lt;/b&gt;: 異常を検知したものの、&lt;code&gt;for&lt;/code&gt;で指定した期間を経過していない検証中の状態。この段階では通知は送信されません。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;code&gt;firing&lt;/code&gt;&lt;/b&gt;: 異常状態が継続し、通知が確定した状態。Alertmanagerへアラートが転送されます。条件が解消されると、自動的に&lt;code&gt;RESOLVED&lt;/code&gt;通知が送信されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-アラートストームを抑制する3つの制御機能"&gt;3. アラートストームを抑制する3つの制御機能
&lt;/h2&gt;&lt;p&gt;大規模な障害が発生した際、大量の通知が同時に送信される「アラートストーム」は、運用担当者の認知負荷を高め、致命的な障害の看過を招きます。Alertmanagerはこれを防ぐために3つの制御機能を提供します。&lt;/p&gt;
&lt;h3 id="-グループ化-group_by"&gt;① グループ化 (&lt;code&gt;group_by&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;類似するアラートを1つの通知に集約します。例えば、同一ホストで複数のコンポーネントが同時に警告を発した場合、個別に通知するのではなく、ホスト単位でまとめて通知します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;route&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;group_by&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;alertname&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;severity&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;group_wait&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30s &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 最初のアラート受信後、バッファリングする時間&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;group_interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5m &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 同一グループ内の新規アラートを通知するまでの間隔&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="-抑制-inhibit_rules"&gt;② 抑制 (&lt;code&gt;inhibit_rules&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;特定の「トリガーアラート」が既に発生している場合、それに関連する「依存アラート」の通知を抑制します。例えば、ホスト自体がダウンしている場合（&lt;code&gt;HostDown&lt;/code&gt;）、そのホスト上の個別プロセスやGPUの監視アラートは不要となるため、通知をカットします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;inhibit_rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;source_matchers&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;alertname=&amp;#34;HostDown&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;target_matchers&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;severity=~&amp;#34;warning|info&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;equal&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;host&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;equal&lt;/code&gt;で指定されたラベル（この場合は&lt;code&gt;host&lt;/code&gt;）が一致する場合にのみ、抑制ルールが適用されます。&lt;/p&gt;
&lt;h3 id="-再送制御-repeat_interval"&gt;③ 再送制御 (&lt;code&gt;repeat_interval&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;未解決のアラートについて、同じ通知を繰り返す間隔を制御します。頻繁な再送を防ぎつつ、未解決のまま放置されるリスクを低減します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;route&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;repeat_interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4h &lt;/span&gt; &lt;span style="color:#75715e"&gt;# 解決していないアラートの再送間隔&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-naver-smtp連携におけるport-465の挙動と対策"&gt;4. Naver SMTP連携におけるPort 465の挙動と対策
&lt;/h2&gt;&lt;p&gt;通知経路としてNaver SMTP（&lt;code&gt;smtp.naver.com&lt;/code&gt;）を利用する場合、プロトコルのネゴシエーションにおける特有の挙動に注意する必要があります。&lt;/p&gt;
&lt;p&gt;⚠️ &lt;b&gt;Port 465（Implicit SSL）の接続問題&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Naver SMTPはPort 465（暗黙的なSSL/TLS）とPort 587（明示的なSTARTTLS）をサポートしています。Alertmanagerのデフォルト挙動では、接続開始時にSTARTTLSコマンドを送信しようとします。しかし、Port 465は接続の最初からSSLハンドシェイクを要求するため、AlertmanagerがSTARTTLSを送信するとプロトコルの不一致が発生し、接続がハングアップするか、&lt;code&gt;connection unexpectedly closed&lt;/code&gt;エラーで失敗します。&lt;/p&gt;
&lt;p&gt;🛠️ &lt;b&gt;解決策&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Alertmanagerの設定において、&lt;code&gt;smtp_require_tls: false&lt;/code&gt;を明示的に指定します。これにより、STARTTLSの送信がスキップされ、Port 465での暗黙的なSSL接続が正常に確立されます。また、認証には通常のログインパスワードではなく、Naverのセキュリティ設定から生成した16桁の「アプリパスワード」を使用する必要があります。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-実装用設定ファイル-alertmanageryml"&gt;5. 実装用設定ファイル (&lt;code&gt;alertmanager.yml&lt;/code&gt;)
&lt;/h2&gt;&lt;p&gt;以下は、上記のアラート制御およびNaver SMTP連携を組み込んだ、実用的なAlertmanagerの設定ファイルです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;global&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;resolve_timeout&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;smtp_smarthost&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;smtp.naver.com:465&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;smtp_from&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;neogle@naver.com&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;smtp_auth_username&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;neogle@naver.com&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;smtp_auth_password&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;YOUR_16_DIGIT_APP_PASSWORD&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;smtp_require_tls&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;route&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;receiver&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;default-email&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;group_by&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;alertname&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;severity&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;group_wait&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;group_interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;repeat_interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;routes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;matchers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;severity=&amp;#34;critical&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;receiver&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;critical-email&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;repeat_interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;matchers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;severity=&amp;#34;info&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;repeat_interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;24h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;inhibit_rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;source_matchers&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;alertname=&amp;#34;HostDown&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;target_matchers&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;severity=~&amp;#34;warning|info&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;equal&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;host&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;source_matchers&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;alertname=&amp;#34;GpuCriticalTemp&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;target_matchers&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;alertname=&amp;#34;GpuHighTemperature&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;equal&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#39;host&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;gpu&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;receivers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;default-email&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;email_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;to&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;neogle@naver.com&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;send_resolved&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;critical-email&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;email_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;to&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;neogle@naver.com&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;send_resolved&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;headers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;Subject&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;🚨 [CRITICAL] {{ .CommonLabels.alertname }} on {{ .CommonLabels.host }}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-トラブルシューティングガイド"&gt;6. トラブルシューティングガイド
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;事象&lt;/th&gt;
					&lt;th style="text-align: left"&gt;想定原因&lt;/th&gt;
					&lt;th style="text-align: left"&gt;対処方法&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;アラート条件を満たしているが通知されない&lt;/td&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;for&lt;/code&gt;で指定した時間が経過していない、または抑制ルール（&lt;code&gt;inhibit_rules&lt;/code&gt;）に合致している。&lt;/td&gt;
					&lt;td style="text-align: left"&gt;PrometheusのWeb UIで対象アラートが&lt;code&gt;pending&lt;/code&gt;状態になっていないか確認。また、同一ホストで上位アラート（&lt;code&gt;HostDown&lt;/code&gt;など）が発報されていないか確認する。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;SMTP接続時に&lt;code&gt;connection unexpectedly closed&lt;/code&gt;が発生する&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Port 465に対してSTARTTLSを使用しようとしている。&lt;/td&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;smtp_require_tls: false&lt;/code&gt;が設定されているか確認する。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;SMTP認証エラーが発生する&lt;/td&gt;
					&lt;td style="text-align: left"&gt;通常のログインパスワードを使用している、またはアプリパスワードが失効している。&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Naverのメール設定画面からPOP3/SMTP使用設定が有効であることを確認し、新規に16桁のアプリパスワードを再生成して適用する。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="configuration-notes"&gt;Configuration Notes
&lt;/h2&gt;&lt;p&gt;アラート設計において最も重要なのは、「すべてのアラートが、受信者にとって具体的なアクションに結びつくこと」です。アクションの不要な通知は、運用チームの疲弊を招くだけでなく、真に重大な障害の検知を遅らせる要因となります。&lt;/p&gt;
&lt;p&gt;本稿で示したグループ化、抑制、および再送制御を適切に組み合わせることで、ノイズを最小限に抑えた、信頼性の高い監視・通知基盤を構築することが可能になります。実環境の要件や運用体制に合わせて、各インターバル値や抑制条件を段階的にチューニングしてください。&lt;/p&gt;</description></item></channel></rss>