log ファイルの読み方 - システムログ解析入門

log ファイルの読み方 - システムログ解析入門

この記事で解決できること

  • /var/log/ 配下のログファイルの構造が分かる
  • tail -fgrepless でログを効率よく読める
  • syslogauth.logkern.log など代表的なログの違いが分かる
  • ログのフォーマット(タイムスタンプ・プロセス名・PID)を読み解ける
  • 障害対応で使う実践的な調査パターンが身につく

結論(ログ調査の基本型)

  1. まず ls /var/log/ で対象ファイルを特定する
  2. tail -n 100 で末尾から確認、リアルタイム監視は tail -f
  3. grep でエラーキーワードを絞り込む
  4. less で前後の文脈をたどる

/var/log ディレクトリとは何か

Linux のシステムログはほぼすべて /var/log/ 以下に集約されている。カーネル・認証・アプリケーションが書き込んだ記録がここにあり、障害対応の出発点になる。

ls /var/log/
auth.log   dpkg.log  kern.log  syslog    ubuntu-advantage.log
boot.log   faillog   lastlog   ufw.log   wtmp

/var/log/ に書き込む主体は syslog デーモン(rsyslog / syslog-ng)と各アプリケーション自身の2種類がある。

代表的なログファイルとその役割とは

/var/log/ 配下には用途別にファイルが分かれており、調査対象を素早く絞り込むためにそれぞれの役割を把握しておく必要がある。

ファイル 内容 調査用途
syslog システム全般のメッセージ 原因不明の障害
auth.log 認証・sudo・SSH 不正ログイン・sudo 失敗
kern.log カーネルメッセージ ハードウェア障害・OOM
dpkg.log パッケージ管理履歴 インストール・更新の追跡
ufw.log UFW ファイアウォール 遮断された通信
boot.log 起動時ログ 起動失敗の原因特定

Ubuntu 20.04 以降は syslog が存在しない構成もある。その場合は journalctl でシステムログを確認する。

ログを読むための基本コマンドとは

ログファイルの閲覧には cat / less / tail の3つを状況に応じて使い分けるのが基本だ。

tail — 末尾から読む

# 末尾50行を表示
tail -n 50 /var/log/syslog

# リアルタイムで追跡(Ctrl+C で終了)
tail -f /var/log/syslog

-f(follow)は障害発生中にログの流れをリアルタイムで監視するときに使う。

less — スクロールして読む

less /var/log/auth.log

less 内での主要操作:

  • G:末尾へジャンプ
  • g:先頭へジャンプ
  • /キーワード:前方検索
  • n:次のマッチへ
  • q:終了

cat — 全体を一気に流す(短いファイル向き)

cat /var/log/boot.log

ログが長いファイルに cat を使うと大量出力になるため、通常は lesstail を優先する。

grep でログをフィルタリングする方法とは

長大なログから目的の行を絞り込むには grep を使う。コマンド単体よりも tailless との組み合わせが実務では多い。

エラー行を抽出する

grep -i "error" /var/log/syslog

-i で大文字小文字を区別しないマッチになる。

複数キーワードで絞り込む

grep -E "error|warn|failed" /var/log/syslog

リアルタイムで grep する

tail -f /var/log/syslog | grep "error"

特定の日付だけ確認する

grep "May 31" /var/log/auth.log

前後の文脈も表示する

grep -A 5 -B 5 "Failed password" /var/log/auth.log

-A 5 はマッチした行の後5行、-B 5 は前5行を表示する。

sudo なしで読めないログファイルがある。Permission denied が出たら sudo less /var/log/kern.log のように実行する。

ログのフォーマットを読み解く方法

syslog 形式のログは固定したフォーマットで書かれており、パターンを知っていると素早く情報を抽出できる。

May 31 10:23:45 myserver sshd[12345]: Failed password for root from 192.168.1.100 port 22 ssh2
フィールド 意味
タイムスタンプ May 31 10:23:45 ログが記録された日時
ホスト名 myserver メッセージを発したホスト
プロセス名 sshd ログを書き込んだプロセス
PID [12345] プロセスID(追跡に使う)
メッセージ Failed password... 実際のログ内容

ログのタイムスタンプはサーバのローカルタイムで記録される。タイムゾーンが UTC の場合、表示と実際の時刻がずれていることに注意する。

よくあるログ調査パターンとは

障害対応でよく使う実践的なパターンを一覧にまとめる。

SSH ログイン失敗を確認する

sudo grep "Failed password" /var/log/auth.log | tail -20

sudo の使用履歴を確認する

sudo grep "sudo" /var/log/auth.log | grep "COMMAND"

カーネルエラーを確認する

sudo grep -i "error\|oops\|panic" /var/log/kern.log | tail -30

パッケージのインストール履歴を確認する

grep " install " /var/log/dpkg.log

直近の起動時エラーを確認する

sudo less /var/log/boot.log

journalctl との使い分け方とは

Ubuntu 16.04 以降、systemd が採用されてから journalctl が主要なログ確認手段となった。/var/log/ のファイルと journalctl は並存する。

場面 使うべきツール
systemd サービスのログ journalctl -u nginx
カーネルメッセージ journalctl -k
起動時のログ journalctl -b
伝統的なファイルに書かれたアプリのログ tail -f /var/log/アプリ.log
/var/log/auth.log の内容 どちらでも可
# journalctl でリアルタイム追跡
journalctl -f

# 特定サービスのログを tail する
journalctl -u nginx -f

journalctl は systemd の journal に蓄積されたログを読む。/var/log/ のテキストファイルとは別の仕組みだが、rsyslog の設定によっては両方に書き込まれることもある。

次に読む