こんにちは、SWX3人目の熊谷(悠)です。
本稿ではDatadog Synthetic の Private Location 自体を監視する方法について記します。
プライベートロケーションとは?という方はこちら
問題
構築したプライベートロケーションが何らかの理由により停止した場合、テストが実行されなくなりますが、テスト結果がNGになっているわけではない為、アラートが発報されず、監視できていない事に気づけません。
※2022/02/24現在Synthetic監視はメトリクスモニターのようにデータの欠落による通知ができません。
問題の再現
プライベートロケーションのみ選択したテストを作成します。
プライベートロケーションワーカーを停止します。
テストのステータスはOKのまま、実行されたテスト結果は止まります。
解決策
上項の問題はプライベートロケーション自体を監視する事で解決できます。
関連メトリクス
Datadog サイトからMetrics Explorerで探してみると下記のSyntheticsに関するメトリクスが確認できます。
※メトリクス名に付記している説明は、2021/08/26 Datadogサポート回答より
synthetics.pl.liveness
Returns 1 if the Private Location is up and runningsynthetics.pl.worker.running
Number of containers available to run tests for a Private Locationsynthetics.pl.worker.outdated
Indicated if the Private Location image version is outdated, and can be upgradedsynthetics.pl.worker.pulled_tests
Number of tests pulled by a Private Locationsynthetics.pl.worker.remaining_slots
Available slots to run pulled tests.synthetics.pl.worker.concurrency
The concurrency applied to each private locations
疑問
プライベートロケーションのSTATUSを監視する目的であればlivenessメトリクスの方が合致しているように思いましたが、実用した際に下記二つのメトリクスがどう違うのか分からないので検証してみました。
synthetics.pl.liveness
synthetics.pl.worker.running
結果を先に記載してしまうと、どちらも状態遷移は似た挙動を示しました。
前提
- プライベートロケーションを2ロケーション分作成(どちらもワーカーコンテナは1つづつ起動)
- 作成したプライベートロケーション1か所を監視元とするAPITest作成
- 以下2つのメトリクスで計6つモニターを作成(タイムフレームは全て5分)
- synthetics.pl.liveness
- synthetics.pl.worker.running
- from locationid でのシングルモニター4つ
- sum by locationid でのマルチモニター2つ
検証
ワーカーコンテナを1つだけ停止
⇒ シングルモニターはどちらのメトリクスも停止したロケーションがアラート状態に遷移した。
⇒ マルチモニターは停止したロケーションのメトリクスがNoData状態へ遷移し、アラート状態にはならなかった。全モニターのクエリにdefault_zero関数を追加
⇒ マルチモニターはどちらのメトリクスも変わらずOK状態を維持。停止したワーカーコンテナを再起動
⇒ シングルモニターはアラートが復旧しOK状態へ遷移。
⇒ マルチモニターはどちらのメトリクスもアラート状態に一瞬遷移してからOK状態へ遷移した。(下図参照)30分程度待機し、メトリクスのグラフをOKで落ち着かせてから再度ワーカーコンテナを1つだけ停止
⇒ シングルモニターはアラート状態に遷移。
⇒ マルチモニターはどちらのメトリクスもアラート状態に遷移した。が、15分程度するとメトリクスがNoDataとなり軸ごと消える為、アラート状態からOK状態に遷移する。
(この時、アラート状態のメトリクスの閾値は回復してOK状態へ遷移を経ていない為、復旧イベントは発砲されない)ワーカーコンテナを全て停止する
⇒ 停止したロケーションのシングルモニターはアラート状態に遷移。
⇒ マルチモニターはどちらのメトリクスも15分程度アラート状態となるが、メトリクスが消えてNoData状態へ遷移する。
所感
synthetics.pl.livenessメトリクスは、クエリにデフォルトでas_count修飾子が付きます。
メトリクスグラフが見た目上0か1かにならないので、プライベートロケーションのSTATUS判定には使えません。
修飾子をas_rateに変更しても使え無さそうに見えますが、
タイムフレームを5mにすると綺麗なグラフになります。
ただし、メトリクスモニターのクエリーではタイムフレームを5分で設定する事はできるものの、モニターのステータス・編集画面では最小1時間の範囲でしか見れない為、実際に判定された値で見れないので混乱します。
また、synthetics.pl.livenessメトリクスは、実際のプライベートロケーションが落ちていなくても時折値に抜けが発生する事があります。
これも実際にグラフで見た時に誤解を招くので良くないと思いました。
対称に、synthetics.pl.worker.runningメトリクスは素直にワーカーコンテナが最低1台でも起動している or していないかで判定できるので扱いやすいと感じました。
サポートにも聞いてみた
時期などは確定しておりませんが、synthetics.pl.livenessについてはsynthetics.pl.worker.runningで代用できるため、将来的にDeprecateとなる可能性があるとのことでございますので、推奨する方法としてはsynthetics.pl.worker.runningとなります。
2021/09/07 Datadogサポート回答より
結論
synthetics.pl.worker.running
メトリクスでモニターを作成する。
補足
数か月前にしたためていた本稿ですが、2021/11頃にDatadog サイト・ドキュメント共に更新があり、公式からドキュメントが出ています。
ワーカーコンテナの稼働状況や、プライベートロケーションに紐づくモニターなどが確認できるようになっています。
プライベートロケーションを作成すると、下記のメトリクスを使用した3つのモニターが自動で作成されます。(プライベートロケーション作成済みの既存Organizationsにもモニターが作成されていました。)
synthetics.pl.worker.running
synthetics.pl.worker.remaining_slots
synthetics.pl.worker.outdated
本稿でも取り扱ったsynthetics.pl.worker.running
メトリクスを用いたモニターですが、クエリが default_zero関数無しで by locationid のマルチモニターなので、ワーカーコンテナが停止してもアラート状態には遷移せず、NoData状態となります。※検証項参照
ただし、10分間データ欠落した場合に通知するオプションが指定されている為、アラートイベントは発報されます。
この要件で問題無ければ、特にモニターを自作しなくてもプライベートロケーションが監視出来るので良いですね。
参考
Synthetics メトリクス
補間 - Datadog Docs
モニター評価での as_count() - Datadog Docs
Monitor your private location - Datadog Docs
Private Location Monitoring - Datadog Docs