はじめに
nagiosのログ監視の設定は、以下のQiitaの投稿がとても参考になりました。
有難うございました。今回、以下のサイトの手順通りにログ監視設定を試しました。
https://qiita.com/mitzi2funk/items/cedb106a8fba23796960
dockerの構築は、infracollegeでご教示いただきました。
https://infracollege.vamdemicsystem.black/membership-login/
前提条件
VirtualBoxでnagiosサーバとnagios ClientはCentOS7で構築してます。
nagiosはdockerで構築しました。
nagiosサーバーの構築
ネットワーク関連のコマンドとコマンド補完等の便利なツールをインストールしました。
# yum -y install vim bash-completion net-tools bind-utils
yumのユーティリティパッケージがインストール
# yum -y install yum-utils
Dockerリポジトリを登録
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
Dockerをインストールする
# yum install docker-ce
Dockerを自動起動設定する
# systemctl enable docker
dockerでnagiosのイメージから、nagiosコンテナを起動する
コンテナ名「nagios4」 ローカルIP 0.0.0.0 ローカルポート8888 コンテナのポート番号 80
イメージ名「jasonrivers/nagios:latest」
# docker run -d --name nagios4 -p 0.0.0.0:8888:80 jasonrivers/nagios:latest
nagios clientの構築とログ監視設定
以下の記事で対応しました
https://qiita.com/mitzi2funk/items/cedb106a8fba23796960
拡張リポジトリのインストール
# yum -y install epel-release
nagiosプラグインとnrpeをインストール
# yum --enablerepo=epel -y install nagios-plugins-ntp
# yum --enablerepo=epel install nagios-plugins-nrpe nrpe
ログ監視のスクリプトをダウンロードする
「check_log3.pl」を以下のURLからダウンロードした。
https://exchange.nagios.org/directory/Plugins/Log-Files/check_log3-2Epl/details
ダウンロードした「check_log3.pl」をWinSCPで利用して、nagios clientにアップロードしました。
check_log3を別のフォルダへ移動させた
# mv /root/check_log3.pl /usr/lib64/nagios/plugins/check_log3
check_log3の権限を変更した
# chmod 755 /usr/lib64/nagios/plugins/check_log3
コマンドの動作確認でhelpページを表示したら、perlのエラーメッセージが出た
# /usr/lib64/nagios/plugins/check_log3 --help
-bash: /usr/lib64/nagios/plugins/check_log3: /usr/bin/perl: bad interpreter: No such file or directory
perlをインストールした
# yum install perl
コマンドの動作確認でhelpページを表示させました
# /usr/lib64/nagios/plugins/check_log3 --help
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "C.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
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 496.
BEGIN failed--compilation aborted at /usr/lib64/nagios/plugins/check_log3 line 496.
[root@localhost plugins]#
nagiosのプラグインをインストール
# yum install nagios-plugins-all
コマンドの動作確認でhelpページを表示出来ました
# /usr/lib64/nagios/plugins/check_log3 --help
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "C.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
This is check_log3 version 3.16.1
Usage: check_log3 [ -v | --version ]
Usage: check_log3 [ -h | --help ]
Usage: check_log3 --manual
Usage: check_log3 --list-encodings
Usage: check_log3 -l log_file|log_directory (-p pattern [-p pattern ...])|-P patternfile)
[-i] [-n negpattern|-f negpatternfile ] [-s seek_file|seek_base_dir] [--show-filename]
([-m glob-pattern] [-t most_recent|first_match|last_match] [--timestamp=time-spec] [-S string])
[-d] [-D] [-a] [-C {-|+}n] [-q] [--ultraq] [-Q] ([-e '{ eval block }'|-E script_file]|--secure)
([-N|--report-max=N]|[--report-only=N])|([-1|--stop-first-match]|[--report-first-match])
[--ok]|([-w warn_count] [-c crit_count] [--negate])
[--input-enc=encoding] [--output-enc=encoding] [--crlf]
[--missing=STATE [--missing-msg=message]]
[-R|--restartcommand] [-M|--returnmessage]
nrpe.cfgのバックアップを取得した
# cp -p /etc/nagios/nrpe.cfg /etc/nagios/nrpe.cfgbk
nrpe.cfgを設定変更しました
# vi /etc/nagios/nrpe.cfg
以下を設定
#dont_blame_nrpe=0 ※コメントアウト
dont_blame_nrpe=1 ※nrpeが引数を受け付けるように1に設定した
#allowed_hosts=127.0.0.1,192.168.40.118,::1 ※コメントアウト
check_log3コマンドを追加した
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
以下のサイトも参考にしました。
https://think-t.hatenablog.com/entry/20111231/p1
修正後の設定ファイルとデフォルトの設定ファイルの差分を取得した
※nrpe.cfgがあることを確認した
# ls -tlr /etc/nagios/nrpe*
-rw-r--r--. 1 root root 12835 Mar 12 2021 /etc/nagios/nrpe.cfgbk
-rw-r--r--. 1 root root 13077 Oct 23 23:23 /etc/nagios/nrpe.cfg
※差分を取得した
# cd /etc/nagios/
# diff nrpe.cfg nrpe.cfgbk
106c106
< #allowed_hosts=127.0.0.1,192.168.40.118,::1
---
> allowed_hosts=127.0.0.1,::1
122,123c122
< #dont_blame_nrpe=0
< dont_blame_nrpe=1
---
> dont_blame_nrpe=0
349,351d347
<
< 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
[root@localhost nagios]#
nrpeサービスを起動する
# systemctl start nrpe
# systemctl status nrpe
#nrpeの自動起動設定
systemctl enable nrpe
ファイヤーウォールを起動し、自動起動する設定にした
# systemctl start firewalld
# systemctl enable firewalld
ファイヤーウォール nagios通信用のポートを許可した
# firewall-cmd --add-port=5666/tcp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 5666/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
SElinuxを無効化した
# getenforce
Enforcing
# setenforce permissive
ログ監視対象のログファイルを中身が空ですが作成した
# touch /var/log/test.log
# ls -tlr /var/log/test.log
-rw-r--r--. 1 root root 5 Oct 24 00:13 /var/log/test.log
seekファイルを作成した
※seekファイルは何行ログを走査したか分かるファイルです。
# mkdir /etc/nagios/seek
# echo 0 > /etc/nagios/seek/test.seek
読み取りと書き込みの権限を付けた
# chmod 666 /etc/nagios/seek/*.seek
crontabに設定した
# crontab -e
1 0 * * * /bin/echo "0" > /etc/nagios/seek/test.seek >/dev/null 2>&1
検知するキーワードを設定した
# mkdir /etc/nagios/keyword
# echo 'WARN|CRIT|ERROR|FAIL|error' > /etc/nagios/keyword/test-keyword
除外キーワードを設定した
# vi /etc/nagios/seek/test.exclude
log_default_
shadowWarning
/warning
権限を変更した
# chmod 644 /etc/nagios/seek/*.exclude
ログにerrorの文字列を設定にした
Seekファイルを0に設定した
# echo "error" >> /var/log/test.log
# echo 0 > /etc/nagios/seek/test.seek
nagios経由でnagios clientにログ監視の動作を確認した
nagiosサーバー側でコマンドを実行した
コンテナ名を確認する
# docker ps
何も表示されない場合は、コンテナが停止しています。
コンテナを起動した
# docker start nagios4 ※nagios4はコンテナ名です。
コンテナが起動されたことを確認する
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb470a7a23a7 jasonrivers/nagios:latest "/usr/local/bin/star…" 26 hours ago Up 11 seconds 5667/tcp, 0.0.0.0:8888->80/tcp nagios4
コンテナ(nagios)の中に入る
# docker exec -it <コンテナ名> /bin/bash
プロンプトの表示がCONTAINER IDの表示になる。
# docker exec -it nagios4 /bin/bash
root@4088b7eebb06:/#
nagios client側のログファイルに「TEST」という文字列を設定する
※nagios client
# cat /var/log/test.log
TEST
nagiosサーバーでコマンド実行
nagiosサーバー経由で、nagiosクライアント「192.168.40.119」でcheck_log3を実行したところ、OKと出力された
#/opt/nagios/libexec/check_nrpe -H 192.168.40.119 -c check_log3 -a /var/log/test.log /etc/nagios/seek/test.seek /etc/nagios/keyword/test-keyword /etc/nagios/seek/test.exclude 1
OK: Found 0 lines (limit=1/1): No matches found.|lines=0
再度コマンドを実行する場合は、nagios clientにあるseekファイルを0に設定する必要がある
※ログを一行づつ走査するため、最初の行からチェックするため、0にする必要があります。
# vi /etc/nagios/seek/test.seek
0
nagios clientの以下のログファイルに「error」という文字列を入れる。
# cat /var/log/test.log
ERROR
nagiosサーバーでコマンド実行
※192.168.40.119のnagiosクライアントIPアドレスは例です。検証する環境によっては、IPアドレスは異なります。
nagiosサーバー経由で、nagiosクライアント「192.168.40.119」でcheck_log3を実行したところ、CRITICALと出力された
/opt/nagios/libexec/check_nrpe -H 192.168.40.119 -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
check_log3 を実行するとエラーが出る場合の切り分けの仕方
以下はエラーの例です。※nagiosクライアント「192.168.40.119」
/usr/lib64/nagios/plugins/check_nrpe -H 192.168.40.119 -c check_log3 -a /var/log/test.log /etc/nagios/seek/test.seek /etc/nagios/keyword/test-keyword /etc/nagios/seek/test.exclude 1
NRPE: Unable to read output
nagios経由でnagiosクライアント「192.168.40.119」に対して、5666のポート接続できるかの確認をしました。
nc -vz 192.168.40.119 5666
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to... [::]:* LISTEN
エラーの切り分けのため、nagiosサーバーでcheck_nrpeの動作してるか確認しました。
以下の様にバージョンが表示されたら、check_nrpeが動作しています。
# opt/nagios/libexec/check_nrpe -H 192.168.40.119 ※nagiosクライアント「192.168.40.119」
NRPE v4.0.3
次に、check_usersの動作するかどうか試してみました。
以下の場合は、OKと表示されているため、正常に動作しています。
# opt/nagios/libexec/check_nrpe -H 192.168.40.119 -c check_users
USERS OK - 2 users currently logged in |users=2;5;10;0
上記のcheck_usersコマンドが正常に動作したら、エラーの原因はcheck_nrpeにあるのではなく、
「check_log3」の設定にあると思います。
結局、原因が分からずに、nagiosサーバーを作り直して本投稿のdockerのnagiosサーバーを構築したら上手くいきました。
まとめ
ログ監視は一行づつログを、検知するキーワードが含まれるかチェックしています。そのため、各行は一回チェックしたら、次の行に進むため、
ログ監視が、仮に一行目にerror文字を一文字検知した場合は、CRITICALのメッセージは一回だけ出力されて、次の行のチェックに進みます。
ログ監視は、seekファイルにチェックしている現在のログの行が出力されます。最初の行からログをチェックし直す場合は、seekファイルに0を入れました。
また、ログ監視を使用するため、検知したくないキーワードと検知したいキーワードを設定します。
今回、nagiosのログ監視の設定が上手くいかずに苦労しました。
この記事が参考になれば幸いです。