Datadogを用いた監視設計のコツを紹介します

この記事は eureka Advent Calendar 2018 17日目の記事です。

こんにちは!エウレカのSREチーム恩田です。エウレカではDatadogを2018年6月に導入しました。今回の記事では、Datadogを監視ツールとして使い倒すコツを3つ紹介したいと思います。

*以下はとある1週間の弊社サービスのバックエンドシステムの可用性をDatadogで数値化したものです。SREチームやサーバサイド開発チームはこの値をはじめとしたメトリクスを随時Datadogで見つつ、本番リリース作業などを行なっています。

バージョン管理する

監視設計でも当たり前ですが、Infrastructure as Codeを徹底しましょう。DatadogはTerraformで非常に簡単にコード管理することができます。

# provider.tf
provider "datadog" {
version = "=1.5.0"
}

また、AWSであればEC2に限らず、ありとあらゆるARNに対して適切なtagルール設計と管理を徹底しましょう。監視対象とするサービスを適切に管理し誤報や不必要なアラートを断捨離しやすくなります。

# ec2.tf
resource "datadog_monitor" "web_load_average" {
name = "web @{{host.ip}} ロードアベレージ上昇"
type = "metric alert"
message = <<EOF
{{#is_alert}}
@slack-pairs-critical ロードアベレージ上昇中です。
{{/is_alert}}
{{#is_recovery}}
@slack-pairs-critical ロードアベレージが改善しました。
{{/is_recovery}}
EOF
query = "avg(last_5m):avg:system.load.1{env:prod,role:web} by {host} > 10"
thresholds {
critical = 10
}
include_tags = false
}

テンプレートを工夫する

アラートが鳴る= 即時対応が必要な事象である前提で、アラートを受け取った人が具体的なアクションを取れるようテンプレートを工夫しましょう。

下記のように、システムメトリクスダッシュボードやLog ViewerのURL、また対応者に具体的に取るべきアクション(コマンドやchatopsで叩くコマンド)をアラートテンプレートに記載しておくと便利です。

(* 弊社では異常系ログは全てDatadogへ、正常系含めたログはStackDriver Logging経由でBigQueryへ集めています。)

message = <<EOF
{{#is_alert}}
@slack-pairs-infra-critical ペアーズ日本の application error が増加しています。対応者はこのアラートに対応中の旨をレス後、対応を開始してください
```
## 対応方法
- 直近でDeployされた場合はRollbackを検討してください
- circus reloadを試してみてください
```
[Pairs JP - Health Check Dashboard](${var.datadog_dashboard["pairsjp_healthcheck"]})
[Pairs JP - Error Log](${var.datadog_logs_saved_views["pairsjp_err"]})
{{/is_alert}}
{{#is_recovery}}
@slack-pairs-critical pairs-jp の application error が改善しました。
[Pairs JP - Health Check Dashboard](${var.datadog_dashboard["pairsjp_healthcheck"]})
[Pairs JP - Error Log](${var.datadog_logs_saved_views["pairsjp_err"]})
{{/is_recovery}}
EOF

異常検知に利用したいデータは全て集める

Datadogが提供しているIntegrationを利用すれば各種Public Cloud(AWS / GCP,,)のマネージドサービスメトリクスをはじめ異常検知に利用したいメトリクスを簡単に集めることができます。

また、システムメトリクス以外にもビジネスKPI(I.e, アプリの新規ユーザ獲得数、ログイン数)などもDatadog API経由で集計バッチタスクなどから投げ込んでおくと、任意のメトリクスを監視データソースとして利用できるようになります。

弊社ではPairsアプリの新規登録者数やログイン数などをcloudwatch event経由でキックしたlambdaで集計し、逐次Datadogへ送信することで監視対象にいれるようにしています(自作タスク経由で収集したメトリクスも同様にアラートを設定可能)

おわりに

今回はDatadogを利用した監視設計のコツを紹介しました。参考になれば幸いです。みなさまよい年末を!