🔔

Datadog Monitorのログアラート通知を見やすくするTips

に公開

みなさんこんにちは!

カンリーでSREを担当している有村です。

今回は、Datadog MonitorにおけるLogsアラートの通知メッセージのカスタマイズに焦点を当て、アラート通知の視認性を向上する取り組みを紹介します。

背景と課題

当社ではDatadogを監視ツールとして利用していますが、ログ監視のアラートメッセージを十分に設定していない状態が続いていました。

その結果、以下のような課題がありました:

  1. 通知メッセージの可観測性が低い
    何が起きているかが通知だけでは分からず、都度Log Explorerに飛んで確認する必要がある
  2. アラート対応の心理的コストが高い
    1の結果、状況把握に手間がかかるため、アラートを見ても「後で確認しよう」となりがち
  3. 放置されるアラートが増える
    2の結果として、確認が後回しとなったアラートが積み重なる状態となる

エラーアラートのデフォルト通知
どのようなエラーが発生しているか通知内容だけではわからない

今回は「1. 通知メッセージの可観測性が低い」という課題の改善をファーストステップとし、「アラートが鳴ったら、通知を見るだけで何をすべきか分かる」状態に近づけるため、通知メッセージの最適化に取り組みました。

解決の方向性:通知内容のカスタマイズ

アラートの改善方法についてはさまざまなものが考えられますが、今回はアラートメッセージなど、通知内容を改善する取り組みについて紹介します。

Monitorの通知内容をカスタマイズすることによって、アラート通知を見た時点でログの詳細が分かるようにすることを目指しました。

ここでは、エラーログ監視モニターを例に、具体的な改善内容を紹介します。

ログの情報を通知メッセージに記載する

Datadog Monitorの通知メッセージには、変数({{ 変数名 }})を利用できます。

Logsに関連する情報は以下の変数で取得可能です。

  • ログのメッセージ: {{ log.message }}
  • ログに含まれる属性: {{ log.attributes }}
  • ログに付与されたタグ: {{ log.tags }}

例えばログに以下の属性・タグが含まれていた場合、通知メッセージには次のように記載できます。

ログ属性

{
  "user_id": 1234,
  "uri": "/v1/hoge",
  "http": {
    "status": 400
  }
}

タグ

container_name: api
region: ap-northeast-1 

メッセージ内容

{{#is_alert}} 
エラーが発生しました

エラーメッセージ
{{ log.message }} 

user_id: `{{ log.attributes.user_id }}`
ステータス: `{{ log.attributes.http.status }}`
uri: `{{ log.attributes.uri }}`
コンテナ名: `{{ log.tags.container_name }}`
リージョン: `{{ log.tags.region }}`

{{/is_alert}}

実際の通知内容

メッセージをカスタマイズした後の通知
ログに含まれる情報が通知の時点でわかるようになった

ログサンプルで前後の流れが見えるようにする

「どのエラーか」は分かっても、同じ時間帯の他のエラーや前後のログがないと原因調査に時間がかかることがあります。

そこで、アラート発生日時に近いエラーログのサンプルを通知に含めるようにしました。

通知オプション
Include a sample of 10 logs in the alert notification にチェックを入れる

ログサンプル付きのアラート通知
アラート通知で前後のログメッセージを確認できるようになる

これにより、エラーを検知した時間帯のエラーログを一連で確認でき、原因の切り分けや影響範囲の把握がしやすくなりました。

その他 Tips

合わせて以下に取り組むと、ログ監視においてさらなる可観測性の向上に繋がります。

  • アラートメッセージに、「誰が・何を・どの順でやるか」が分かる具体的なアクションを書いておく
    • (例) 「XXの処理が失敗しました。@YYチーム 調査の上、必要に応じてZZを実施してください」
  • ログの構造化を実施し、ログ属性をLogs Explorerやアラート通知で見やすい状態にする
    • Datadog Logs Pipelineや、AWSを使っている場合はCloudWatchのサブスクリプションフィルターで調整するなど
  • 不要なエラーログの棚卸し
    • アラート通知でのログ内容可視化により、不要だなと思ったログは適宜棚卸しする

まとめ

アラート通知が放置されている状態を解消しようとしても「他に優先度の高いタスクがあるからな…」「アラートの棚卸しはしたいけど、まずどう手をつけたら良いか…」と考え、後回しになっているケースは開発あるあるかもしれません。

変数やログサンプルを活用して「通知内容を整える」というちょっとしたことでも、アラートの「見やすさ」と「対応しやすさ」は大きく変わります。

加えて、アラートメッセージに対応事項を記載することや、不要なエラーログの棚卸しに着手することで、可観測性がさらに向上することが期待できます。

その結果として、アラート対応の心理的コストが低下し、初期対応の迅速化・アラート放置状態の解消といった効果が期待でき、アラート対応状況の改善に繋がります。

今回ご紹介したMonitorのカスタマイズTipsを活用し、モニタリング改善の一歩を踏み出すのに役立てば幸いです。

参考

Datadog 変数

GitHubで編集を提案
カンリーテックブログ

Discussion