ログの監視をする際に、最初は一つのキーワードでマッチングさせるだけで十分だったものが、徐々に正規表現が必要になったり、除外キーワードが設定できるようになったりと変化していきます。
そして、その除外キーワードも複数指定する必要が出てきたりします。

そこで、上記が指定可能な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

ただし、そのまま実行すると下記のようなエラーが発生してしまいます。

1.-bash: ./check_log3.pl: /usr/bin/perl^M: bad interpreter: そのようなファイルやディレクトリはありません

これは改行コードがWindowsのもの(CR+LF)になっているのが原因なので、下記のように¥rを削除しUnixのもの(LF)に変換します。

# tr -d "¥r"  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=
The log file to be scanned
-s, --seekfile=
The temporary file to store the seek position of the last scan
-p, --pattern=
The regular expression to scan for in the log file
-i, --case-insensitive
Do a case insensitive scan
-n, --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=
Return WARNING if at least this many matches found.  The default is 1.
-c, --critical=
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.

次は下記の除外キーワードファイルを作成し、bという文字が無い行のaという文字を監視します。

# cat test.exclude
b
# 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

さらに下記のように、除外キーワードを複数行にすることで、複数の除外キーワード(bとc)のどちらも無い行のaという文字を監視することができます。

# cat test.exclude
b
c
# 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

これ以上は自作になるかと思います。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら