スケジューラの「成功」表示はラッパーの終了コードで、業務的な成否ではない
監視
運用
バッチ
運用
原則
マネージド基盤のスケジュール機能が出す成功マーク(緑・チェック・成功メッセージ)は、たいてい起動ラッパーの終了コードしか見ていない。中身のジョブが「やることが無くて何もせず正常終了した」場合も、同じ成功表示になる。
冪等なジョブでは特に紛らわしい。取得対象が前回と同じでスキップして終了したときと、新しいデータを取り込んで終了したときが、外形上はどちらも成功で区別できない。「動いているのにデータが更新されない」という報告を受けたとき、成功表示だけを見て「cron は正常なので原因は別」と結論づけると誤診する。
運用上の含意
- 監視すべきは実行の成否ではなく、成果物の鮮度(最後に実データが更新された時刻・取り込んだ版の基準日)。実行が成功し続けたまま成果物が古くなる状態を検知できる指標を置く
- 調査時は成功表示ではなく実行ログの本文を読み、「スキップして終了した」のか「実際に処理した」のかを判定する。処理時間の差(スキップは極端に短い)も補助的な手がかりになる
- ログを構造化しておき、スキップと実処理を別のメッセージで残しておくと、この判定が後から機械的にできる
探す場所の落とし穴
スケジュール実行がアプリ本体とは別プロセスとして起動される基盤では、実行ログがアプリのログストリームには一切出ないことがある。アプリのログを検索して何も出ないのを「実行されていない証拠」と読むのは誤り。まず「その基盤がスケジュール実行のログをどこへ書くか」を確認してから、実行有無を判断する。