Prometheus

Alertmanager テンプレート活用ガイド:Go構文・Slack/Discord/メール設定とベストプラクティス

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

1. Alertmanager テンプレートの基本構造と Go テンプレート構文

Alertmanager が通知先に渡す情報は、主に以下の3つのフィールドに集約されます。

フィールド 内容 主な利用シーン
.CommonLabels ルーティングやグルーピングで共通化されたラベル集合 全アラートで共通のサービス名・環境情報など
.CommonAnnotations 共通アノテーション(例:ドキュメントリンク) 補足説明やトラブルシューティング手順
.Alerts 個々のアラートオブジェクトの配列 アラートごとの詳細(ラベル・アノテーション・ステータス)

1‑1. Go テンプレートで使える基本構文

  • {{ if … }} / {{ else }} – 条件分岐
  • {{ range … }} – 配列やマップの反復処理
  • {{ with … }} – スコープを限定した短縮記法
  • パイプ (|) で組み込み関数(printf, replace, title など)に渡すことが可能

注意
Alertmanager に組み込まれている関数は Go の標準テンプレート関数に限定されます。escapeMarkdownmarkdownsub といった独自関数は存在しないため、使用すると実行時エラーになります。代わりに replace で簡易的なエスケープを行うか、外部ツールで事前処理してください。

1‑2. 実務で役立つテンプレート例

  • rangeif の組み合わせで、アノテーションが無い場合のフォールバックを実装しています。
  • printftitle を使うと文字列整形も簡単です(例: {{ .Status | title }})。

2. Alertmanager 設定ファイルでテンプレートを登録する方法

Alertmanager の設定 (alertmanager.yml) では templates セクションにテンプレートファイルへのパスを書き込みます。
ここでは設定例と、チーム全体で共有しやすいディレクトリ構成のベストプラクティスを紹介します。

2‑1. templates: の書き方

templates: に列挙したファイルは起動時にすべてロードされ、各 receiver から {{ template "filename.tmpl" . }} で呼び出せます。
以下の例ではディレクトリ配下のすべての .tmpl を一括読み込みつつ、個別ファイルも明示的に指定しています。

2‑2. 推奨ディレクトリ構成

ポイント
テンプレートは機能ごとにファイルを分割し、名前だけで通知先が判別できるようにすると保守性が向上します。

この構成をリポジトリで管理すれば、変更履歴が追いやすく CI/CD パイプラインでも簡単にデプロイできます。


3. プラットフォーム別サンプルテンプレート

以下では Slack, Discord, メール の3種類について、実務ですぐに使えるテンプレート例を示します。
すべて標準関数だけで完結しているので、Alertmanager 起動時のエラーリスクはありません。

3‑1. Slack 用 Block Kit テンプレート

Slack は JSON 形式の Block Kit を利用すると見た目が整います。
メッセージ本文は mrkdwn タイプにすればマークダウン風の装飾が可能です。

ポイント
- {{ eq .Status "firing" }} により、発生中のみ <!channel> メンションを付与。
- range のインデックス $i と配列長 len $.Alerts を使って最後の要素以外にカンマを入れるテクニックは標準関数だけで実装可能です(sub は使用しません)。

3‑2. Discord 用 embed JSON テンプレート

Discord の webhook では embeds 配列に情報を格納できます。色分けでステータスを視覚的に伝えると便利です。

  • replace "\n" " " で改行がそのままだと Discord が崩すのを防止。
  • カラーは赤 (16711680) が発生中、緑 (65280) が解決済み。

3‑3. メール(HTML + プレーンテキスト)テンプレート

メールクライアントは HTML と純粋なテキストのどちらかしか正しく表示できないことが多いです。そこで 二層構造 を採用し、receiveremail の場合は HTML、その他はテキストを出力します。

  • replace "\n" "<br>" で HTML 用に改行を変換。
  • テキスト版は Markdown ライクな見出しとリストで可読性を確保。

