share facebook facebook2 twitter menu hatena pocket slack

2015.08.27 THU

Nagiosメモ – シンプルなログ監視

橋本 満

WRITTEN BY橋本 満

d56dddc8-b276-4058-cb5d-7d018cad1e63

はじめに

  • 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」格納

f96dd902-4000-d14c-92c1-98181f41b927

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より、エラーキーワードを検知したことを確認しております

b89132ad-71ef-fc5f-7903-25e23171aadd

まとめ

  • 今回紹介した設定にて、シンプルかつ簡単にログ監視が出来るようになったかと思います。
    以上になります。

元記事はこちら

Nagiosメモ – シンプルなログ監視

橋本 満

橋本 満

後輩、歳下、業務内容の違いなど関係なく、見習うべきところは見習う貪欲系エンジニア。技術志向だけの理系脳ではなく、顧客とのコミュニケーションを大事にすることも心掛けています。あと、ON/OFF(Dancin')大事にしています。