tail -fコマンドでログをリアルタイムに監視する方法|grepフィルタやローテーション対策も


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > tail -fコマンドでログをリアルタイムに監視する方法|grepフィルタやローテーション対策も
「ログファイルをリアルタイムで監視したいけど、どうやって確認すればいいのか分からない」

Linuxサーバーで障害やエラーが発生したとき、ログファイルをリアルタイムに追跡できるかどうかで、原因特定のスピードが大きく変わります。catコマンドで毎回ファイルを開き直しているようでは、刻々と書き込まれるログを追いかけることはできません。

この記事では、tail -fコマンドによるリアルタイムログ監視の基本から、複数ファイルの同時監視、grepとの組み合わせによるフィルタリング、さらにログが流れない時のトラブルシュートまで、現場で使える実践テクニックを解説します。


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を無料で手に入れる 図解60P/登録10秒/解除も3秒

tail -fとは? ログをリアルタイムで追跡する仕組み

tailコマンドは、ファイルの末尾を表示するコマンドです。ここに-fオプション(follow)を付けると、ファイルの末尾を表示した後も終了せず、新しく追記された内容をリアルタイムで画面に出力し続けます。

仕組みとしては、tailがファイルの末尾を監視し続け、書き込みが行われるたびに追加分を表示するという動作です。syslogやrsyslog、journaldなどのログデーモンがファイルに1行書き込むたびに、その内容が即座に画面に表示されます。

ログ監視を終了するにはCtrl+Cを押してください。Linuxに慣れていない方がよくやるのがCtrl+Zで停止してしまうケースですが、これはプロセスを一時停止しただけでバックグラウンドに残り続けるため、必ずCtrl+Cで終了してください。

基本的な使い方

1. /var/log/messagesをリアルタイムで監視する

もっとも基本的な使い方です。システムの汎用ログファイルである/var/log/messagesをリアルタイムで監視します。

# /var/log/messagesをリアルタイムで監視する $ sudo tail -f /var/log/messages Mar 30 10:15:01 server01 systemd: Started Session 145 of user root. Mar 30 10:15:03 server01 kernel: TCP: request_sock_TCP: Possible SYN flooding on port 80. Mar 30 10:15:05 server01 sshd[12345]: Accepted publickey for admin from 192.168.1.10 port 55432 Mar 30 10:15:10 server01 crond[6789]: (root) CMD (/usr/local/bin/backup.sh)

実行すると、まずファイル末尾の10行が表示され、その後は新しいログが書き込まれるたびに画面に追加されていきます。

※ /var/log/messages はroot権限でないと読めない場合が多いため、sudoを付けて実行してください。

2. 表示行数を指定して監視を開始する

デフォルトでは末尾10行から表示が始まりますが、-nオプションで表示開始行数を変更できます。

# 末尾30行を表示してからリアルタイム監視を開始する $ sudo tail -n 30 -f /var/log/messages # 末尾0行(過去のログを表示せず)でリアルタイム監視を開始する $ sudo tail -n 0 -f /var/log/messages

障害対応で「今この瞬間から」のログだけを見たい場合は-n 0が便利です。過去のログを遡りたい場合は-n 100のように大きめの数字を指定してください。

3. Webサーバーのアクセスログを監視する

Apache HTTP ServerやNginxのアクセスログ・エラーログの監視は、サーバー運用でもっとも頻繁に行う作業のひとつです。

# Apacheのアクセスログをリアルタイムで監視する $ sudo tail -f /var/log/httpd/access_log # Apacheのエラーログをリアルタイムで監視する $ sudo tail -f /var/log/httpd/error_log # Nginxのアクセスログをリアルタイムで監視する $ sudo tail -f /var/log/nginx/access.log

リリース直後のアクセス状況の確認や、特定のエラーが発生しているかどうかの調査に使えます。

実務で使うtail -fの応用テクニック

1. grepと組み合わせて特定のログだけ表示する

ログファイルには大量の情報が流れてきます。特定のキーワードに絞って監視したい場合は、パイプでgrepに渡します。

# "error"を含む行だけをリアルタイムで監視する $ sudo tail -f /var/log/messages | grep -i "error" # 特定のIPアドレスからのアクセスだけを監視する $ sudo tail -f /var/log/httpd/access_log | grep "192.168.1.100" # SSHのログイン試行だけを監視する $ sudo tail -f /var/log/secure | grep "sshd"

grep -iを使うと大文字・小文字を区別せずにマッチするため、ERRORもerrorもErrorも拾えます。障害対応時はgrep -i "error\|fail\|denied"のように複数キーワードをまとめて指定すると効率的です。

2. 複数のログファイルを同時に監視する

tail -fはファイルを複数指定することで、同時に監視できます。

# messagesとsecureを同時に監視する $ sudo tail -f /var/log/messages /var/log/secure ==> /var/log/messages <== Mar 30 10:20:01 server01 systemd: Started Session 146 of user root. ==> /var/log/secure <== Mar 30 10:20:05 server01 sshd[12500]: Failed password for invalid user test from 10.0.0.5 port 43210

ファイル間で切り替わるたびに==> ファイル名 <==というヘッダーが表示されるため、どのファイルのログかが一目で判別できます。

3. tail -Fでログローテーション後も追跡を続ける

ログファイルは定期的にローテーション(logrotateによるファイル切り替え)が行われます。tail -fは元のファイル記述子(inode)を追跡するため、ローテーション後の新しいファイルを自動追跡しません。

-Fオプション(大文字)を使うと、ファイル名を基準に追跡するため、ログローテーションが発生しても新しいファイルに自動で切り替わります。

