Echobell

Prometheus・Alertmanager 連携

Alertmanager から Echobell へ Webhook またはメールでアラートを送信する手順

Prometheus 連携

Prometheus と Alertmanager は広く使われているオープンソースの監視・アラート基盤です。Alertmanager を Echobell と連携すると、アラートルールが発火した際に、即時のモバイル通知(時限性や通話形式も可)を受け取れます。

前提条件

  • Echobell アカウント(チャンネルを 1 つ以上作成済み)
  • 稼働中の Prometheus + Alertmanager
  • Alertmanager 設定(alertmanager.yml)の編集権限

手順の流れ

  1. Echobell チャンネルを作成
  2. 通知テンプレート(任意でリンクテンプレート)を設定
  3. 連携方法を選択:
    • Webhook(Alertmanager の webhook レシーバー。推奨)
    • メール(Alertmanager の email レシーバー。代替)
  4. アラートルールを作成/更新
  5. テストと調整

手順

1) Echobell チャンネル作成

  1. Echobell アプリを開く
  2. 新規チャンネル(例: "Prometheus Alerts")を作成
  3. 識別しやすい色を選択

2) 通知テンプレート設定

Alertmanager の webhook ペイロードには status、commonLabels、commonAnnotations、externalURL、alerts 配列などのフィールドが含まれます。Echobell のテンプレートでそれらを直接参照できます。

推奨テンプレート:

タイトルテンプレート:

{{commonLabels.alertname}} - {{status}}

本文テンプレート:

🔔 アラート: {{commonLabels.alertname}}
📊 重大度: {{commonLabels.severity}}
🖥️ インスタンス: {{alerts[0].labels["instance"]}}
⏰ 開始: {{alerts[0].startsAt}}
ℹ️ 概要: {{commonAnnotations.summary}}
🧾 詳細: {{commonAnnotations.description}}

オプションのリンクテンプレート(詳細設定):

{{alerts[0].generatorURL || externalURL}}

これにより、記録に関連グラフ/ダッシュボードへのリンクが表示されます。generatorURL が無い場合は externalURL を使用します。

3) 方法 A — Webhook(推奨)

  1. Echobell チャンネルの Triggers から Webhook URL をコピー
  2. Alertmanager にその URL に POST する webhook レシーバーを追加

alertmanager.yml 最小例:

route:
  receiver: echobell-webhook
 
receivers:
  - name: echobell-webhook
    webhook_configs:
      - url: "https://hook.echobell.one/t/REPLACE_WITH_YOUR_TOKEN"
        send_resolved: true
        http_config:
          follow_redirects: true

注意:

  • send_resolved: true は解消時(resolved)も通知します
  • Echobell は JSON 本文をそのまま解釈するため、上記テンプレートで正しくレンダリングされます

3 代替) 方法 B — メール

メールを使う場合は、Alertmanager の email レシーバーでチャンネルのメールアドレスへ送信します。

  1. Echobell の Triggers からチャンネルのメールアドレスをコピー
  2. Alertmanager でメールレシーバーを設定し、簡単なテンプレートを使用

例:

receivers:
  - name: echobell-email
    email_configs:
      - to: "チャンネルのメールアドレスを貼り付け"
        send_resolved: true
        subject: "{{ .CommonLabels.alertname }} - {{ .Status }}"
        html: |
          <p><strong>概要:</strong> {{ .CommonAnnotations.summary }}</p>
          <p>{{ .CommonAnnotations.description }}</p>
          <p>
            <a href='{{ (index .Alerts 0).GeneratorURL }}' target='_blank' rel='noopener'>Prometheus で開く</a>
          </p>

Echobell のメールトリガー用テンプレートでは、subject、text、html などの変数を使用できます。

4) サンプルアラートルール

groups:
  - name: example
    rules:
      - alert: HighCPU
        expr: avg(rate(process_cpu_seconds_total[5m])) > 0.8
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "CPU 使用率が高い"
          description: "CPU が 2 分以上 80% を超過"

発火すると、Alertmanager がレシーバーへ送信し、Echobell がチャンネル購読者に通知します。

テスト方法

  1. 閾値を一時的に下げるか、すぐに発火するテストを作成
  2. 発火時に Echobell 通知が届くか確認
  3. リンクテンプレート使用時は、記録からリンクを開く
  4. 解消時の通知(有効な場合)も確認

通知タイプの選択

  • Time Sensitive: 本番重大障害、緊急ページ
  • Calling: 重大障害でフォーカスモードを突破したい場合
  • Normal: 日常的な警告・情報通知

ベストプラクティス

  1. 簡潔かつ要点を含むテンプレート(名前、重大度、インスタンス、概要)
  2. リンクテンプレートで関連画面へ即ジャンプ
  3. Alertmanager 側でグルーピング/ルーティングしてノイズを軽減
  4. severity ラベルと Echobell の通知タイプを使い分け
  5. Webhook URL は秘匿し、露出時はローテーション

トラブルシューティング

  • Webhook URL またはチャンネルのメールが正しいか
  • チャンネルが有効で購読者がいるか
  • Alertmanager のログに配送エラーがないか
  • alertmanager.yml の route が正しいレシーバーを指しているか
  • 単純なテストルールで検証
  • メール使用時は SMTP と配送を確認

プライバシー

  • 通知内容はデバイス上に保存
  • サーバーには最小限の設定データのみ保存
  • Webhook URL とチャンネルメールは秘密として扱う
  • Echobell はアラートのペイロードを保持しません

参考