はじめに
cronjobのWarnログ検知モニターが正常に検知できていない現象が発生していました。調査を進めた結果、Datadogの「require full window」設定に起因する問題であることが判明しました。本記事では、この問題の詳細と解決方法、そしてcronjobモニタリングのベストプラクティスについて共有します。
問題の概要
発生していた症状
- Datadogのメトリクスエクスプローラーではデータが正常に表示される
- モニターのステータス画面では「No Evaluation History Found」と表示される
- モニターの編集画面ではグラフにデータが表示される
- 評価履歴が一切記録されない
No Evaluation History Foundな様子
対象のモニター
- バッチ処理系のWarnログ検知モニター
- 定期的に実行されるcronjobのメトリクスを監視
問題の原因
Datadogサポートからの回答により、問題の根本原因が明らかになりました
「Require a full window of data for evaluation」が有効になっており、評価ウィンドウがデータで完全に満たされるまで評価がスキップされていました。
require_full_windowとは
- モニターの評価において、指定された時間ウィンドウが完全にデータで埋まっている場合のみ評価を実行する設定
- バッチジョブのように間欠的にしか動作しないアプリケーションの場合、データの空白期間があるため評価がスキップされる
Datadog Monitor Documentation - データウィンドウ
解決方法
設定変更
「Require a full window of data for evaluation」から「Do not require a full window of data for evaluation」に変更しました。
この変更により:
- モニターのNo Data状態が解消
- 正常に評価履歴が記録されるように
- 適切にアラートが発火するように
設定変更後の効果確認
- 検証環境でWarnログが正常に検知されることを確認
- モニターの評価履歴が適切に記録されることを確認
Terraformでの設定
Infrastructure as Code(IaC)でDatadogモニターを管理している場合、Terraform の Datadog Provider での設定も重要です。
require_full_windowパラメータ
resource "datadog_monitor" "cronjob_monitor" {
name = "Cronjob Monitor"
type = "query alert"
message = "Cronjob has failed"
query = "max:your.metric.name{env:production}"
# バッチジョブなどsparse metricsの場合はfalseに設定することが推奨
require_full_window = false
monitor_thresholds {
critical = 1
}
}
Terraformドキュメントからの重要な注意点
Terraform Datadog Provider では、require_full_window
について以下のように記載されています:
require_full_window
(Boolean) A boolean indicating whether this monitor needs a full window of data before it's evaluated. Datadog strongly recommends you set this to false for sparse metrics, otherwise some evaluations may be skipped. If there's a custom_schedule set, require_full_window must be false and will be ignored. Defaults to true.
重要なポイント:
-
デフォルトは
true
のため、意図的にfalse
に設定する必要がある - sparse metrics(まばらなメトリクス)には
false
を強く推奨 - バッチジョブやcronjobは典型的なsparse metricsに該当
ベストプラクティス
Datadogサポートからの公式見解として、バッチジョブなど一時的にしか動作しないアプリケーションを監視する場合は「Do not require a full window of data for evaluation」の設定が推奨されています。
理由
- データの間欠性: バッチジョブは定期実行のため、連続的なデータストリームではない
- 評価の確実性: データが部分的でも評価を実行し、問題を見逃さない
- アラートの即座性: 問題発生時に速やかにアラートを発火できる
関連リソース
参考情報
まとめ
今回の事象は、Datadogの評価設定とバッチジョブの特性の不一致が原因でした。cronjobやバッチジョブのモニタリングにおいては「require_full_window: false」の設定が重要であることが確認できました。
同様の問題を回避するため、間欠的に動作するアプリケーションのモニター設定時は、この点を考慮することを推奨します。
学んだこと
- Datadogのモニター設定は、監視対象の性質に合わせて適切に選択する必要がある
- メトリクスエクスプローラーでデータが見えても、モニターが正しく動作しない場合がある
- バッチジョブ系のモニタリングでは「require_full_window」の設定が重要な要素となる
- TerraformでDatadogモニターを管理する場合、
require_full_window
のデフォルトがtrue
であることに注意が必要 - Infrastructure as Codeでも、監視対象の特性を考慮した適切なパラメータ設定が重要