2025年2月27日に social.mikutter.hachune.net(以下s25t)においてサーバーにアクセスができない問題が発生しました。
障害発生期間
2025/02/27 20:00 - 22:20
障害内容
ディスクフルによってDBが停止しました。
被害
- 障害期間中、全ユーザーがサーバへアクセスできませんでした。
- バタフライエフェクトによって、当該mastodonサーバーのユーザーのティーポットが割れました。
原因
mastodonとは別に立ち上げていたサービスがストレージを食い尽くしていました。
概ね230GB程度の容量が消費されていました。
当該サービスはDockerコンテナで運用されていましたが、ダウンさせたところ容量が回復したため揮発性の高い領域が食い潰していたと思われます。
また、mackerelにメトリクスは送付していたものの、アラートの設定が漏れており障害発生まで状況を把握できていませんでした。
対応
- 原因となったサービスの停止をしました。
- mackerelでファイルシステムの使用量のアラートを設定しました。
対応経緯
| 時分 | 事象 |
|---|---|
| 20:03 | 外形監視によるヘルスチェックに失敗し始める。 |
| 20:05 | ヘルスチェックアラートが通知される。 |
| 20:42 | 仕事を終え、アラートに気づく。 |
| 20:45 | 帰宅中、実家に連絡して状況確認。ネットワークの疎通や電源に問題ないことを確認。 |
| 21:40 | 帰宅。腹痛でお手洗いに籠る。 |
| 21:55 | 調査開始。 |
| 22:05 | DBのログよりディスクフルを確認。df -h を見て絶望。 |
| 22:10 | 調査の過程で適当にサービスを落としたら容量が回復。意図せず原因が判明。 |
| 22:20 | mastodonのサービスを再起動。復旧。 |
| 23:50 | 監視ルールの追加。 |
Appendix
ディスクフルのログ
PANIC: could not write file "/var/lib/postgresql/data/global/pg_control": No space left on device
消えないdockerネットワーク
異常終了した影響で、すでに停止しているコンテナがネットワークを握っているような状況になっていたため、強制的に削除しました。
docker network inspect [container_name] docker network disconnect --force [network_name] [container_name] docker compose down
アラートの追加
mackerel-agentのcheck-pluginによるファイルシステムの監視ルールの追加をしました。 mackerel.io
また、上記と重複する形になり意味はないですが、式による監視も勉強がてら追加しました。 dev.classmethod.jp
まとめ
周囲がディスクフルで死ぬ様はたまに観測していましたが、遂に当事者になりました。
メトリクスだけでアラート忘れ、要因がmastodonではなく別サービスなどツッコミどころ多数の障害となりましたが学びになりました。
焼けていなくてよかったです。
s25tユーザーの皆様におかれましては、サーバの復旧を待っていただきありがとうございました。
39.39