より良い分析のためのログ情報のフィルタリング
ログファイルは非常に大きくなる可能性があり、多くの情報が含まれています。ログ分析をより管理しやすくするために、tail コマンドを grep などの他のツールと組み合わせて、特定の情報をフィルタリングして見つけることができます。
'grep' と 'tail' の使用
grep コマンドは、テキスト内のパターンを検索します。tail と組み合わせると、特定のキーワードまたはパターンでログエントリをフィルタリングできます。基本的な構文は次のとおりです。
tail [options] [file] | grep "pattern"
いくつかの実用的な例を見てみましょう。
エラーメッセージの検索
システムログでエラーメッセージを見つけるには、単語 "error" でフィルタリングできます。
sudo tail -n 100 /var/log/syslog | grep -i "error"
grep の -i オプションは、検索で大文字と小文字を区別しないようにするため、"error"、"Error"、"ERROR" などに一致します。次のような出力が表示される場合があります。
May 2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May 2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456
結果が表示されない場合は、ログの最後の 100 行にエラーメッセージがないことを意味します。
特定のサービスの監視
特定のサービスまたはプログラムを監視するために、ログをフィルタリングすることもできます。たとえば、SSH 関連のアクティビティを監視するには、次のようにします。
sudo tail -n 100 /var/log/auth.log | grep "sshd"
これにより、認証ログの SSH 関連のエントリのみが表示されます。
May 2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May 2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May 2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May 2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May 2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
リアルタイムフィルタリング監視
リアルタイム監視とフィルタリングを組み合わせて、特定のイベントが発生したときに監視することもできます。
sudo tail -f /var/log/syslog | grep --line-buffered "test"
--line-buffered オプションは、grep がバッファリングするのではなく、一致する各行を直ちに出力するようにします。これは、tail -f を使用する場合に重要です。
次に、別のターミナルでテストログメッセージを生成します。
logger "This is a test message for grep filtering"
最初のターミナルでは、"test" の grep フィルタリングのために、このメッセージのみが表示されるはずです (他のログメッセージは表示されません)。
複数のパターンを使用した高度なフィルタリング
OR 演算子 (|) を使用して、複数のパターンを検索することもできます。
sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"
-E オプションは拡張正規表現を有効にし、OR 演算子の使用を可能にします。このコマンドは、"error"、"warning"、または "critical" のいずれかの単語を含む行を表示します。
'awk' を使用した特定の情報の抽出
より高度なフィルタリングとフォーマットには、awk コマンドを使用できます。たとえば、syslog から時間とメッセージのみを抽出するには、次のようにします。
sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'
これにより、各ログエントリから特定のフィールドが抽出され、最も関連性の高い情報に焦点を当てやすくなります。
これらのフィルタリング技術を習得することで、大きなログファイルを効率的に分析し、トラブルシューティングと監視に必要な情報を正確に抽出できます。