はじめに
- 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-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より、エラーキーワードを検知したことを確認しております
まとめ
- 今回紹介した設定にて、シンプルかつ簡単にログ監視が出来るようになったかと思います。
以上になります。