障害対応で頼りになるのはやっぱりログです。運用でよく使うログの見方を、実務目線でまとめます。
まずどこを見るか
Linuxの代表的なログは、
/var/log/messages(RHEL系)//var/log/syslog(Debian系) … システム全般/var/log/secure//var/log/auth.log… 認証・SSH関連/var/log/cron… cronの実行- アプリ個別のログ(
/var/log/nginx/など)
「いつ何が起きたか」を追うなら、まずシステムログと、対象アプリのログを時刻で突き合わせます。
時刻で絞るのが基本
障害発生時刻の前後を切り出すのが定石です。
grep "10:30" /var/log/messages
less +G /var/log/messages ← 末尾(最新)から見る
tail -f /var/log/nginx/error.log ← リアルタイムで追う
tail -f は、再現しそうな操作をしながらログが流れるのを見られるので、切り分けで重宝します。
systemd環境なら journalctl
最近のディストリはsystemdなので、journalctlが強力です。
journalctl -u nginx … サービス単位で見る
journalctl --since "10:00" --until "10:40" … 時刻で絞る
journalctl -p err -b … 今回起動分のエラー以上だけ
journalctl -f … リアルタイム追尾
サービス単位・時刻・重要度で自在に絞れるので、慣れると調査が速くなります。
エラーの「最初の1件」を探す
障害時はエラーが大量に出ますが、大事なのは一番最初のエラーです。後続は連鎖した二次エラーであることが多いので、時系列で一番早いエラーメッセージを起点に原因をたどります。
ログを読むコツ
- 「正常時のログ」を普段から見ておく(異常に気づける)
- タイムスタンプは絶対に信じる。体感時刻とズレることがある(NTPずれも疑う)
- 分からないエラーメッセージは、そのまま検索する
ログは「障害の防犯カメラ」です。読み方の型を持っておくと、原因究明のスピードが段違いになります。