Datadogで外形監視の設定をした
はじめに
Datadog の Synthetic MonitoringのAPI Testsを使って、APIサーバに外形監視を設定しました。
要件
今回の監視の目的は「問題があったときに素早く気づけ、エスカレーションできるようにすること」なのでとりわけ社外に公開しているエンドポイントを対象に、DBなど周辺コンポーネントをカバーできるエンドポイントをいくつかピックアップしました。
料金
2020.12.28の時点ではAPI Testsは以下のような料金体系になっています。
10000リクエストで $7.20/月。年間請求にすると$5/月
1ヶ月を31日(44640min)として、1min間隔で監視を入れるとしたら年間請求計算で
1エンドポイントで44640/10000 * $5 = $22.5
(1ロケーションの場合※)
のようになります。
※API Testsではエンドポイントを実行するサーバの場所を指定することができます。例えば1min間隔でSingapore、Sydneyロケーションからエンドポイントチェックを行うとなると、2リクエストになります。このロケーションは書いてあるとおりAWS環境なので、サービスと同じリージョンで動かすとリージョン障害で外形が起動せず障害に気づけないといったことも起こりうるかと思います。グローバルで展開しているシステムでなくても、予算に余裕があれば2つ以上のロケーションで行いたいものです。
設定手順
UX Monitoring > Synthetics Tests でAPI Testsの設定が行えます。
Define requestではurlとヘッダーやリクエストボディの内容を細かく設定できるようになっています。
{{ }}
で囲うことで任意の変数を作成することができます。(他のAPI Testsを設定するときにも使いまわせるのかと思いきやできなそうだった)変数の値は入力した文字列以外にも日付や指定した数の文字列といった関数も用意されていました。
入力内容した内容を「Test URL」ボタンを押下することでテストを行うことができます。またそのレスポンス結果をもとに成功の定義が入力されるのがちょっとした感動ポイントでした笑
入力フォームの右側にTest URLのレスポンス結果が出て、「2. Define assertions」にresponse timeとstatus codeとcontent-typeの成功値のデフォルトが入ります。条件を変えて再度テストするとDefine assertionsの各項目の右側にpassしたかfailedしたかが表示されるので試しながら調節できます。
「3. Specify test frequency」 で指定された範囲でリクエストの頻度を指定できます。
「4. Define alert conditions」 でDefine alert conditionsで通知を出すタイミングとリトライの設定ができます。例えば画像のような設定だと、1つのロケーション中1つでfailedが出たらすぐにアラートを飛ばすようになっています。またfailedが起きたら3回リトライを行うようにもなっています。
「5. Notify your team」 では通知の設定を指定できます。Monitorsなどと同じように連携設定をしているSlackやPagerDutyも指定できます。(見た目は同じだけど操作感が若干異なるような)
設定を保存すると、保存された直後からリクエストが行われるようになりました。
画像にはありませんが、設定画面の右上でリクエストを一時停止したり、Test URLを意図的に実行させるなどもできました。
Datadogへの通知に関しても、failedしてから0minで届いたのが確認できました。
failed時の再通知の設定条件も5. Notify your teamの項目で行わなかったり、10分置きに通知するようにしたりなど設定できます。
また今回はやっていませんが、この辺りの設定もTerraformでコード化できるようでした。
datadog_synthetics_test | Resources | DataDog/datadog | Terraform Registry
おわりに
Mackerelなど他のツールは使ったことないので比較はできませんでしたが、とはいえ使い勝手は良さそうでした。リトライ時のリクエストの感覚も指定できるようになったら嬉しいなー