Datadogで監視の設定してみた

# はじめに
こんにちは。NTTドコモ　サービスデザイン部の@dcm_otsukiです。
普段はコンシューマ向けサービスにおいてサーバ(AWS)をメインにウォーターフォール開発のプロジェクト管理やスクラム開発でPBIを作ったりしています。
担当しているサービスで今時なサーバ監視ツールを入れたいなと考え、[Datadog]("https://www.datadoghq.com/ja/")を使い始めました。Datadogは色々な機能があってとても面白いなと思いながらぽちぽち試して動かしています。一方でこれはどう設定するのだろう？と思うことがちょこちょこあり、同じように「？」になる人のヒントになればと思い、今回こちらの記事を書くことにしました。初心者向けです。
良ければ読んでいただければと思います。

# 前提条件
今回監視対象となるサーバはAWSを利用して構築しています。ECS on Fargateをメインに使ったシステムです。が、Datadog AgentはECSのSidecar Containerとして入れていません。なので、比較的簡単にお安くDatadogを使っています。開発チームにて一通りDatadogの設定はしていただいており、私自身は開発のバックグラウンドはない(プロジェクトマネジメントがメイン)ですが、Datadogを活用してより良い運用ができないか模索したいと思ってポチポチしている程度のスキルです。そのため、初心者であってもだれでもできる設定のやり方をご紹介できればと思っています。
監視の設定といっても色々あると思いますが、今回の記事は①ログをフィルタリングしてみた、②Anomaly Detection(異常検知)を設定してみた、③Datadogでダッシュボードを作ってみたの3本立てです。

# ログをフィルタリングしてみた
Datadogを使ってSlackにアラート通知をするのはみなさんよく実施されているのではないかと思います。では「このアラートは調査の結果問題がなかったのでアラート通知したくないな」と思ったときにどうしたらいいか。
左側のメニュー一覧＞Monitors＞Manage Monitors＞フィルタ設定したいMonitorを選択＞右上の歯車マーク＞Edit＞Define the search query
の中に「-"フィルタしたいキーワード"」を追加すればOKです。思ったよりもシンプルです。正規表現が使えるので-"\*キーワード\*"と設定した方が意図したフィルタになるかもしれません。ただし記号を含むと思った通り動かなかったりすることがたまにあるので設定は慎重にしていただいたほうが良いかと思います。

![datadog_filter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286340/80ac722e-c79d-1d1b-229e-fef47d942a58.png)

フィルタ設定したいキーワードは複数追加可能です。結構たくさん設定していますが、通知が遅れたりといったこともなく、しっかり動いてくれています。
ちなみに該当のアラートがちょうど出ていて画像上部のピンク色の部分にグラフ(あるいは点)として表れており、狙い撃ちでフィルタしたいという場合があると思います。そういった場合に、今から設定しようとしているフィルタの設定によって本当に正確にフィルタリングできているのか確認したいことがあると思います。実は画像上部のピンク色の部分に描画されるグラフはDefine the search queryで設定している内容と連動しているので、狙ったアラートが消えているかはフィルタ設定の前後でグラフの形が想定通り変わっているか確認することができます。(当たり前なのかもしれないのですが、これに最初気づかなくて恐る恐るフィルタしていました…)

# Anomaly Detection(異常検知)を設定してみた
システムが受け付けるトランザクションが常に一定数ある場合、例えばALBのrequest countが急に0になることはないでしょう。また、毎日お昼時によく使われる、深夜はほとんど使われない、など、特徴的な使われ方をするサービスであれば、Anomaly Detectionを入れることで通常とは異なるトラフィック数になった場合に即座に検知することができます。

左側のメニュー一覧＞Monitors＞New Monitor＞Anomaly
![datadog_anomaly.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286340/31837154-716b-c189-642c-db031db9e7d9.png)

Define the metricのところは異常検知したいmetricを入れてもらえばいいと思います。今回はALBのrequest countとしました。ほかにもいろいろ設定できるパラメータがあり、これが正解というものはなく、システム毎にチューニングしていく必要があると思います。
一方で誤検知することもあります。私が担当しているサービスは平日と休日でトランザクションの推移が異なります。そのためseasonalityをweeklyの設定をしています。通常時は特に問題ないのですが、祝日には対応しきれずに、土日と同じようなトランザクションの推移になってしまうために平日のトランザクションとは異なると判定してしまいます。そのため大体祝日の時はアラートが出やすい状態になってしまいます。（何か対応できるとよいのですが…）

# Datadogでダッシュボードを作ってみた
Datadogはダッシュボードが比較的直観的に作りやすく、またグラフ化などもやりやすいです。
グラフは単に作ると例えばAWS上のservice名などになり長くなってちょっと見づらいのですが、例えばグラフを作成する画面の右端にある"as"の部分に表示したい名称を設定するとずいぶん見やすくなります。
![datadog_as.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286340/5fca2fd6-32d7-6b99-933f-db74c869e18b.jpeg)

また、ログ監視では特定のアラートが大量に発生した際に発生推移をダッシュボードのグラフで見たいことがあると思います。その際にはダッシュボードの編集画面からTimeseriesを選択＞②Graph your dataをMetricsからLogsに変更して、設定したいログの内容(Monitorで設定しているものと同じもの)を入れ込めばMonitorで監視しているような内容をグラフで常時可視化ができてとても便利です！
![datadog_graph.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286340/edf37569-db89-a360-0638-7cdeda5e56af.jpeg)


# まとめ
Datadogでは直観的な操作ができる素敵なツールだと思います。(Datadogの回し者ではありません)
ほかにも例えばNewRelicなども使ってみたいなと思っています。
強いてDatadogのデメリットをあげるとすると、Datadogは使った分だけお支払いするサービスなので、大体見積時より実績額がいつも思ったよりかかって、毎回社内説明が必要となってしゅんとなります。。
一方でユーザ数による課金はないため、気軽にDatadogを使える人を増やせるという点は大きなメリットだと思います。
今後もいろいろポチポチしながら、よりよいシステム運用をしていきたいと思います！