SRE Advent Calendar 2023の10日目の記事です。
業務でDatadogを使っていてモニターは以下のような感じでterraformで管理しているんですが、通知メッセージに入れているものをつらつら書いてみます。
resource "datadog_monitor" "elb_http_5xx" { name = "Too many ELB HTTP 5XX on {{name.name}}" type = "metric alert" message = <<-EOT @slack-hogehoge @pd-hogehoge @hoge@example.com (このへんに書いているものをつらつらと) EOT query = "sum(last_5m):avg:aws.applicationelb.httpcode_elb_5xx{service:my-service} by {name,service}.as_count() > 200" monitor_thresholds { warning = 100 } }
Runbook
esaのRunbookへのリンクです。ヒューマンリーダブルなURLで開けるやつを作ったのでそれ経由でesaのRunbookを開くようにしてます。
ログ
SFnのイベント経由で通知されるバッチのエラーなどにDatadog Logsのリンクを入れています。アラート通知ですぐにログを見れるのでなかなか便利です。
※Datadogのカスタムサブドメインでsub-org(サービス)ごとにドメイン分けてます。
SFnのExecution
SFn側でエラー時にリンクを組み立てて、バッチのエラー時にメッセージに失敗したExecutionへのリンクを含めるようにしてます。
※アカウントを固定できるpersistent linkが欲しいところですが…
APM
- https://example.datadoghq.com/apm/traces?query=env:prd+service:my-service&start={{eval "last_triggered_at_epoch-15*60*1000"}}&end={{eval "last_triggered_at_epoch+15*60*1000"}}
WebアプリのステータスコードのモニターとかににバックエンドのアプリのAPMへのリンクを書いてます。 あと、WebアプリだけではなくJob WorkerにもAPMを仕込んでいたりするので、workerのジョブエラーのモニターでもAPMへのリンクを書いていたりします。
APM・ログ・エラートラッキングはDatadog上で関連付けるようにしているので、APMのリンクを開くとそこからログ・エラートラッキングも開けて便利です。
Slackチャンネル
- https://example.slack.com/archives/xxx/p{{last_triggered_at_epoch}}000
通知先のSlackのチャンネルを開くためのリンクです。メールで通知を受け取った場合に、通知メッセージからSlackチャンネルを開けます。エラーが起きた場合に通知先チャンネルで会話が進んでいることが多いので、メールで気づいた場合には便利です。
Error Tracking/Trace
- https://esample.datadoghq.com/apm/error-tracking?query=service:my-service+env:stg&issueId={{[@issue.id].name}}
- https://example.datadoghq.com/apm/traces?traceID={{span.trace_id}}
エラートラッキングのモニターではIssue IDなどがとれるので、そこからエラートラッキング情報・トレースへのリンクを作成できます。
Stack Trace
これもエラートラッキングのモニターですが、{{span.attributes.error.details}}
のような感じでスタックトレースがとれる(場合もある)ので、それをメッセージに埋め込んでます。
ただし、たまに長すぎて切れます。
curlで叩けるURL
外形監視のモニターにすぐに手元で動作確認ができるよう、curlで叩けるヘルスチェック先のURLを入れてます。
その他Tipsなど
- Datadogのリンクは一見長いんですが、
?query=service:my-service+env:stg
のようにURLエンコードしない文字を使ったり、余計なパラメータをカットしたりすれば結構短くできます - last_triggered_at_epochなどを使うと、アラート発生時刻に合わせたリンクにできます
- モニターがリカバリしたのSlack通知がノイズになる場合、リカバリの時は通知しないようにしてます
{{#is_alert}} @slack-hoge {{/is_alert}}