死活監視とアラート — 心電図は、波形が消えたときこそ鳴らす
サービスが遅くなったり止まったりしたとき、利用者より先に気づきたい。そのための仕組みが監視とアラートです。数値を見張り、おかしくなったら担当者の呼び出し(ポケベル)を鳴らします。
たとえるなら病室の心電図モニターです。波形が乱れたら鳴る。でも、鳴りすぎると誰も駆けつけなくなり、コードが抜けて波形が消えたことに気づけなければ意味がありません。図1で、しきい値と「何秒続いたら鳴らすか」を変えながら、3種類の異変を起こしてみてください。
鳴りすぎるアラートは、鳴らないのと同じ
「すぐ鳴らす」のまま「⚡ 一瞬だけ遅くなる」を押すと、数秒で勝手に直る山でもポケベルが鳴ります。夜中にこれが毎日続くと、担当者はだんだんアラートを見なくなります。本当の障害のときにも「またか」と流されてしまう。これをアラート疲れと呼びます。
そこで「30秒続いたら」のように継続時間(for)の条件を付けます。一瞬の山は条件を満たす前に下がるので鳴りません。ただし、そのぶん本当の異変に気づくのも遅れます。「📈 じわじわ悪化」で、for を変えると検知までの時間がどう変わるか比べてみてください。どこまで待てるかは、そのサービスが止まったときの痛さで決めます。
一番危ないのは「波形が消えたとき」
死活監視をオフにしたまま「💀 サーバーが止まる」を押してください。サーバーが止まったのに、ポケベルはいつまでも鳴りません。「応答時間が500msを超えたら」というルールは、数値が届いてはじめて判定できるからです。止まったサーバーは遅い数値すら送ってきません。
これを防ぐのが死活監視です。「一定時間、データ(ハートビート)が届かなければ鳴らす」という、無いことを見張るルールです。心電図でいえば、波形の乱れではなく波形そのものが途絶えたことに反応するアラームです。外から定期的にアクセスして応答を確かめる外形監視も、同じ目的で使われます。
同じ理屈で、監視システム自身が止まったことにも気づける必要があります。監視が落ちれば、すべてのアラートが静かになるからです。そのため「監視から定期的に届くはずの合図が途絶えたら、別の場所で鳴らす」仕組みを置いておきます。
- 死活監視
- サーバーやサービスが生きているかを見張ること。応答やハートビートが途絶えたら鳴らす。
- しきい値
- 「この値を超えたら異常」と決めた境目。
- for(継続時間)
- しきい値を超えた状態が、どれだけ続いたら鳴らすか。一瞬の山を無視するために使う。
- ハートビート
- 「生きているよ」と定期的に送る合図。届かないこと自体が異常のサインになる。
- アラート疲れ
- 対応不要なアラートが多すぎて、担当者がアラートに反応しなくなること。
- 外形監視
- 利用者と同じように外からアクセスし、ちゃんと応答が返るかを確かめる監視。
まとめ
アラートは鳴らしすぎても、見逃しても役に立ちません。しきい値に継続時間を組み合わせると一瞬の山を無視できますが、そのぶん検知は遅れます。そして数値のルールは数値が届かないと判定できないので、データが途絶えたことを見張る死活監視を必ず並べて置きます。心電図は、波形が消えたときこそ鳴らなければいけないのです。