1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nagiosログ監視の設定をしてみた

Last updated at Posted at 2022-10-23

はじめに

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
image.png

ダウンロードした「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のログ監視の設定が上手くいかずに苦労しました。
この記事が参考になれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?