Linuxログ監視(リアルタイムに表示する。)とTeratermマクロを使ってアラートを鳴らすTips
アクセスログやMessagesなどのログを監視する場合、必要に応じて「tail」コマンドや「less + [F]」を使い分けてください。
末尾にはログ監視で特定の文字列が出現した場合音で知らせてくれる手法も記載しています。
tailコマンド
tailコマンドはファイルの末尾を表示させるコマンドで「-f」オプションを付けてファイル名を指定することでファイルが増加すると追加されたデータを出力する性質によりログファイルの監視ができます。
manページ直訳
各FILEの最後の10行を標準出力に出力します。 複数のFILEがある場合は、それぞれにファイル名を示すヘッダーを付けてください。 FILEがない場合、またはFILEが – の場合、標準入力を読み取ります。
実行開始:
$ tail -f ファイルパス
停止:「Ctrl + [c]」キーを押下することにより停止できます。
このコマンドでは複数ファイルも同時に監視することができます。
1画面上ではありますがtailコマンドであれば複数のログファイルを同時に監視することもできます。
$ tail -f access.log0001 access.log0000
複数指定した場合、画面出力の際
==> access.log0000 <==
==> access.log0001 <==
といった出力ファイルパスの見出しがつきます。
必要な文字列を含む行だけを画面出力させる
$ tail -f access.log0001 | grep 'error'
「|grep '出力させたい文字列’」と続けることでその文字列、例でいうと「error」を含む行だけが画面表示されます。
特定の文字列を含む行を”省いた”画面を表示する
$ tail -f access.log0001 | grep -v 'allow'
「|grep '省きたい文字列’」と続けることでその文字列、例でいうと「allow」を含む行が省かれて表示されます。
例ではこのaccess.log0001の各行に「error」か「allow」が必ず含まれている場合には出力結果は同一になります。しかし、そのようなことはまずありませんので自身でどういう出力が欲しいかを考慮してコマンドを選択してください。
これに限らず、|(パイプ)や>(リダイレクト)を利用してあとに続けるコマンドを変えることで画面出力される行や文字列を柔軟に操作することができます。
less コマンド
lessコマンドで「tail -f」と同様にログファイルの監視をする。
$ less access.log0001
でファイルを表示させた後、[F](大文字)キーを押下します。
画面の下部に「Waiting for data… (interrupt to abort)」と表示されればファイルの更新を読み込むモードに変わります。
停止は「Ctrl + [c]」キーを押下することで通常のlessのモードに戻ります。
このコマンドの利点はファイルを開きなおすことなく前の行に戻ったり、文字列を検索することができます。
lessも完全に終了させるには通用モードで「:q」を入力します。
※less + F には「tail -f ファイル名 | grep」のように必要な行だけ表示させるような機能はありません。
特定の文字列をハイライト表示させる
流れるように画面表示される中で見落としたくない文字列を強調表示させるには「less -p」オプションが利用できます。
$ less -p 'error' access.log0000
でファイルを表示させた後、[F](大文字)キーを押下します。
画面の下部に「Waiting for data… (interrupt to abort)」と表示されればファイルの更新を読み込むモードに変わっています。
ログ監視で音を鳴らす(TeraTermマクロ)
ログの表示画面に特定の文字列が表示されたら効果音を鳴らす。
先ほどの「tail -f ファイル名 | grep 'error’」や「less -p」とは全く異なる観点で監視しているログに指定した文字列が表示された場合、音を鳴らすことも見落としを防ぐという意味合いもあってよくやります。
TeraTermを利用している環境であればTeraTermマクロを利用すれば下記の例のように「error」という文字列が出現した場合サウンドを鳴らせます。
①TeraTermマクロを「Log monitoring_sound.ttl」として作成します。
:label
waitln 'error'
exec '"C:\Program Files (x86)\Windows Media Player\wmplayer.exe" "C:\Program Files (x86)\Microsoft Office\Office14\MEDIA\EXPLODE.WAV"' "hide"
goto label
このマクロは例として最小限しか作りこんでおりません。これだけでも動きますが要件に合わせた適切な処理を組み込んでください。
これは度に大量に指定の文字列を含む行が表示された場合、その一つ一つには音が出ませんのでご了承ください。
②TeraTerm画面の上部メニューから[コントロール]-[マクロ]とメニューをたどります。
③「マクロを開く」画面で先ほど作成した「Log monitoring_sound.ttl」を選択します。
これで表示しているログに「error」という文字列が出現した場合音が鳴るようになります。
停止する場合
音を鳴らす仕組みを止める方法
①TeraTerm画面の上部メニューから[コントロール]-[マクロウィンドウの表示]とメニューをたどりMacroウィンドウを起動します。
②[中断][終了]とボタンがありますのであとで復帰する場合は[中断]。マクロを停止する場合は[終了]を押下します。
「multitail」というコマンドもありますが「エンタープライズ Linux 用の拡張パッケージ(EPEL)」からインストールしなければならないので商用サーバでは使えないかな?