aws

【H-5】障害時のログ確認

障害対応時に「journalctl/var/log をどう使い分けるか」は、実務でも非常に重要なポイントです。ここでは、それぞれの特徴を踏まえた上で、効率的な確認手順を紹介します。

journalctl/var/log の役割と違い

項目journalctl/var/log(ログファイル)
ログの種類systemd管理下のシステム全体ログサービスごとの個別ログ
管理対象サービス起動・停止、カーネル、システムイベントApache、MySQLなど各アプリケーション
永続性設定による(揮発性の場合も)基本はファイルとして永続
フィルタリングコマンドで柔軟に可能grep 等で対応
主な用途サーバー全体の状態確認各サービスの詳細な動作確認

■ 障害対応時の使い分けと確認手順

以下のように、段階的に使い分けるのが効率的です。

【ステップ1】サーバー全体の異常確認 〜 journalctl 活用 〜

サーバーの挙動がおかしい場合、まずはシステム全体ログから異常の兆候を探ります。

直近の重大エラーを確認

sudo journalctl -p 3 -xe
  • -p 3:優先度「エラー」以上(緊急、致命的、エラー)のログのみ表示
  • -xe:詳細表示+直近のログ

特定サービス(例:Apache)のログ確認

sudo journalctl -u httpd
  • Apacheの起動・停止・失敗履歴を確認可能

サーバー再起動やカーネル関連エラー確認

sudo journalctl -k
  • カーネルメッセージのみ抽出。ハードウェア異常やOOM Killer発動時に有効

【ステップ2】サービス単位の詳細確認 〜 /var/log 活用 〜

次に、対象サービス(例:Apache)の動作ログを細かく確認します。

Apacheのエラーログ確認

sudo tail -n 50 /var/log/httpd/error_log

アクセスログのリアルタイム監視

sudo tail -f /var/log/httpd/access_log

cronジョブの失敗確認

sudo tail -n 50 /var/log/cron

システム全般のイベント確認

sudo tail -n 100 /var/log/messages
  • ※Amazon Linux 2023では /var/log/syslog は存在せず、/var/log/messages がシステムログの中心。

■ 具体的なユースケース例

ケース① Apacheが起動しない

  1. サービス状態確認sudo systemctl status httpd
  2. 起動失敗の理由を確認 sudo journalctl -u httpd -n 50
  3. 詳細なエラー内容を確認sudo tail -n 50 /var/log/httpd/error_log

ケース② サーバーが不安定・勝手に再起動

  1. カーネルエラーの確認 sudo journalctl -k | grep -i error
  2. OOM Killer発動チェック sudo journalctl | grep -i "out of memory"
  3. 過去の再起動履歴確認last reboot

ケース③ cronが動作しない

  1. cronデーモンのエラー確認 bashコピーする編集するsudo journalctl -u crond
  2. ジョブ実行ログの確認 bashコピーする編集するsudo tail -n 50 /var/log/cron

■ まとめ:確認フローのベストプラクティス

  1. systemctl でサービス状態確認
  2. journalctl でシステム全体・サービス単位の異常把握
  3. /var/log/ でアプリケーションの詳細確認
  4. 必要に応じて、リソース状況(CPU/メモリ/ディスク)やネットワーク確認に移る

この流れを習慣化することで、障害対応のスピードと精度が向上します。