ハートビートチェックとは? 死活シグナルを解説
ハートビートチェックはシグナルの定期的な到着を監視し、そのシグナルが止まったときにアラートを発します。期待される活動が欠如したことによって障害を検出します。
ほとんどの監視は悪いことが起こるのを見張ります。ハートビートチェックはそれを逆転させます。良いことが起こらないのを見張るのです。周期的なpingを期待し、その欠如でアラートを出すことで、単に一度も実行されなかったjobといった、症状ベースの監視が見落としがちなサイレント障害を捉えます。
欠如による監視
ハートビートチェックは、dead-man switch とも呼ばれ、スケジュールに従って何かがチェックインすることを期待します。ハートビートが届いている限り、すべて正常です。期待される時間枠内に届かない場合、モニターはその対象が壊れているか停止していると判断し、アラートを発します。
サイレント障害がこれを必要とする理由
一部の障害はエラーもアラートもログも出さず、単に起こらないだけです。一度も開始されない夜間バッチjobは、捉えるべきものを何も出しません。ハートビートチェックはまさにこのギャップのために設計されています。期待されるハートビートの欠如そのものが、何かがうまくいかなかったというシグナルなのです。
ハートビートの構成方法
期待される間隔と猶予期間を定義します。監視対象のタスクは正常に完了するとハートビートのエンドポイントにpingを送り、監視サービスは最後のpingからの経過時間を追跡します。間隔に猶予を加えた時間を超えるとアラートが出ます。猶予期間の調整は、応答性と誤報のバランスを取ります。
スケジュールされたjobとCIのためのハートビート
ハートビートチェックは cron job、スケジュールされたpipeline、バックアップなど、サイレントな未実行が真のリスクとなる、タイマーで動くあらゆるものに最適です。スケジュールされたCIのworkflowは成功時にハートビートへpingを送れるため、夜間のbuildが静かに実行を止めても、数週間後ではなく翌朝に気づくことができます。
ハートビート vs uptime check
uptime check はサービスを外部から能動的にプローブします。ハートビートはサービスが報告してくるのを受動的に待ちます。uptime check は常時稼働のエンドポイントに適し、ハートビートはプローブするエンドポイントを持たない周期的なタスクに適しています。両者は補完的な障害モードをカバーします。
重要なポイント
- ハートビートチェックは、期待される周期的なシグナルが止まるとアラートを出します。
- エラーを一切出さないサイレント障害を捉えます。
- 期待される間隔と猶予期間を設定して構成します。
- cron jobやスケジュールされたpipelineに最適です。