4. アラート集約・ルーティングとテンプレート設計のベストプラクティス

大量のアラートが流入すると通知が埋もれやすく、対応遅延につながります。
ここでは 共通ラベルでのグルーピング受信先別テンプレート分離 の二本柱を中心に解説します。

4‑1. グルーピングとサイレンシング

概要
group_by に重要なラベル(例: alertname, severity) を設定し、同一インシデントの重複通知を抑制します。group_waitgroup_interval で最初の通知タイミングと再通知間隔を調整できます。

4‑2. 受信先ごとのテンプレート切り替え

概要
receiver の設定に templates: フィールドを追加すれば、Slack・Discord・メールそれぞれが専用テンプレートを呼び出せます。これにより「プラットフォーム固有のフォーマット」をコードベースで一元管理できます。

  • template 関数はファイル名だけでなく、テンプレート内で定義した名前(例: "html")でも呼び出せます。
  • すべての受信先が同じデータ構造を共有しているため、ラベルやアノテーションの追加・削除は一元的に行えます。

5. ローカルでの検証手順とよくある落とし穴

テンプレートのミスは本番環境で通知が途絶える直接的な原因になります。
以下では 事前テストエンコード・レイアウトに関する典型的な問題 をまとめます。

5‑1. amtoolpromtool でテンプレートを検証する

ポイント
設定ファイルの構文チェックと、実際にテンプレートが期待通りに展開されるかをローカル環境で確認します。

sample_alerts.json の例

  • JSON のキーは Alertmanager が内部で使用する正確な名前(小文字)に合わせる必要があります。
  • エラーが出た場合は amtool の標準エラーメッセージを参考に、テンプレート構文やフィールド名を修正してください。

5‑2. 文字化け・レイアウト崩れへの対策

問題 発生原因 推奨対策
メールで日本語が「???」になる MIME ヘッダーに charset が未指定、もしくは ISO‑8859‑1 がデフォルトになる テンプレート冒頭で Content-Type: text/html; charset=UTF-8 を明示(Alertmanager では自動設定されますが、外部 MTA に任せる場合はヘッダーを付加)
Slack の絵文字が表示されない Unicode 絵文字がエスケープされている 直接 Unicode 文字を記述し、replace 等でエスケープしない
Discord が改行でカードが崩れる JSON 内の改行文字 \n がそのまま表示される {{ .Annotations.summary | replace "\n" " " }} のように空白へ置換

補足
Alertmanager には Markdown → HTML に変換する公式ヘルパーはありません。Markdown を使いたい場合は、受信側(Slack・Discord)が自動的に解釈してくれることを前提に記述し、メール向けは上記のように手動で replace して HTML に整形します。

5‑3. テンプレート変更後のロールバック手順

  1. Git で変更コミットとタグ付与(例: v1.2.0-alert-template
  2. CI パイプラインで promtoolamtool のテストを自動実行
  3. デプロイ前にステージング環境の Alertmanager に新テンプレートをロードし、サンプルアラート を手動送信して結果を確認
  4. 問題があれば Git で git revert もしくはタグからチェックアウトし、即座にロールバック

まとめ

  • Alertmanager のテンプレートは Go 標準テンプレート関数だけ を使用すれば実行時エラーの心配がなく、安全に運用できる。
  • templates: に外部ファイルを列挙し、ディレクトリ構成を統一することでチーム全体で保守しやすくなる。
  • Slack・Discord・メールそれぞれに最適化したサンプルを提示したので、実務の要件に合わせてカスタマイズ可能。
  • アラートの グルーピング受信先別テンプレート分離 がノイズ削減と情報過多防止の鍵になる。
  • amtool / promtool によるローカル検証、エンコード・レイアウト対策を徹底すれば、本番環境での通知失敗リスクは大幅に低減できる。

このガイドをベースに、各プロジェクトの Alertmanager 設定とテンプレートを見直し、信頼性の高いインシデント通知基盤 を構築してください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Prometheus