はじめに

  • Grafanaのアラート機能を使用して、CloudWatch Logsで特定のエラーの発生を検知したときにSlackへ通知するアラートを作成してみました。
  • アラートルールと通知ポリシーの関係性や紐付け方で少し詰まったので、ざっくり流れをまとめます。

作成条件

  • Grafana バージョン 9.4を使用
  • アラートは、Grafana-managed alert ruleを使用

Grafana Alerting

  • Grafana Alerting を使用してアラート通知を作成します。
  • Grafana Alertingは主に以下のコンポーネントで構成されているので、作成前にざっくり概要を把握しておくと良さそうです。参考: ユーザーガイド > グラファナアラート
    コンポーネント 概要
    Alert rules(アラートルール) アラートの発動基準のこと
    Alert instances(アラートインスタンス) アラートルールで評価を行った結果のこと
    Contact point(連絡先) アラート発生時の、通知の送信方法のこと
    Notification policy(通知ポリシー) アラートインスタンスをどこで、いつ、どのように通知するかの設定のこと
    Silences(沈黙) アラートインスタンスからの通知を停止したり、ミュートタイミングを使用して新しい通知を生成または送信したくない時間間隔を指定する機能

How it works

  • アラート通知は以下のように行われます。
  • ラベルによって動作を制御するのがポイントになります。

① Grafana アラートは定期的にデータソースをクエリし、アラートルールで定義された条件を評価します。
② 条件に違反すると、アラートインスタンスが起動されます。
③ 起動したインスタンスは、一致するラベルに基づいて通知ポリシーにルーティングされます。
④ 通知は、通知ポリシーで指定された連絡先に送信されます。

今回作成するアラートの内容

特定のCloudWatch LogsのLogグループで、 Exception の文字列を含むLogメッセージが1時間に1つ以上検知された場合、Slackへ通知するアラートを作成しました。

作成方法

1. Alert rulesを作成する

Alert rules → 「 + Create alert rule 」 をクリックして作成していきます。
その後、表示される Add rule 画面で必要な項目を入力し、「Save」でルールを追加します。
各項目の概要です。

項目 説明
1. Set an alert rule name アラート名を入力します。このアラート名で alertname=アラート名というラベルがアラートインスタンスに付けられます
2. Set a query and alert condition Grafana managed alertを選択します。測定対象のデータと、アラートルールの起動条件となるクエリを定義します
  Set a query and alert condition – query クエリを追加します。今回はデータソースでCloudWatch Logsを選択しました。Logグループを設定して、クエリ条件を指定します
  Set a query and alert condition – expression 1つ以上の式を追加します。
例) Reduce: クエリ結果(上記query)の計算方法、データなしの場合の挙動を指定します。
Threshold: Reduceで整形したデータをもとに、アラート状態にする閾値を設定します
3. Alert evaluation behavior アラートルールを評価する頻度と、アラート有無の状態を変更する速度を設定します。
Folderで選択したフォルダ名でgrafana_folder=選択したフォルダ名というラベルがアラートインスタンスに付けられます
Evaluation groupでは、アラートルールを評価する間隔を設定します。
4. Add details for your alert rule アラート通知の内容を設定します
5. Notifications ラベルを設定します。アラートにラベルを割り当てることでアラートの通知を処理します。ラベルはアラートを通知ポリシーと連動します。

以下、設定サンプルです。

  • queryはCloudWatch Logs Insightsで作成しました。参考: CloudWatch Logs Insights のクエリ構文
  • 通知ポリシー連携用に service=iret1 というラベルを追加しました。
  • アラートルールを評価する頻度は5mにしました。


2. Contact point(連絡先)を作成する

Contact point → 「 + Add contact point 」 をクリックして作成していきます。
今回はSlackに通知するため、インテグレーションは「Slack」を選択し、Webhook URLを使用して設定しました。

3. Notification policy(通知ポリシー)を作成する

Notification policies → 「 + New specific policy 」 をクリックして作成していきます。

  • 「 + Add matcher 」 で ラベルを追加します。今回は、手順1で作成したアラートルールで設定した service=iret1 というラベルを設定してアラートルールと連携しました。自動で付与されるラベル alertname=アラート名grafana_folder=選択したフォルダ名も使用できます。
  • 「Contact point」に、手順2で作成したContact point(連絡先)を選択しました。

4. 結果

アラートの発動基準に当てはまるCloudWatch Logsが出力されると、Slackチャンネルへ通知されることを確認できました!

まとめ

Grafanaのアラート機能で、特定の条件に基づきSlackへアラート通知することができました!
今後はSlack以外のContact pointへの通知や通知内容のカスタマイズ、アラートルールを評価する適切な頻度の設定なども見ていきたいです。