2012年9月7日金曜日

Nagiosのログ監視で複数の除外キーワードや正規表現を使う(check_log3.pl)

スズキです。

ログの監視をしていると、最初は一つのキーワードでマッチングさせるだけで
十分だったものが、だんだんと正規表現が使いたくなったり、
除外キーワードが設定できるようになったり、そして、その除外キーワードも
複数指定したくなったりと、エスカレートしていきます。

ということで、上記が指定可能なNagiosプラグインを探してみました。
Nagios Exchange - check_log3.pl
まずは下記のようにダウンロードです。
# cd /usr/lib64/nagios/plugins/
# curl -L http://downloads.sourceforge.net/project/pma-oss/nagios-plugins/check_log3.pl > check_log3.pl.tmp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14454  100 14454    0     0  18877      0 --:--:-- --:--:-- --:--:-- 18877
ただし、そのまま実行すると次のエラーが発生してしまいます。
-bash: ./check_log3.pl: /usr/bin/perl^M: bad interpreter: そのようなファイルやディレクトリはありません
これは改行コードがWindowsのもの(CR+LF)になっているのが原因なので
下記のように"¥r"を削除し、Unixのもの(LF)に変換します。
# tr -d "\r" < ./check_log3.pl.tmp > check_log3.pl 
そして実行権限をつけることで利用できるようになります。
# chmod 755 check_log3.pl
# rm -f check_log3.pl.tmp 
ヘルプはこんな感じです。
# ./check_log3.pl -h
check_log3.pl v3.0 (nagios-plugins 1.4.15)
The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute
copies of the plugins under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

This plugin scans arbitrary log files for regular expression matches.

Usage: check_log3.pl [ -h | --help ]
Usage: check_log3.pl [ -v | --version ]
Usage: check_log3.pl -l log_file -s seek_file -p pattern [-i] [-d] [-w warn_count] [-c crit_count] [-n negpattern | -f negpatternfile] [-e '{ eval block}' | -E filename]

-l, --logfile=<logfile>
    The log file to be scanned
-s, --seekfile=<seekfile>
    The temporary file to store the seek position of the last scan
-p, --pattern=<pattern>
    The regular expression to scan for in the log file
-i, --case-insensitive
    Do a case insensitive scan
-n, --negpattern=<negpattern>
    The regular expression to skip in the log file
-f, --negpatternfile=<negpatternfile>
    Specifies a file with regular expressions which all will be skipped
-w, --warning=<number>
    Return WARNING if at least this many matches found.  The default is 1.
-c, --critical=<number>
    Return CRITICAL if at least this many matches found.  The default is 0,
    i.e. don't return critical alerts unless specified explicitly.
-d, --nodiff-warn
    Return WARNING if the log file was not written to since the last scan
-D, --nodiff-crit
    Return CRITICAL if the log was not written to since the last scan
-e, --parse
-E, --parse-file
    Perl 'eval' block to parse each matched line with (EXPERIMENTAL).  The code
    should be in curly brackets and quoted.  If the return code of the block is
    non-zero, the line is counted against the threshold; otherwise it isn't.

Send email to nagios-users@lists.sourceforge.net if you have questions
regarding use of this software. To submit patches or suggest improvements,
send email to nagiosplug-devel@lists.sourceforge.net.
Please include version information with all correspondence (when possible,
use output from the --version option of the plugin itself).

それでは実際に利用してみます。

まずはログ中の"a"という文字を監視です。
# ./check_log3.pl -l /var/log/messages -s /var/log/messages.seek -p a
WARNING: Found 374 lines (limit=1/0): Sep  6 23:56:42 ip-10-0-0-63 dhclient[661]: bound to 10.0.0.63 -- renewal in 1594 seconds.
次は下記の除外キーワードファイルを作成し、
# cat test.exclude
b
"b"という文字が無い行の"a"という文字を監視です。
# rm -f /var/log/messages.seek 
# ./check_log3.pl -l /var/log/messages -s /var/log/messages.seek -p a -f ./test.exclude 
WARNING: Found 83 lines (limit=1/0): Sep  6 17:54:08 ip-10-0-0-63 ntpd[763]: synchronized to 184.22.183.134, stratum 2
さらに下記のように除外キーワードを複数行にすることで、
# cat test.exclude
b
c
複数の除外キーワード("b"と"c")のどちらも無い行の"a"という文字を監視することができます。
# rm -f /var/log/messages.seek 
# ./check_log3.pl -l /var/log/messages -s /var/log/messages.seek -p a -f ./test.exclude 
WARNING: Found 54 lines (limit=1/0): Sep  6 14:17:42 ip-10-0-0-63 yum[1565]: Installed: nagios-plugins-all-1.4.15-7.el6.x86_64

これ以上は自作かな?
--------
http://www.suz-lab.com/

0 コメント: