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

　　　　　![imgres.jpg](https://qiita-image-store.s3.amazonaws.com/0/50310/d56dddc8-b276-4058-cb5d-7d018cad1e63.jpeg)
# ◎はじめに
・Nagiosのログ監視に関しまして、ちょっとしたノウハウになります。

## ■検証環境
```bash
[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をインストール

・監視対象のクライアントへ以下インストール

```bash
[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)
```
```bash
[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」格納
　　　　![Nagios.png](https://qiita-image-store.s3.amazonaws.com/0/50310/f96dd902-4000-d14c-92c1-98181f41b927.png)

https://exchange.nagios.org/directory/Plugins/Log-Files/check_log3-2Epl/details
・Filesより、「check_log3.pl」をダウンロード
・WinSCPなどを利用してサーバにアップロード

```bash
[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
## ■エラー出ます
```bash
[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動作に必要なパッケージ群をインストール

```bash
[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が正常に動くことを確認
```bash
[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の設定
```bash
[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は様々なオプションが用意されていますが、シンプルかつ使い勝手のよい上記設定をご紹介します。

・今回特に紹介したいのは下記オプション

```text
-P: パターンファイルを参照する
-i: チェック文字列の大文字小文字を区別しない
```

・その他オプション

```text
-l: 監視対象ログファイル
-s: seekファイル
-f: 除外キーワードファイル
-c: critical扱いとする
-w: warning扱いとする
```

## ■NRPE起動
```bash
[root@mitzi_develop ~]# service nrpe start
[root@mitzi_develop ~]# chkconfig nrpe on
```

## ■ポート開放
下記ポートにNagios Serverがアクセス出来るよう設定

```text
・icmp(全ポート)
・NRPE(5666番ポート)
```

# ◎ログ監視設定02
## ■監視に必要なファイルの用意、設定
・NRPEに設定した上記コマンド。それらへの引数となるファイルを用意する。
※下記はいずれも一例になります。

## ①ログファイル
・NRPEが読み取れるよう読み取り権限を付与する。

```bash
# chmod 644 /var/log/test.log
※基本的にはchmodではなく、ログ出力やログローテートなどにて権限を付与するよう設定する。
```

## ②seekファイルの配置
・check_log3 がどこまでログを走査したかを記録するファイル

```bash
# mkdir /etc/nagios/seek
# echo 0 > /etc/nagios/seek/test.seek
```

・読み書き権限付与

```bash
# chmod 666 /etc/nagios/seek/*.seek
```

・seekファイルを1日一回クリアするcronを設定する
(ログローテートのタイミングに合わせて下さい)

```bash
# crontab -e
---
1 0 * * * /bin/echo "0" > /etc/nagios/seek/test.seek >/dev/null 2>&1
```

・確認

```bash
# crontab -l
```

## ③キーワードファイルの配置
```bash
# mkdir /etc/nagios/keyword
# echo 'WARN|CRIT|ERROR|FAIL|mitzi error' > /etc/nagios/keyword/test-keyword
※パイプで繋ぐことで複数のキーワードを指定出来る　←ポイント(★1 後述します)
```

## ④除外キーワードファイル設定
```bash
# vi /etc/nagios/seek/test.exclude
---
log_default_
shadowWarning
/warning
WARN:\{"returnUrlResult":\{\}\,"data":\{"status":"ERROR"\,"temperature":
```

※上記のように除外キーワードを改行で追記してゆく
※除外キーワードファイルの拡張子およびファイル名はなんでも構いません

・パーミッション変更

```bash
# chmod 644 /etc/nagios/seek/*.exclude
```

# ◎ログ監視設定の補足
■エスケープ対象文字

```text
.  ドット
,  カンマ
{} カッコ
[] カッコ
#  イゲタ
   スペース
```

★1) 我々のところでは、Nagios ServerからNRPE経由でcheck_log3を叩きログ監視を行っていました。その際、NagiosよりキーワードファイルをNRPEに渡していたのですが、上記文言がキーワードに含まれていると、うまく受け渡すことが出来ず、正常に監視が出来ませんでした。

・NRPE側の設定にキーワードを直接埋め込むことで暫定対処としていた時もありました↓

```bash
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. 確認前にエラーキーワードをログへ埋め込んでおく
```bash
[root@mitzi_develop ~]# echo "mitzi error" >> /var/log/test.log
[root@mitzi_develop ~]# echo 0 > /etc/nagios/seek/test.seek
```

## ■01. Nagiosから直コマンドで確認
```bash
# /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監視部のみ抜粋

```bash
# 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*$)を指定しています。
```

```bash
# nagios -v /etc/nagios/nagios.cfg
# service nagios restart
```

・アラート検知
Nagios GUIより、エラーキーワードを検知したことを確認しております
![20150714_blog_Nagiosメモ-ログ監視01.png](https://qiita-image-store.s3.amazonaws.com/0/50310/b89132ad-71ef-fc5f-7903-25e23171aadd.png)


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


以上になります。