Contents
Prometheus AlertmanagerとSlack連携の概要
Prometheus Alertmanagerは、監視システムで発生したアラートを通知するためのツールです。Slackとの連携により、運用チームが迅速に異常に対応できるようにします。この設定では、Alertmanagerのreceiver設定を通じてSlackへの通知経路を構築し、アラート情報をリアルタイムで送信します。公式ドキュメント(https://prometheus.io/docs/alerting/latest/configuration/#slack)に記載されている手順と同様の流れを基盤としています。
Slack通知設定の手順とフロー
AlertmanagerをSlackに接続するには、アラートルールの定義と通知チャネルの紐付けが不可欠です。以下に具体的な流れを解説します。
アラートルールの定義
アラートルールはPrometheus側で設定されますが、Alertmanagerがどの条件でSlackへ通知するかは、config.ymlファイル内で指定されます。例えば「CPU使用率80%以上」などの閾値を定義した後、それに対応する通知チャネルを割り当てます。
通知チャネルの紐付け
Alertmanagerの設定ファイル(例: config.yml)でSlack用のreceiverを記述し、アラートルールと連携させます。この際、webhook URLが必要になります。後述する「Slack webhook URLの取得方法」で確認してください。
Slack webhook URLの取得方法
Slackとの通信には、Incoming WebhookというAPIエンドポイントを用います。以下に具体的な手順を記載します。
Incoming Webhookの作成手順
- Slackワークスペースにアクセスし、「Apps」タブを開きます。
- 「Create New App」→「Incoming Webhooks」を選択して、Slack API pageに移動します。
- チャネルを指定し、「Add to Workspace」をクリック。これでwebhook URLが生成されます。
注意: webhook URLの取得後は、即座にアクセス権制限設定を行うことが推奨されます。
セキュリティトークンの確認
生成されたURLは以下の形式になります:
https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZ
このURLをAlertmanagerの設定ファイルに記載する際、暗号化保存(例: Kubernetes Secretや環境変数)が推奨されます。
コンフィグレーションファイル記述例
Alertmanagerの設定ファイルでSlack通知を有効にするには、receiversセクションに以下のように記述します。
基本構成テンプレート
|
1 2 3 4 5 6 7 8 9 10 |
global: slack_api_url: "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZ" resolve_timeout: 5m receivers: - name: 'slack-notifications' slack_configs: - channel: '#alerts' send_resolved: true |
この設定により、アラートが発生した際に#alertsチャンネルに通知が送信されます。
複数チャネル設定の実装
複数のSlackチャンネルへ通知を配信する場合、以下のように記述します。
|
1 2 3 4 5 6 7 |
receivers: - name: 'slack-notifications' slack_configs: - channel: '#dev-team' send_resolved: true - channel: '#ops-team' |
アラートテンプレート作成手順
アラートメッセージをカスタマイズするには、templates/ディレクトリにGoテンプレートファイルを作成します。
Goテンプレート構文の基本
以下のテンプレート例では、アラート名や状態を表示しています。
|
1 2 3 4 5 6 |
{{ define "slack.default" }} { "text": "**{{ .Status | title }}** {{ .Labels.alertname }}\n\n{{ .Annotations.summary }}" } {{ end }} |
カスタムメッセージ形式の実装
テンプレートファイル名(例: slack.default.tmpl)をAlertmanager設定に記載し、以下のように指定します。
|
1 2 3 |
templates: - 'templates/*.tmpl' |
テンプレート内容はテストで確認することが重要です。alertmanager --config.file=config.yml --testコマンドで擬似アラートを送信できます。
権限設定とセキュリティ注意点
SlackとAlertmanagerの接続には、権限やセキュリティ対策が不可欠です。以下のポイントに注意してください。
webhook URLの暗号化保存
webhook URLは明文で配置しないことが安全です。以下のように選択肢を検討してください:
| 方法 | 説明 | 推奨環境 |
|---|---|---|
| Kubernetes Secret | クラスタ内での機密情報管理に適切 | コンテナベースの運用 |
| 環境変数 | 簡単なセットアップが必要 | 小規模な導入 |
| AWS Secrets Manager | AWS上での柔軟なシークレット管理を実現 | マイクロサービスアーキテクチャ |
補足: AWS Secrets Managerを使用する場合は、Alertmanagerの起動時にSecrets ManagerからURLを自動取得する仕組みを構築します(例: AWS CLI + 環境変数設定)。
送信元IP制限の有効化
Slackのアプリ設定で「Incoming Webhooks」にアクセスするIPアドレスを制限できる場合があります。特に、インターネット公開された環境では必須です。
IP制限設定手順(例: Slackの管理画面)
- Slack API pageのアプリ設定を開きます。
- 「Incoming Webhooks」タブを選択し、右上の「Edit」ボタンをクリック。
- 「IP Restrictions」セクションに許可するIPアドレス範囲(例:
192.0.2.0/24)を入力します。 - 設定を保存して終了します。
注意: IP制限は、Slackのアプリごとに個別に設定可能です。複数のSlackワークスペースやチャネルがある場合、それぞれで設定を行う必要があります。
まとめ
- Slack通知設定には
config.ymlでreceiver定義とwebhook URLが必要 - テンプレートファイルにより、アラートメッセージのカスタマイズが可能
- webhook URLは暗号化保存し、送信元IP制限を有効にすることを推奨
公式ドキュメントと実際の構成ファイルを参照しながら設定を進めてください。