監視アラートを役立つ通知にする:Fleetdの発生・復旧・配信設計
Fleetd v0.3.0の継続負荷、オフライン、遅い指標の条件と解除、重複防止、メール配信や収集欠落の限界を解説します。
サーバーやルーターを一つの画面にまとめても、毎日開かないと異常が分からないなら、監視はまだ半分です。CPU、ディスク、オフラインの通知を追加するのは自然ですが、条件を書くことと役に立つ通知を作ることは別です。
短い変動ごとにメールが届き、同じ故障が数秒ごとに繰り返されれば、重要な通知まで見なくなります。一方、メールがないことも正常の証明にはなりません。
今回は Fleetd v0.3.0 のアラートを扱います。Linux と OpenWrt への導入に続き、報告がアラートになり、通知され、終了するまでを見ていきます。
アラートが意味するもの
現在の対象は報告途絶、CPU、メモリー、ディスク容量、inode、失敗サービス、異常コンテナ、WireGuard のハンドシェイク経過時間です。接続元アドレスの変化は単発イベントとして扱います。
容量不足は書き込みを止める可能性がありますが、高い CPU は予定されたビルドかもしれません。古いハンドシェイクも、通信していない相手なら直ちに障害とは限りません。閾値超過だけで業務停止を断定できません。
まず伝えるべきは機器、対象、成立した条件です。原因と対応は用途に合わせて判断します。Fleetd は具体的な検査を提供し、原因を自動断定したり CPU 上昇だけでサービスを再起動したりはしません。
一時的なピークと継続負荷を分ける
CPU とメモリーの既定閾値は 90%、継続窓は五分です。
alerts:
offline: 40s
cpu_percent: 90
mem_percent: 90
sustain: 5m
disk_percent: 90
inode_percent: 90
wg_handshake: 5m
v0.3.0 の既定値であって、全機器に最適な設定ではありません。サーバー共通設定で、機器ごとの独立した閾値はありません。
説明用に、CPU が一瞬 98% になって終わる処理と、高負荷が続く機器を考えます。これは実測事例ではありません。継続窓は前者を除外し、後者について待ち行列、異常プロセス、予定された作業を調べるきっかけを作ります。
実装は窓内の CPU、メモリーの最小値を使います。最小値が閾値より高ければ、受け取った全サンプルが超過しています。 平均値でも、断続的な超過回数でもありません。90% ちょうどは「90% より高い」に含まれません。
最古のサンプルが十分古いことも確認し、三十秒の範囲の許容差を設けています。正確に五分間待つという意味ではなく、最低サンプル数や全区間の欠測の有無も検証しません。受信できたサンプルによる判断であり、連続観測の保証ではありません。
メモリーは総量から MemAvailable を引いた割合です。Linux の全キャッシュを利用不能とみなすわけではなく、通知だけでアプリのメモリーリークとも判断できません。
オフラインは報告が届かない状態
通常、基本報告は十秒ごと、評価は五秒ごとです。既定では約四十秒報告がないと、その後の評価でオフラインの対象になります。判定にはサーバーの受信時刻を使い、クライアントの時計を直接使いません。
原因にはエージェント停止、停電、ルーター障害、DNS、サーバーへの経路などがあります。通知だけでは区別できません。何回かの欠測を許容する設定であり、評価処理、DB、メールの時間も加わるため、切断四十秒後ぴったりの到着保証ではありません。
承認済みでも一度も報告していない機器は、離脱した機器として扱いません。サーバー起動直後は offline + 15s、既定で約五十五秒、新しいオフライン通知を抑えて再接続を待ちます。
したがって新規登録では最初の報告を確認する必要があります。また Fleetd サーバー自体が停止すれば、評価もメール送信もできません。監視システム自身には独立した外部監視が必要です。
通信断を既存障害の復旧にしない
ディスク警告が出ている機器が切断したとします。新しいディスク情報はありません。「今回超過を見なかった」だけで閉じれば、誤解を招く復旧通知になります。
Fleetd はオフライン機器の既存アラートを維持し、古いデータで別の状態を新規作成・解除しません。猶予期間を過ぎればオフラインを追加します。
報告再開後に改めて評価するので、オフラインが解除されてもディスク警告は残ることがあります。通信が戻ることと容量が空くことは別です。
遅い収集項目には別の時間尺度がある
ディスク、サービス、コンテナ、WireGuard は通常六回の報告ごと、およそ一分ごとに取得します。五秒ごとの評価でも、一分周期の情報を五秒単位の実時間情報にはできません。
| 項目 | 現在の条件 |
|---|---|
| ディスク | マウント先の使用率が閾値を超過 |
| inode | inode 使用率が閾値を超過 |
| サービス | systemd の失敗ユニットを報告 |
| コンテナ | restarting、unhealthy、または非ゼロ終了 |
| WireGuard | 過去にハンドシェイク済みの相手が時間制限を超過 |
容量と inode は CPU の五分窓を使わず、保存された直近の遅い指標を評価します。空きバイト数があっても inode 枯渇でファイルを作れないため、別の検査が必要です。
終了コード 0 のコンテナは除外します。単発ジョブの正常終了は障害とは限りません。非ゼロ終了、不健康、restarting は対象ですが、一分間の再起動回数を数える機能ではありません。また running だけで業務 API の正常性は分かりません。
WireGuard は過去のハンドシェイクがある相手だけを調べ、一度もない相手は飛ばします。クライアント報告時刻との差を使い、サーバーの時計との混在を避けます。古い時刻は手掛かりで、完全な疎通試験ではありません。断続的な相手には通信と keepalive の設定を理解して使います。wg_handshake: 0 で全体を無効にできますが、相手ごとの除外設定はありません。
復旧とは、まず条件が成立しなくなること
各評価で必要なアラート集合を作り、DB の未解除レコードと比較します。新規は開き、なくなったものは閉じ、続いているものは維持します。機器と対象で区別するため、マウントやコンテナごとに別の記録になります。
オンライン機器の CPU、メモリーでは、閾値以下のサンプルが一つあれば「全部が超過」が崩れます。低い復旧閾値や「正常がさらに二分続くまで待つ」といった条件はありません。開始の継続条件と復旧の条件は対称ではありません。
新しい遅い指標のない基本報告では、前の遅い指標を保持します。一方、新しい収集結果がツール不在や失敗で空リストになると、その対象の警告が消える可能性があります。以前失敗していたサービスが、照会の失敗によって一覧から消える例です。
項目ごとに「検査成功で正常」と「検査不能」を完全には区別していません。解除記録だけで業務復旧を独立に証明することはできません。前回のとおり、失敗サービス収集は systemd であり、OpenWrt の procd 健全性を完全に調べる機能ではありません。
重複防止と到達保証は別
同じアラートが開いたままなら、五秒ごとに新しいレコードや開始メールを作りません。条件が消えれば解除の変化を作り、一回の評価で生じた開始と解除を一通へまとめます。
集約単位はその評価で、数分間の追加集約や未解決障害の定期催促はありません。アドレス変化などの単発イベントは別経路で通知し、周期評価とすべてが一緒になるわけではありません。
状態を DB に保存してから非同期で送信します。メール失敗時はエラーログを残しますが、永続配信キューや自動再試行はありません。画面の記録は受信の証拠ではなく、障害が続く間、次の評価が失敗した開始メールを自動再送するわけでもありません。
重複防止は雑音を減らしますが、確実な配信、催促、担当者確認、エスカレーションの代わりにはなりません。
メール以外にも記録を残す
SMTP が設定されれば指定先へ送信します。ホストや宛先がなければログに出し、状態は管理画面で確認できます。language: zh はサーバーのアラートとメールを中国語にする設定で、ブラウザ側の画面言語とは別です。
指標は七日、解除済みアラートは九十日を保存し、定期削除します。昔の警告だけ残って詳細グラフがない場合があるため、長期調査には保存方針を別途考えます。
既存の接続元アドレスが変わると単発イベントを作ります。以前の IP に戻るまで続く障害ではなく、単なる出口変更かもしれません。
通知経路全体を確かめる
閾値の調整前に、発生、保存、通知、解除を理解できるか確認します。以下は推奨する検証で、本番で実施した障害の記録ではありません。
| 場面 | 確認すること |
|---|---|
| 短い CPU ピーク | 高値一回だけで継続警告にならない |
| 継続超過のテストデータ | 範囲条件を満たせば一度開き、重複しない |
| 故障中に報告停止 | 元の警告を維持し、条件成立後にオフライン追加 |
| 同じ故障のまま報告再開 | オフラインだけ解除し、元の警告を維持 |
| SMTP 利用不可 | 記録と送信エラーがあり、自動再送を期待しない |
| 収集不能 | 欠測が解除へどう影響するか確認する |
閾値と時間窓は隔離環境の制御データで確認できます。本番のルート領域を満杯にしたり、遠隔接続を支えるルーターを不用意に切断したりする必要はありません。
既存テストにはディスク、コンテナの正常・異常終了、WireGuard 条件などがあり、報告からディスク警告を作る E2E 経路もあります。すべての状態遷移やメール配送を検証した証拠ではありません。
現段階では、小規模な自前環境で説明できるアラートが目標です。発生理由、繰り返さない理由、解除条件、通知が止まる箇所を明確にし、今後は収集能力と鮮度、信頼できる配信、機器別ルールを改善できます。次回は署名付き更新の検証、バージョン判定、失敗からの復旧を扱います。
コメント・議論
質問や実践の経験をお寄せください。コメントは承認後に表示されます。メールアドレスは公開されません。 コメントのプライバシー
コメントを読み込み中…