nagiosのインストールと最小限の設定

2018年9月30日

nagiosについての全投稿は/tag/nagiosにあるので参照されたい。

サーバの監視を行い、異常があればメールで通知すると共に管理画面にて異常の状態を確認することができる。 仕組みとしては単純で、以下のようなもの。

  • nagiosのデーモンがサービスとして常に動作する。
  • 設定ファイルにて指示された、複数のコマンドを定期的に実行する。
  • コマンドの戻り値が0の場合は正常、それ以外は警告(1)や致命的(2)と判断し、その状況が起こったら管理者にメール通知する。
  • 状態はnagiosのウェブサービスによって確認できる。

インストール

CentOS 6.9にrpmでインストールする。

  • epelレポジトリを追加。
  • yum install nagiosでインストール

インストールされるのは、

  • nagios 4.3.4-7
  • gd 2.0.35-11
  • nagios-common 4.3.4-7

になる。

プラグインの種類は以下で確認

yum list | grep nagios

※上記でインストールしたnagiosのデフォルトの設定ファイルには、プラグインのインストールを前提としたものがあるらしい。したがって、この状態で早速nagiosを動作させると、監視対象が「CRITICAL」「(Return code of 127 is out of bounds – plugin may be missing) 」というステータスになる。

設定

/etc/nagios

このディレクトリ以下にnagiosの各種設定ファイルがある。

nagios.cfg

nagios.cfgが設定ファイルの総元締めとなっている。このファイルで、以下のような記述を行い他の設定ファイルをインクルードしている。

# You can specify individual object config files as shown below:
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
cfg_file=/etc/nagios/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/etc/nagios/objects/localhost.cfg

# Definitions for monitoring a Windows machine
#cfg_file=/etc/nagios/objects/windows.cfg

この例の最後の行は#でコメントアウトされている。つまりobjectsにあらかじめ用意されているファイルであっても、使用されていないものがあることに注意。

管理者メールアドレス

/etc/nagios/objects/contact.cfgに、管理者メールアドレスを記述する(デフォルトはnagios@localhostになっている)。

異常があった時に通知される先なので必ず変更しないといけない。

ウェブアプリの認証

後述するように/usr/share/nagios/htmlにnagiosのウェブアプリがあるのだが、まずはnagiosadminというユーザのパスワードを変更しておく。

これは(デフォルトでは?)BASIC認証で、パスワードファイルは/etc/nagios/passwdであり、そこにアカウントnagiosadmin/nagiosadminが格納されているので、パスワードを変更しておく。

cd /etc/nagios
rm passwd
htpasswd -c passwd nagiosadmin
New password:
Re-type new password:

ローカルホストの監視設定

ここではローカルホストのみを監視することにする。これは「/etc/nagios/objects/localhost.cfg」に設定することになるが、後述する。

/usr/share/nagios/html

nagiosの管理画面ウェブサイトは/usr/share/nagios/htmlに格納されている。
インストール時に、/etc/httpd/conf.d/nagios.confが既に作成されているので、気に入らない場合は削除するか、名前を変更する。

ともあれ、これを表示できるようにhttpdを設定する。
先述したように、BASIC認証ファイルの/etc/nagios/passwdを変更すること。

デフォルトでは、/nagiosというURLになっている。ここにアクセスすると、以下の画面になる。

設定ファイルのチェックと起動

nagios -v /etc/nagios/nagios.cfg

で設定ファイルをチェックする。

chkconfig nagios on
service nagios start

で起動する。以下の画面になる。

この状態でnagiosの管理者画面を見ると、Hostsメニューにはlocalhostのみが登録されており、StatusがDOWNになっている。
また、管理者側にAlertがメールされる。

これは、nagiosのデフォルト設定が各種プラグインのインストールを前提としているにも関わらず、プラグインがインストールされていないため。

メールが飛ばないとき

メールが飛ばないときは以下をチェック。

/var/log/maillog

ログに送信記録があれば、受信側の迷惑メールフィルターに引っかかっている可能性。

/var/log/nagios/nagios.log

ここでnotify-service-by-emailなどという記述があれば、nagiosはメール送信動作をしている。

/etc/nagios/objects/commands.cfg

ここのnotify-service-by-emailのところを見てみる。以下のようになっているが、

# 'notify-service-by-email' command definition
define command{
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }

/usr/bin/mailではなく、/bin/mailでないとダメだった。/bin/mailを/usr/bin/mailにリンクする

ローカルホストの監視設定

「/etc/nagios/objects/localhost.cfg」を見ると「define service」が8つ定義されている。一方nagiosの管理画面のServicesを見ると、localhostについて、これらのサービスのStatusがCRITICAL(Return code of 127 is out of bounds – plugin may be missing)になっていることがわかる。

つまり、localhostについてこれらのサービスを監視する設定になっているにも関わらず、監視用のプラグインがインストールされていない。

不要なサービスを除去するか、あるいは監視用のプラグインをインストールし、nagiosを再起動する必要がある。

サービスの無効化

localhost.cfgに記述したまま管理画面からdisabledにする方法もあるようだが、ここではlocalhost.cfgから除去することにする。

とりあえず、PING,Curernt Load,HTTP以外はコメントアウトし、プラグインをインストールする。

※PINGはいらないと思うが、これが無いとHostがDOWN状態のままで表示される。調べるのも面倒なので入れておく。

yum install nagios-plugins-load nagios-plugins-http nagios-plugins-ping

設定をチェックして再起動

nagios -v /etc/nagios/nagios.cfg
service nagios restart

管理画面を見てみると、すぐにはOKにはならない。しばらく待つ必要がある。以下のようになる。HTTPがWARNINGになっているのは、403 Forbiddenを返しているため。

check_local_loadの設定

localhost.cfgの「Current Load」の設定を見ると「check_local_load!5.0,4.0.3.0!10.0,6.0,4.0」という値になっているが、これでは大きすぎるので、値を小さくする。

ホスト名称の設定

localhost.cfgのdefine hostの設定の中の、少なくともaliasを変更しておく。これは空白が含まれた名称でもよい。
異常時のメールには、この名称が記述されるため、デフォルトのままであると(複数ホストをそれぞれのnagiosで監視している場合は)区別がつかなくなってしまう。

できれば、host_nameも変更すべきだが、この場合は、その後のdefine hostgroupのmembersやdefine serviceのhost_nameもそれに合わせなければいけない。

コマンドとその呼び出し方

それぞれのdefine service内のcheck_commandで監視コマンドの呼び出しを定義するわけだが、引数は!区切りになっている。
例えば、check_pingの場合、

define service{
        use                             local-service         ; Name of service template to use
        host_name                       local
        service_description             PING
    check_command           check_ping!100.0,20%!500.0,60%
        }

となっている。このcheck_pingコマンドの実体は、commands.cfgの中に定義されている。

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

つまり、!で区切られた引数が$ARG1$等として展開され、実際のコマンドを呼び出す。

これは、yum install nagios-plugins-pingでインストールされたコマンドだが、これは
/usr/lib64/nagios/plugins/check_pingとしてインストールされている。

これらのコマンドを作成する場合は、以下を参考。

コマンドのパスは/etc/nagios/private/resource.cfgに定義されている。

$USER1$=/usr/lib64/nagios/plugins