# ログローテーション後も追跡を続ける(-Fオプション) $ sudo tail -F /var/log/messages # -Fは --follow=name --retry と同じ意味 $ sudo tail --follow=name --retry /var/log/messages

長時間のログ監視や、cronで定期実行する監視スクリプトでは、-fではなく-Fを使うのが実務の鉄則です。

4. lessの+Fモードでログを前後にスクロールする

tail -fはリアルタイム監視に特化していますが、「少し前のログに戻りたい」という場面では不便です。そんなときはless +Fを使ってください。

# less +Fでリアルタイム監視を開始する $ sudo less +F /var/log/messages

リアルタイム監視中:tail -fと同じ動作でログが流れる
Ctrl+Cを押す:通常のlessモードに切り替わり、上下スクロールや検索(/キーワード)ができる
Shift+Fを押す:再びリアルタイム監視モードに戻る

障害対応中に「あのエラーメッセージ、何行か前に見えた気がする」というとき、tail -fでは戻れませんが、less +Fなら一時停止して確認できます。

主要なログファイルの一覧と用途

tail -fで監視するにも、どのログファイルに何が記録されているかを知らなければ始まりません。主要なログファイルを把握しておきましょう。

ログファイル 記録される内容
/var/log/messages システム全般の汎用ログ(カーネル、デーモン、サービスの起動停止など)
/var/log/secure 認証関連(SSH、sudo、suなどのログイン・認証成功/失敗)
/var/log/cron cronジョブの実行記録
/var/log/maillog メール送受信の記録(Postfix、Sendmailなど)
/var/log/httpd/access_log Apache HTTP Serverのアクセスログ
/var/log/httpd/error_log Apache HTTP Serverのエラーログ
/var/log/nginx/access.log Nginxのアクセスログ
/var/log/boot.log OS起動時のサービス起動ログ
/var/log/dmesg カーネルメッセージ(ハードウェア認識、ドライバ読み込みなど)

ディストリビューションによっては/var/log/messagesの代わりに/var/log/syslogが使われます(Ubuntu/Debianなど)。自分の環境のログ構成はls -la /var/log/で確認してください。

「tail -fでログが流れない」時のトラブルシュート

1. ログファイルへの書き込みが止まっている

tail -fは「ファイルに追記があれば表示する」という仕組みのため、そもそもログが書き込まれていなければ何も表示されません。

# rsyslogが動いているか確認する $ systemctl status rsyslog # rsyslogが停止していた場合は起動する $ sudo systemctl start rsyslog

rsyslog(またはsyslog-ng)が停止していると、/var/log/messages等への書き込みが行われません。まずログデーモンの稼働状態を確認してください。

2. ログローテーションでファイルが切り替わった

tail -f(小文字f)はinodeを追跡するため、logrotateでファイルが切り替わると、古いファイル(リネームされたファイル)を見続けてしまいます。

# ファイルのinode番号を確認する $ ls -i /var/log/messages 12345678 /var/log/messages # ログローテーションが実行されたか確認する $ ls -la /var/log/messages* -rw------- 1 root root 1234 Mar 30 10:30 /var/log/messages -rw------- 1 root root 985432 Mar 30 04:02 /var/log/messages-20260330

対策は前述のとおり、tail -F(大文字F)を使うことです。長時間監視する場合は常に-Fを使う習慣をつけてください。

3. パーミッション不足で読み取れない

ログファイルのパーミッションによっては、一般ユーザーでは読み取れない場合があります。

# パーミッションを確認する $ ls -la /var/log/secure -rw------- 1 root root 54321 Mar 30 10:30 /var/log/secure # 一般ユーザーで実行するとPermission deniedになる $ tail -f /var/log/secure tail: cannot open '/var/log/secure' for reading: Permission denied # sudoを付けて実行する $ sudo tail -f /var/log/secure

/var/log/secureや/var/log/cronなどはroot所有でパーミッションが600(rw-------)に設定されていることが多いため、sudoを付けて実行してください。

4. journaldのみでファイル出力されていない

CentOS 7以降やRHEL 8以降では、systemd-journaldがログを管理しています。rsyslogが併用されていない環境では、/var/log/messagesにログが出力されないことがあります。

# journaldでリアルタイムにログを確認する(tail -fの代替) $ sudo journalctl -f # 特定のサービスのログだけをリアルタイムで確認する $ sudo journalctl -u sshd -f # 優先度がerr以上のログだけをリアルタイムで確認する $ sudo journalctl -p err -f

journalctl -ftail -f /var/log/messagesの代替として使えます。systemdを採用しているディストリビューションでは、journalctlも併せて覚えておくと対応の幅が広がります。

本記事のまとめ

tail -fによるリアルタイムログ監視は、Linuxサーバー運用の基本中の基本です。ここで紹介した内容を一覧にまとめます。

やりたいこと コマンド
ログをリアルタイムで監視する sudo tail -f /var/log/messages
末尾N行から監視を開始する sudo tail -n 30 -f /var/log/messages
特定キーワードだけ監視する sudo tail -f /var/log/messages | grep -i "error"
複数ファイルを同時に監視する sudo tail -f /var/log/messages /var/log/secure
ログローテーション後も追跡する sudo tail -F /var/log/messages
前後スクロールしながら監視する sudo less +F /var/log/messages
journaldでリアルタイム監視する sudo journalctl -f
特定サービスのログだけ監視する sudo journalctl -u sshd -f


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

※登録30秒/合わなければ解除3秒


宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが最近の悩み。ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る