Linuxサーバー管理

Linuxのログを読む【/var/logの見方完全ガイド】

Linuxサーバー管理
記事内に広告が含まれています。

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.logcron の実行ログ共通(パスは異なる)
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.logFailed password 集計でブルートフォース攻撃を検出
  • lnavmultitail でリアルタイム監視を効率化できる
  • ディストリビューションによってログファイルのパスが異なる点に注意

コメント

タイトルとURLをコピーしました