/var/log(システムログディレクトリ)
『/var/log』は Linux システムにおけるログファイルの標準格納ディレクトリです。カーネルのメッセージ・認証情報・各サービスのアクセス記録など、システム運用に不可欠な情報が集約されています。障害調査・不正アクセスの検知・サービスの動作確認など、あらゆる場面でログファイルの読み方が問われます。tail -f でリアルタイム監視し、grep で絞り込み、zcat / zgrep でローテート済みファイルを検索するのが基本の流れです。
構文
# -----------------------------------------------
# ログのリアルタイム監視
# -----------------------------------------------
# tail -f {ログファイル}
# → ファイルの末尾に追記される行をリアルタイムで表示します
# → Ctrl+C で終了します
# 例: sudo tail -f /var/log/syslog
# tail -n {行数} {ログファイル}
# → ファイルの末尾から指定行数だけ表示します
# 例: sudo tail -n 100 /var/log/auth.log
# -----------------------------------------------
# ログのキーワード検索
# -----------------------------------------------
# grep {パターン} {ログファイル}
# → ログファイルから特定のキーワードを含む行を抽出します
# 例: sudo grep "Failed password" /var/log/auth.log
# grep -i {パターン} {ログファイル}
# → 大文字小文字を区別せず検索します
# 例: sudo grep -i "error" /var/log/syslog
# grep -E "{パターン1}|{パターン2}" {ログファイル}
# → 複数キーワードの OR 検索を行います
# 例: sudo grep -E "error|warn|crit" /var/log/syslog
# -----------------------------------------------
# ローテート済みログの検索
# -----------------------------------------------
# zcat {.gz ファイル}
# → gzip 圧縮されたローテート済みログを展開して表示します
# 例: sudo zcat /var/log/syslog.2.gz
# zgrep {パターン} {.gz ファイル}
# → 圧縮されたログファイルを展開せず直接 grep します
# 例: sudo zgrep "Failed password" /var/log/auth.log.2.gz
# -----------------------------------------------
# ページャで閲覧する
# -----------------------------------------------
# less {ログファイル}
# → ログファイルをページャで閲覧します
# → Shift+F でリアルタイム追記モードに切り替えられます(tail -f 相当)
# → / に続けてキーワードを入力して検索できます
# → q で終了します
# 例: sudo less /var/log/nginx/error.log
# -----------------------------------------------
# systemd のジャーナルログとの連携
# -----------------------------------------------
# journalctl -u {サービス名} -f
# → systemd 管理下のサービスのログをリアルタイム表示します
# → /var/log 以下のファイルではなくバイナリ形式で管理されます
# 例: sudo journalctl -u nginx -f
# 詳細は journalctl のページを参照してください
主要ログファイル一覧
| ファイル / ディレクトリ | 説明 |
|---|---|
/var/log/syslog | システム全体の汎用ログです。カーネル・各種デーモンのメッセージが記録されます。Debian / Ubuntu 系で利用されます。 |
/var/log/messages | syslog に相当するシステム全体のログです。RHEL / AlmaLinux / CentOS 系で利用されます。 |
/var/log/auth.log | SSH ログイン・sudo の使用・PAM 認証など、認証に関するすべての記録が残ります。Debian / Ubuntu 系で利用されます。 |
/var/log/secure | auth.log に相当する認証ログです。RHEL / AlmaLinux / CentOS 系で利用されます。 |
/var/log/kern.log | カーネルが出力するメッセージが記録されます。ハードウェアエラー・ドライバの警告などの調査に使用します。 |
/var/log/dmesg | 起動時にカーネルが出力したメッセージを保存したファイルです。dmesg コマンドでも同様の情報を確認できます。 |
/var/log/nginx/ | Nginx のログディレクトリです。access.log(アクセス記録)と error.log(エラー記録)が格納されます。 |
/var/log/nginx/access.log | Nginx へのすべての HTTP リクエストが記録されます。IP アドレス・リクエスト内容・レスポンスコード・バイト数が含まれます。 |
/var/log/nginx/error.log | Nginx が出力したエラーメッセージが記録されます。設定ミス・PHP-FPM 接続失敗・パーミッションエラーなどの調査に使用します。 |
/var/log/apache2/ | Apache のログディレクトリです。access.log と error.log が格納されます。 |
/var/log/mysql/ | MySQL / MariaDB のログディレクトリです。エラーログ・スロークエリログが格納されます。 |
/var/log/mail.log | メール送受信に関するログです。Postfix / Sendmail などのメール転送エージェントのメッセージが記録されます。 |
/var/log/cron | cron ジョブの実行記録です。スケジュールタスクが正常に動いているか確認できます。 |
/var/log/dpkg.log | apt / dpkg によるパッケージのインストール・削除・更新の履歴が記録されます。Debian / Ubuntu 系で利用されます。 |
/var/log/lastlog | 各ユーザーの最終ログイン日時が記録されたバイナリファイルです。lastlog コマンドで内容を確認します。 |
/var/log/wtmp | ログイン・ログアウトの履歴を保存したバイナリファイルです。last コマンドで内容を確認します。 |
/var/log/btmp | ログイン失敗の記録を保存したバイナリファイルです。lastb コマンドで内容を確認します。 |
使用例
SSH への不正ログイン試行を調査する
# -----------------------------------------------
# 碇シンジのサーバーへの不正ログイン試行を調査します
# -----------------------------------------------
# auth.log からパスワード認証の失敗を抽出します
# (RHEL 系では /var/log/secure を使用します)
sudo grep "Failed password" /var/log/auth.log
# 接続元 IP アドレスごとに試行回数を集計します
# awk で IP アドレスを取り出し、sort | uniq -c で集計します
sudo grep "Failed password" /var/log/auth.log \
| awk '{print $(NF-3)}' \
| sort | uniq -c | sort -rn | head -10
# ユーザー名 shinji への不正試行だけを絞り込みます
sudo grep "Failed password for shinji" /var/log/auth.log
実行するコマンドは次の通りです。
$ sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -5
482 203.0.113.42
317 198.51.100.7
201 192.0.2.88
94 203.0.113.101
12 192.0.2.5
Nginx のエラーログからエラーを絞り込む
# ----------------------------------------------- # 綾波レイのサイトで発生した Nginx エラーを調査します # ----------------------------------------------- # error.log の末尾 50 行を確認します sudo tail -n 50 /var/log/nginx/error.log # [error] レベル以上のメッセージだけを抽出します sudo grep "\[error\]" /var/log/nginx/error.log # PHP-FPM との接続失敗(connect() failed)だけを抽出します sudo grep "connect() failed" /var/log/nginx/error.log # アクセスログから HTTP 5xx エラーのリクエストを確認します # レスポンスコードが 5 で始まる行を抽出します sudo awk '$9 ~ /^5/' /var/log/nginx/access.log | tail -20
実行するコマンドは次の通りです。
$ sudo grep "connect() failed" /var/log/nginx/error.log 2026/03/25 14:32:01 [error] 1234#1234: *5678 connect() failed (111: Connection refused) while connecting to upstream, client: 203.0.113.10, server: rei.example.com, request: "GET /api/status HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000"
ローテート済みログを含めて過去のログを検索する
# ----------------------------------------------- # 惣流アスカのサーバーで過去1週間のログを調査します # ----------------------------------------------- # /var/log/auth.log* にはローテートされた過去ログも含まれます # 現行ファイルと圧縮済みファイルを一括検索します sudo grep "Accepted publickey for asuka" /var/log/auth.log* # 圧縮済みファイルを zgrep で検索します(.gz を展開不要) sudo zgrep "Accepted publickey for asuka" /var/log/auth.log.2.gz # ローテート済みファイルの一覧を確認します ls -lh /var/log/auth.log*
実行するコマンドは次の通りです。
$ ls -lh /var/log/auth.log* -rw-r----- 1 syslog adm 48K Mar 25 23:59 /var/log/auth.log -rw-r----- 1 syslog adm 62K Mar 18 23:59 /var/log/auth.log.1 -rw-r----- 1 syslog adm 18K Mar 11 23:59 /var/log/auth.log.2.gz -rw-r----- 1 syslog adm 14K Mar 4 23:59 /var/log/auth.log.3.gz
sudo の使用履歴を確認する
# ----------------------------------------------- # 葛城ミサトが sudo を使用した記録を確認します # ----------------------------------------------- # auth.log から sudo の使用ログを抽出します sudo grep "sudo:" /var/log/auth.log # ユーザー misato の sudo 使用履歴だけを表示します sudo grep "sudo:.*misato" /var/log/auth.log # sudo の認証失敗(パスワード誤り)を抽出します sudo grep "authentication failure.*misato" /var/log/auth.log
実行するコマンドは次の通りです。
$ sudo grep "sudo:.*misato" /var/log/auth.log Mar 25 09:14:02 nerv-srv sudo: misato : TTY=pts/1 ; PWD=/home/misato ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx Mar 25 11:40:17 nerv-srv sudo: misato : TTY=pts/0 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/nginx/error.log
cron ジョブの実行記録を確認する
# ----------------------------------------------- # 加持リョウジのバッチ処理が正常に動いているか確認します # ----------------------------------------------- # cron の実行ログを確認します # Debian / Ubuntu 系: /var/log/syslog に混在します sudo grep "CRON" /var/log/syslog # RHEL 系: /var/log/cron に専用ファイルがあります sudo tail -n 50 /var/log/cron # 失敗したジョブ(CMD 以外のメッセージ)を抽出します sudo grep "CRON" /var/log/syslog | grep -v "CMD"
実行するコマンドは次の通りです。
$ sudo grep "CRON" /var/log/syslog | tail -5 Mar 25 03:00:01 nerv-srv CRON[4501]: (kaji) CMD (/home/kaji/bin/backup.sh >> /home/kaji/logs/backup.log 2>&1) Mar 25 04:00:01 nerv-srv CRON[4812]: (kaji) CMD (/home/kaji/bin/report.sh) Mar 25 05:00:01 nerv-srv CRON[5103]: (kaji) CMD (/home/kaji/bin/backup.sh >> /home/kaji/logs/backup.log 2>&1) Mar 25 06:00:01 nerv-srv CRON[5441]: (kaji) CMD (/home/kaji/bin/report.sh) Mar 25 07:00:01 nerv-srv CRON[5782]: (kaji) CMD (/home/kaji/bin/backup.sh >> /home/kaji/logs/backup.log 2>&1)
概要
『/var/log』ディレクトリ以下のログファイルは、Linux サーバーの状態把握・障害調査・セキュリティ監査の出発点です。ログファイルは logrotate によって定期的にローテートされ(圧縮・世代管理)、ディスクを圧迫しないよう管理されます。logrotate の設定は /etc/logrotate.conf および /etc/logrotate.d/ に格納されています。systemd を採用したシステムでは、多くのサービスのログがファイルではなくバイナリ形式のジャーナルで管理されます。その場合は journalctl コマンドで参照します。ログの転送・集約には rsyslog(/etc/rsyslog.conf)が用いられ、リモートサーバーへの集中管理も可能です。SSH への不正アクセスを自動ブロックするには fail2ban と組み合わせることで、auth.log の内容をもとに自動的に IP を遮断できます。パスワード認証・公開鍵認証の仕組みについては passwd / shadow および ssh / authorized_keys のページも参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。