3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【障害報告】監視エージェントが引き金となり、サーバーが「応答不能なゾンビ状態」に陥った8時間の記録

Last updated at Posted at 2025-12-01

自宅サーバー(Orange Pi / Armbian)にて、外部監視サービスから「ダウン」判定を受け、SSH接続すら受け付けない状態に陥りました。強制再起動後のログ消失という悪条件の中、わずかに残った痕跡から原因を特定し、復旧に至るまでのプロセスを共有します。

結論から言うと、サーバーはダウン(電源断・カーネルパニック)していませんでした。「監視エージェント自体の設定不備によるリソース枯渇」が原因で、システムが窒息していた事例です。

1. インシデント概要

  • 発生日時: 2025年12月1日 01:50頃 〜 09:50頃(約8時間)
  • 対象システム: 自宅サーバー (Orange Pi 4 / Armbian)
  • 現象: 外部監視(Better Stack)からのPing/HTTP監視がタイムアウト。SSH接続不可。Webサービス応答なし。
  • 復旧方法: 物理的な電源切断による強制再起動

2. 発生した事象のタイムライン

事後調査により判明した時系列は以下の通りです。

時刻 事象 システム内部の状態(推定含む)
22:00頃 予兆開始 監視エージェント(vector)が外部へのデータ送信に失敗し始める(HTTP 401 Unauthorized)。メモリ上に再送用バッファが蓄積され始める。
00:00 負荷上昇 Armbianの定時処理(log2ram)が発動。vectorが吐き出した大量のエラーログをSDカードへ同期しようとし、一時的にI/O負荷が高まる。
00:00 - 01:50 リソース枯渇進行 vectorがメモリを食い潰し続け、同時に秒間数百行の勢いでエラーログを出力。物理メモリの空き領域が枯渇していく。
01:50 サービス停止(死亡) 物理メモリ枯渇。 OSがスワップ(SDカードへの退避)を開始するも、書き込み速度が追いつかずI/O Waitが100%に張り付く。システム全体がフリーズ。
01:50 - 09:xx ゾンビ状態 外部監視からは「ダウン」判定。しかしOSは生存しており、極低速でスワップ処理とエラー再試行を繰り返していた(SSHのハンドシェイクすらタイムアウトする状態)。
09:xx 強制復旧 管理者による電源切断・再起動。

3. 原因調査:なぜログが消えていたのか?

復旧後、直ちに原因究明を行いましたが、Armbian特有の仕様が壁となりました。

3.1 ログ消失の罠

ArmbianなどのSBC(シングルボードコンピュータ)向けOSでは、SDカードの延命措置として log2ram が採用されています。これはログをRAM上に保持し、定期的またはシャットダウン時にディスクへ同期する仕組みです。

今回は「電源ブチ切り」による強制再起動だったため、フリーズ直前(01:50周辺)のメモリ上のログはディスクに同期されず、すべて消失していました。
journalctl -b -1(前回のブートログ確認)を実行しても、有用なデータは得られませんでした。

3.2 残された痕跡からの特定

しかし、完全に証拠が消えたわけではありませんでした。/var/log.hdd/(ディスク上の永続化領域)を確認したところ、決定的な証拠が見つかりました。

  1. 巨大化したsyslog
    通常数MB程度の syslog.1(前日分)が、23MB に肥大化していました。
  2. ログ内容の偏り
    中身を確認すると、監視エージェント vector による以下のエラーが数十万行にわたり記録されていました。
    [ERROR] sink... reason="Http status: 401 Unauthorized"
    [ERROR] source... Failed to load partitions info... Permission denied
    
  3. 死亡時刻の一致
    外部監視サービスのダウン検知時刻(01:50)と、ログの書き込み状況、およびシステムのメモリリソース推移(推測)が合致しました。

4. 技術的考察

なぜ「監視ツール」がサーバーを殺したのか?

監視エージェント(Vector)は、送信に失敗したデータを「捨てずに再送する」ためにメモリバッファに保持します。今回はAPIキーの無効化(401エラー)により、**「永遠に送信できないデータ」を「無限にメモリに溜め込み続ける」**挙動となりました。

さらに、エラーログの大量出力がディスクI/Oを占有しました。SDカードのような低速なストレージにおいて、「スワッピング(メモリ退避)」と「大量ログ書き込み」が同時に発生すると、システムは事実上の操作不能(デスロックに近い状態)に陥ります。

これが、Ping応答すら返さなくなった「ゾンビ状態」の正体でした。

5. 再発防止策

今回の障害を受け、以下の対策を実施しました。

  1. 監視エージェントの修正(即時)
    • vector サービスの停止およびAPIキーの再設定。
    • 権限エラーが出ていた収集項目(filesystems等)の無効化。
  2. リソース制限の導入
    • systemd のUnitファイルに MemoryLimit などを設定し、監視ツールが暴走してもOSごと道連れにしないよう制限を設ける。
  3. 「死に際のログ」を残す設定へ変更
    • メトリクス収集ツール(Netdata)の設定を、デフォルトの「メモリモード」から「DBEngineモード(ディスク保存)」に変更。
    • これにより、次回同様のフリーズが発生しても、直前までのCPU/メモリ使用率の推移が確認できるようにした。

6. まとめ

「サーバーを監視するためのツール」が、設定ミス一つで「サーバーをダウンさせる攻撃者(DoS)」に変貌するという、皮肉かつ典型的な事例でした。

特にSDカード運用等のリソースが限られた環境では、「監視ツール自体のリソース消費」もまた、監視・制限の対象にすべきであることを痛感しました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?