Phase 1ではログの基本的な見方を学びました。この記事では /var/log/ の構造を深く理解し、障害調査で即座に原因を特定できるスキルを身につけます。
💡 systemd環境(Ubuntu 16.04以降・RHEL 7以降など)では journalctl を優先して使いましょう。/var/log/syslog や /var/log/messages は journald のデータが rsyslog 経由で出力されたものです。journalctl -p err -b のようにフィルタ検索できる journalctl の方が調査効率が高いです。詳しくはjournalctl完全ガイドをご覧ください。
💡 systemd環境(Ubuntu 16.04以降・RHEL 7以降など)では journalctl を優先して使いましょう。/var/log/syslog や /var/log/messages は journald のデータが rsyslog 経由で出力されたものです。journalctl -p err -b のようにフィルタ検索できる journalctl の方が調査効率が高いです。詳しくはjournalctl完全ガイドをご覧ください。
/var/log/ 主要ファイル一覧(ディストリ別)
| ファイル | 内容 | ディストリ |
|---|---|---|
| syslog | システム全体のログ(最初に確認) | Ubuntu/Debian |
| messages | システム全体のログ | RHEL/CentOS |
| auth.log | 認証・SSH・sudo のログ | Ubuntu/Debian |
| secure | 認証・SSH のログ | RHEL/CentOS |
| kern.log | カーネルメッセージ | Ubuntu/Debian |
| dmesg(コマンド) | ブート時のカーネルログ | 共通 |
| dpkg.log | パッケージ操作の履歴 | Ubuntu/Debian |
| yum.log / dnf.log | パッケージ操作の履歴 | RHEL/CentOS |
| cron / cron.log | cron の実行ログ | 共通(パスは異なる) |
| nginx/ apache2/ | Webサーバーのアクセス・エラーログ | 共通(アプリ依存) |
障害調査の実践的アプローチ
# ① まずログイン履歴で障害発生の時刻を特定
$ sudo last -20
$ sudo lastlog # 全ユーザーの最終ログイン
# ② その時刻前後のsyslogを確認
$ sudo grep "Mar 15 14:" /var/log/syslog | less
# ③ エラーワードで絞り込む
$ sudo grep -iE "error|fail|critical|panic|killed" /var/log/syslog | tail -50
# ④ 複数ファイルをまとめて検索
$ sudo grep -r "segfault" /var/log/ 2>/dev/null
# OOMKiller(メモリ不足による強制終了)を確認
$ sudo dmesg | grep -i "oom\|killed process\|out of memory"
# ブート後のエラーを重大度別に確認
$ sudo dmesg --level=err,crit,alert,emerg
# 特定時刻以降のカーネルメッセージ
$ sudo dmesg -T | grep "Mar 15"
不正アクセスの痕跡を調査する
# SSH ログイン失敗を確認(Ubuntu/Debian)
$ sudo grep "Failed password" /var/log/auth.log | tail -20
# 同じIPからの連続失敗(ブルートフォース攻撃の検出)
$ sudo grep "Failed password" /var/log/auth.log | \
awk '{print $11}' | sort | uniq -c | sort -rn | head -10
# SSH 成功ログインを確認
$ sudo grep "Accepted" /var/log/auth.log | tail -20
# sudo の使用履歴(誰がいつ何をsudoしたか)
$ sudo grep "sudo" /var/log/auth.log | grep "COMMAND" | tail -30
# 存在しないユーザーでのログイン試行
$ sudo grep "Invalid user" /var/log/auth.log | \
awk '{print $8}' | sort | uniq -c | sort -rn | head -10
ログのリアルタイム監視
# 複数ファイルを同時にリアルタイム監視
$ sudo tail -f /var/log/syslog /var/log/auth.log
# エラーのみをフィルタしてリアルタイム表示
$ sudo tail -f /var/log/syslog | grep -iE "error|fail|warn"
# multitail:複数ログを分割表示(要インストール)
$ sudo apt install multitail
$ sudo multitail /var/log/syslog /var/log/auth.log
# lnav:ログビューア(ハイライト・フィルタ機能あり)
$ sudo apt install lnav
$ sudo lnav /var/log/syslog
ログの基本的な読み方
# syslog の1行の構造
# Mar 15 14:23:01 hostname service[PID]: message
# [日時] [ホスト名] [サービス][PID] [メッセージ]
Mar 15 14:23:01 myserver sshd[1234]: Failed password for root from 192.168.1.100
# ↑サービス名 ↑内容 ↑接続元IP
# 特定ホストからのログのみ抽出
$ sudo grep "192.168.1.100" /var/log/auth.log
# 特定時間帯のログを抽出
$ sudo awk '/Mar 15 14:00/,/Mar 15 15:00/' /var/log/syslog
まとめ
- Ubuntu/Debianは
syslog/auth.log、RHEL/CentOSはmessages/secureがメイン - 障害調査は「時刻特定→syslog確認→エラーワード絞り込み」の順で進める
dmesg | grep -i oomでOOMKillerによる強制終了を確認auth.logのFailed password集計でブルートフォース攻撃を検出lnavやmultitailでリアルタイム監視を効率化できる- ディストリビューションによってログファイルのパスが異なる点に注意



コメント