◎はじめに
・Nagiosのログ監視に関しまして、ちょっとしたノウハウになります。
■検証環境
[root@mitzi_develop ~]# cat /etc/issue
Amazon Linux AMI release 2014.09
[root@mitzi_develop ~]# uname -r
3.14.33-26.47.amzn1.x86_64
■検証に必要なもの
▽監視対象クライアントへ下記実装
・NRPE
・Nagios Plugin 「check_log3」
▽監視対象
・Nagios Server ←コチラは別途用意してあることを前提として進めます。
◎導入 (監視対象クライアント)
■NRPE と 最低限必要なpluginをインストール
・監視対象のクライアントへ以下インストール
[root@mitzi_develop ~]# yum install nagios-plugins-nrpe nrpe
===================================================================================
Package Arch Version Repository Size
===================================================================================
Installing:
nagios-plugins-nrpe x86_64 2.15-2.7.amzn1 amzn-main 25 k
nrpe x86_64 2.15-2.7.amzn1 amzn-main 229 k
Installing for dependencies:
nagios-common x86_64 3.5.1-1.8.amzn1 amzn-main 18 k
nagios-plugins x86_64 1.4.16-5.8.amzn1 amzn-main 233 k
Transaction Summary
===================================================================================
Install 2 Package (+2 Dependent packages)
[root@mitzi_develop ~]# ls -l /usr/lib64/nagios/plugins/
total 104
-rwxr-xr-x 1 root root 20488 Jun 26 2014 check_nrpe
-rwxr-xr-x 1 root root 38024 Sep 24 2013 negate
-rwxr-xr-x 1 root root 36136 Sep 24 2013 urlize
-rwxr-xr-x 1 root root 2728 Sep 24 2013 utils.sh
■Nagios Plugin 「check_log3」格納
https://exchange.nagios.org/directory/Plugins/Log-Files/check_log3-2Epl/details
・Filesより、「check_log3.pl」をダウンロード
・WinSCPなどを利用してサーバにアップロード
[root@mitzi_develop ~]# mv /home/ec2-user/check_log3.pl /usr/lib64/nagios/plugins/check_log3
[root@mitzi_develop ~]# chmod 755 /usr/lib64/nagios/plugins/check_log3
※他pluginに合わせて拡張子を外しています
◎plugin動作確認01
■エラー出ます
[root@mitzi_develop ~]# /usr/lib64/nagios/plugins/check_log3 --help
Can't locate utils.pm in @INC (@INC contains: /usr/local/nagios/libexec /usr/local/libexec/nagios /usr/lib64/nagios/plugins /usr/lib/nagios/plugins /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/lib64/nagios/plugins/check_log3 line 355.
BEGIN failed--compilation aborted at /usr/lib64/nagios/plugins/check_log3 line 355.
↓上記エラーが出たら、plugin動作に必要なパッケージ群をインストール
[root@mitzi_develop ~]# yum install nagios-plugins-all
===================================================================================
Package Arch Version Repository Size
===================================================================================
Installing:
nagios-plugins-all x86_64 1.4.16-5.8.amzn1 amzn-main 13 k
Installing for dependencies:
libtirpc x86_64 0.2.4-0.3.13.amzn1 amzn-main 89 k
(省略)
◎plugin動作確認02
■check_log3が正常に動くことを確認
[root@mitzi_develop ~]# /usr/lib64/nagios/plugins/check_log3 --help
This is check_log3 version 3.11b
Usage: check_log3 [ -h | --help ]
Usage: check_log3 [ -v | --version ]
Usage: check_log3 [ -v | --list-encodings ]
Usage: check_log3 -l log_file | log_directory [ -s seek_file | seek_base_dir ]
( [ -m glob-pattern ] [ -t most_recent|first_match|last_match ] [ --timestamp=time-spec ] )
-p pattern [ -p pattern ... ] | -P patternfile [ -n negpattern | -f negpatternfile ]
[ --input-enc=encoding ] [ --output-enc=encoding ] [ --crlf ]
[ --missing=STATE [ --missing-msg=message ] ]
[ --ok ] | ( [ -w warn_count ] [ -c crit_count ] [ --negate ] )
[ -i ] [-d | -D ] [ -1 ] [ -a ] [ -C [-|+]n ] [ -q ] [ -Q ]
[ -e '{ eval block }' | -E script_file ]
(省略)
◎ログ監視設定01
■NRPEの設定
[root@mitzi_develop ~]# cp -p /etc/nagios/nrpe.cfg /etc/nagios/nrpe.cfg.org
[root@mitzi_develop ~]# vi /etc/nagios/nrpe.cfg
-----
#allowed_hosts=127.0.0.1 ←コメントアウト
#dont_blame_nrpe=0
dont_blame_nrpe=1 ←有効化
command[check_log3]=/usr/lib64/nagios/plugins/check_log3 -l $ARG1$ -s $ARG2$ -P $ARG3$ -f $ARG4$ -c $ARG5$ -i ←追記
command[check_log3w]=/usr/lib64/nagios/plugins/check_log3 -l $ARG1$ -s $ARG2$ -P $ARG3$ -f $ARG4$ -w $ARG5$ -i ←追記
■補足
・check_log3は様々なオプションが用意されていますが、シンプルかつ使い勝手のよい上記設定をご紹介します。
・今回特に紹介したいのは下記オプション
-P: パターンファイルを参照する
-i: チェック文字列の大文字小文字を区別しない
・その他オプション
-l: 監視対象ログファイル
-s: seekファイル
-f: 除外キーワードファイル
-c: critical扱いとする
-w: warning扱いとする
■NRPE起動
[root@mitzi_develop ~]# service nrpe start
[root@mitzi_develop ~]# chkconfig nrpe on
■ポート開放
下記ポートにNagios Serverがアクセス出来るよう設定
・icmp(全ポート)
・NRPE(5666番ポート)
◎ログ監視設定02
■監視に必要なファイルの用意、設定
・NRPEに設定した上記コマンド。それらへの引数となるファイルを用意する。
※下記はいずれも一例になります。
①ログファイル
・NRPEが読み取れるよう読み取り権限を付与する。
# chmod 644 /var/log/test.log
※基本的にはchmodではなく、ログ出力やログローテートなどにて権限を付与するよう設定する。
②seekファイルの配置
・check_log3 がどこまでログを走査したかを記録するファイル
# mkdir /etc/nagios/seek
# echo 0 > /etc/nagios/seek/test.seek
・読み書き権限付与
# chmod 666 /etc/nagios/seek/*.seek
・seekファイルを1日一回クリアするcronを設定する
(ログローテートのタイミングに合わせて下さい)
# crontab -e
---
1 0 * * * /bin/echo "0" > /etc/nagios/seek/test.seek >/dev/null 2>&1
・確認
# crontab -l
③キーワードファイルの配置
# mkdir /etc/nagios/keyword
# echo 'WARN|CRIT|ERROR|FAIL|mitzi error' > /etc/nagios/keyword/test-keyword
※パイプで繋ぐことで複数のキーワードを指定出来る ←ポイント(★1 後述します)
④除外キーワードファイル設定
# vi /etc/nagios/seek/test.exclude
---
log_default_
shadowWarning
/warning
WARN:\{"returnUrlResult":\{\}\,"data":\{"status":"ERROR"\,"temperature":
※上記のように除外キーワードを改行で追記してゆく
※除外キーワードファイルの拡張子およびファイル名はなんでも構いません
・パーミッション変更
# chmod 644 /etc/nagios/seek/*.exclude
◎ログ監視設定の補足
■エスケープ対象文字
. ドット
, カンマ
{} カッコ
[] カッコ
# イゲタ
スペース
★1) 我々のところでは、Nagios ServerからNRPE経由でcheck_log3を叩きログ監視を行っていました。その際、NagiosよりキーワードファイルをNRPEに渡していたのですが、上記文言がキーワードに含まれていると、うまく受け渡すことが出来ず、正常に監視が出来ませんでした。
・NRPE側の設定にキーワードを直接埋め込むことで暫定対処としていた時もありました↓
command[check_log3_plus_w]=/usr/lib64/nagios/plugins/check_log3 $ARG1$ -w 1 -p "warning keyword"
command[check_log3_plus_c]=/usr/lib64/nagios/plugins/check_log3 $ARG1$ -c 1 -p "critical keyword"
本問題、前述のキーワードファイルを指定する方法にて改善することが出来ました。
またこの方法により、Nagios側でキーワードファイル毎に監視設定をつくることもなくなり、ログ監視が楽になりました。
◎動作確認
■00. 確認前にエラーキーワードをログへ埋め込んでおく
[root@mitzi_develop ~]# echo "mitzi error" >> /var/log/test.log
[root@mitzi_develop ~]# echo 0 > /etc/nagios/seek/test.seek
■01. Nagiosから直コマンドで確認
# /usr/lib64/nagios/plugins/check_nrpe -H <EIP> -c check_log3 -a /var/log/test.log /etc/nagios/seek/test.seek /etc/nagios/keyword/test-keyword /etc/nagios/seek/test.exclude 1
CRITICAL: Found 1 lines (limit=1/1): mitzi error|lines=1 ←エラー文言を検知出来ました。
■02. Nagios設定より確認
・host監視部のみ抜粋
# vi mitzi_develop.cfg
-------
define service {
use mitzi-service
host_name mitzi_develop-ec2
service_description LOG [test]
service_groups log
max_check_attempts 1
normal_check_interval 1
notification_options c
check_command check-nrpe-cloudpack!check_log3!/var/log/test.log /etc/nagios/seek/test.seek /etc/nagios/keyword/test-keyword /etc/nagios/seek/test.exclude 1 (※)
contacts mitzi
}
(※) NRPE経由でcheck_log3へ渡す引数($ARG*$)を指定しています。
# nagios -v /etc/nagios/nagios.cfg
# service nagios restart
・アラート検知
Nagios GUIより、エラーキーワードを検知したことを確認しております
まとめ
・今回紹介した設定にて、シンプルかつ簡単にログ監視が出来るようになったかと思います。
以上になります。