Datadogプライベートロケーションを監視 - サーバーワークスエンジニアブログ

Datadogプライベートロケーションを監視

記事タイトルとURLをコピーする

こんにちは、SWX3人目の熊谷(悠)です。
本稿ではDatadog Synthetic の Private Location 自体を監視する方法について記します。

プライベートロケーションとは?という方はこちら

問題

構築したプライベートロケーションが何らかの理由により停止した場合、テストが実行されなくなりますが、テスト結果がNGになっているわけではない為、アラートが発報されず、監視できていない事に気づけません。
※2022/02/24現在Synthetic監視はメトリクスモニターのようにデータの欠落による通知ができません。

問題の再現

  1. プライベートロケーションのみ選択したテストを作成します。 2021-10-13_19h36_40.png

  2. プライベートロケーションワーカーを停止します。

  3. テストのステータスはOKのまま、実行されたテスト結果は止まります。 2021-10-13_20h36_55.png

解決策

上項の問題はプライベートロケーション自体を監視する事で解決できます。

関連メトリクス

Datadog サイトからMetrics Explorerで探してみると下記のSyntheticsに関するメトリクスが確認できます。
※メトリクス名に付記している説明は、2021/08/26 Datadogサポート回答より

  • synthetics.pl.liveness
    Returns 1 if the Private Location is up and running

  • synthetics.pl.worker.running
    Number of containers available to run tests for a Private Location

  • synthetics.pl.worker.outdated
    Indicated if the Private Location image version is outdated, and can be upgraded

  • synthetics.pl.worker.pulled_tests
    Number of tests pulled by a Private Location

  • synthetics.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. ワーカーコンテナを1つだけ停止
    ⇒ シングルモニターはどちらのメトリクスも停止したロケーションがアラート状態に遷移した。
    ⇒ マルチモニターは停止したロケーションのメトリクスがNoData状態へ遷移し、アラート状態にはならなかった。

  2. 全モニターのクエリにdefault_zero関数を追加
    ⇒ マルチモニターはどちらのメトリクスも変わらずOK状態を維持。

  3. 停止したワーカーコンテナを再起動
    ⇒ シングルモニターはアラートが復旧しOK状態へ遷移。
    ⇒ マルチモニターはどちらのメトリクスもアラート状態に一瞬遷移してからOK状態へ遷移した。(下図参照) 2021-08-31_12h24_41.png

  4. 30分程度待機し、メトリクスのグラフをOKで落ち着かせてから再度ワーカーコンテナを1つだけ停止
    ⇒ シングルモニターはアラート状態に遷移。
    ⇒ マルチモニターはどちらのメトリクスもアラート状態に遷移した。が、15分程度するとメトリクスがNoDataとなり軸ごと消える為、アラート状態からOK状態に遷移する。
    (この時、アラート状態のメトリクスの閾値は回復してOK状態へ遷移を経ていない為、復旧イベントは発砲されない)

  5. ワーカーコンテナを全て停止する
    ⇒ 停止したロケーションのシングルモニターはアラート状態に遷移。
    ⇒ マルチモニターはどちらのメトリクスも15分程度アラート状態となるが、メトリクスが消えてNoData状態へ遷移する。

所感

synthetics.pl.livenessメトリクスは、クエリにデフォルトでas_count修飾子が付きます。
メトリクスグラフが見た目上0か1かにならないので、プライベートロケーションのSTATUS判定には使えません。 2021-08-23_18h31_03.png 修飾子をas_rateに変更しても使え無さそうに見えますが、 2021-12-01_19h12_20.png タイムフレームを5mにすると綺麗なグラフになります。 2021-12-01_19h12_51.png ただし、メトリクスモニターのクエリーではタイムフレームを5分で設定する事はできるものの、モニターのステータス・編集画面では最小1時間の範囲でしか見れない為、実際に判定された値で見れないので混乱します。

また、synthetics.pl.livenessメトリクスは、実際のプライベートロケーションが落ちていなくても時折値に抜けが発生する事があります。
これも実際にグラフで見た時に誤解を招くので良くないと思いました。 2021-09-30_10h29_09.png

対称に、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 サイト・ドキュメント共に更新があり、公式からドキュメントが出ています。

ワーカーコンテナの稼働状況や、プライベートロケーションに紐づくモニターなどが確認できるようになっています。

2021-12-02_12h14_20.png

プライベートロケーションを作成すると、下記のメトリクスを使用した3つのモニターが自動で作成されます。(プライベートロケーション作成済みの既存Organizationsにもモニターが作成されていました。)

  • synthetics.pl.worker.running
  • synthetics.pl.worker.remaining_slots
  • synthetics.pl.worker.outdated

2021-12-02_11h22_11.png

本稿でも取り扱ったsynthetics.pl.worker.runningメトリクスを用いたモニターですが、クエリが default_zero関数無しで by locationid のマルチモニターなので、ワーカーコンテナが停止してもアラート状態には遷移せず、NoData状態となります。※検証項参照 2021-12-02_12h29_56.png

ただし、10分間データ欠落した場合に通知するオプションが指定されている為、アラートイベントは発報されます。 2021-12-02_12h31_24.png 2021-12-02_12h30_05.png

この要件で問題無ければ、特にモニターを自作しなくてもプライベートロケーションが監視出来るので良いですね。

参考

Synthetics メトリクス
補間 - Datadog Docs
モニター評価での as_count() - Datadog Docs

Monitor your private location - Datadog Docs
Private Location Monitoring - Datadog Docs