Djangoでサイトが突然表示されなくなった。問題はデータベースサービスが停止していたことでした。

test

ご指摘ありがとうございます。以下に 完全なMarkdown形式のブログ記事 を修正版として提供いたします。

✅ 完成版:ブログ記事(Markdown形式)

【調査ログ公開】PostgreSQLサービスが停止していた!?原因の特定と復旧までの全手順

Djangoアプリを稼働させているサーバーで、ある日突然「データベースに接続できない」状態に。
調べたところ、PostgreSQLサービスの停止が原因でした。

この記事では、その原因をどのように突き止め、どのように復旧したかを全手順つきで公開します。


🔍 調査の流れと実行したコマンド

1. PostgreSQLサービスの基本ログ確認

```bash journalctl -u postgresql -n 50 --no-pager

•   サービスの最新ログを確認
•   6月3日15:47に起動した記録のみあり、停止ログはなし

  1. 期間を指定したログ確認

journalctl -u postgresql --since 2025-06-01 --no-pager

•   より広範囲のログを確認
•   起動ログのみで停止記録は見つからず

  1. PostgreSQLに関連する全ログの抽出

journalctl --since 2025-06-01 --grep postgresql --no-pager

•   システム全体のログから「postgresql」関連を検索
•   postgresql@14-mainでアサーション失敗が発生していたログを発見

  1. 特定クラスターのログを確認(14-main)

journalctl -u postgresql@14-main --since 2025-06-01 --no-pager

•   6月7日13:55と16:08にアサーション失敗の記録

  1. システム再起動の記録を確認

journalctl --since 2025-06-01 -g reboot --no-pager

•   6月3日15:17頃に再起動が発生していたことを特定

  1. 再起動後のPostgreSQL起動状況を確認

journalctl --since "2025-06-03 15:17:00" --until "2025-06-03 15:50:00" -g postgresql --no-pager

•   PostgreSQL 16-main クラスターは正常に起動
•   14-mainは起動に失敗していた

  1. 現在のPostgreSQLクラスターの状態を確認

pg_lsclusters

•   16-mainクラスターのみが起動中で、14-mainは存在していないことを確認

🧠 調査結果のまとめ

項目 内容 発端 6月3日15:17のシステム再起動 稼働中のクラスター PostgreSQL 16-main 停止の影響を受けた部分 PostgreSQL 14-main(すでに存在しないが、ログで影響を確認) 現在の状態 16-mainのみが稼働中で、アプリも正常に接続している

🔁 推定される停止原因 • システムメンテナンスによる自動再起動 • 手動での再起動操作 • 不明な障害(ログには明確なトリガーなし)

💡 学びと対策ポイント • PostgreSQLのクラスター構成は定期的に見直すべき • pg_lsclusters で不要なクラスターが残っていないかチェック • systemdログの期間・キーワード検索が強力

✅ 現在の状態と結論

PostgreSQLサービスは現在 16-mainのみが正常に稼働中 であり、 Djangoアプリも無事復旧しています。

⚙️ 使用環境 • OS:Ubuntu 22.04 • DB:PostgreSQL 16 • Webアプリ:Django • WSGI:Gunicorn • Webサーバー:Nginx

✍️ まとめ

Djangoの接続エラーは、アプリの不具合よりも 環境やバックエンドのトラブルが原因であることが多い です。 本記事が、同様の障害に直面した方の助けになれば幸いです。


何か文章表現や図示などを追加したい場合も対応可能ですので、お気軽にどうぞ!