解決
2023年1月2日正午頃、https://bmf-tech.com/
にアクセスするとレスポンスが遅い、500エラーが常に返却されることに気づき、発覚。
grafanaにログインして調査をしようとしたが、ログインができなかった。
一部コンテナが何らかの原因でダウンした可能性を考慮して、デプロイを実施したが、no space left on device
のエラーログを確認したため、別の原因であることを推察。
bmf-techの全サービスが利用できない状況となった。
Nginxのリクエスト状況を確認するに、2023年1月2日午前5時48分頃からサービスダウンしていた。
復旧は同日12時40分頃。
2023年1月2日午前5時48分頃~12時40分頃までの間に58件の500エラーが発生。 ※ある程度のユーザー数を計測したかったが、ログやGA4などから集計できるように調整していないため調査しづらい。
ファイルシステムに空きがないのが原因であった。
ファイルシステム容量を圧迫しているデータを削除し、空き容量を確保。
df -h
/var/lib/docker/
配下であると特定。du -sh /var/lib/docker*
docker system prune -a
journalctl --vacuum-size=200M
上記の対応だけでは不十分だった。
/var/lib/docker/containers
配下に溜まっているログファイルが容量を大きく取っていたので、コンテナのログローテーションを調整することで対応した。
ex.
app:
container_name: "app"
logging:
driver: "json-file"
options:
tag: "{{.ImageName}}|{{.Name}}|{{.ImageFullID}}|{{.FullID}}"
max-size: "10m" // ロールオーバーするファイルサイズ
max-file: "3" // ログが何回ロールオーバされたら破棄するか
この対応により容量に大きく余裕を持つことができた。一番のボトルネックがここであったということ。。。
ファイルシステムの利用率をアラートに追加。事前に逼迫を検知して対処できるようにした。
削除できるデータやローテーションすべきデータを洗い出して節約できるようにしたい。
bmf-techをリプレースして以来、初めての障害であった。
関連書籍