このエントリーをはてなブックマークに追加

1.1.4. Nagios

1.1.4.1. 概要

Nagiosは、ホストや、ホストで稼働しているサービス、ネットワークなどを定期的に監視するプログラムです。
異常を検知した場合には管理者にメールなどで通知を行う統合監視ツールです。
プラグインを使用することで,ホストやサービスをチェックします。
また状態異常を検知した場合はメールで通知を行う設定が可能です。
Apacheなどのウェブサーバと連携することで現状の状態確認はブラウザにて確認可能です。
また、Nagiosはネットワーク内の各サーバーのサービス監視は出来るますが、ディスクの残容量など資源の監視となるとNagiosをインストールしているホストのものだけでリモートのホストについては監視出来ません。
そのためリモートホストのリソース監視などを行うためにはNRPEのインストールが必要です。

1.1.4.2. Nagiosのインストール

パッケージによるインストールだとバージョンは3.2.3です。
最新版は3.4.1ですのでソースからインストールします。
ソースからのインストールは Nagios Quickstart Installation Guides に本家のものがあります。
また、日本語化した時のコンパイル失敗は Linux 時々 XX さんを参考にしました。 ありがとうございます。

依存関係のあるパッケージ及びコンパイルに必要なパッケージをを先にインストールしておきます。

$ sudo -i
# apt-get install libgd2-xpm-dev libapache2-mod-php5 build-essential apache2 -y
ユーザの追加
先にユーザを追加しておかないとインストールに失敗しますので作成しておきます。
# useradd nagios
# groupadd nagcmd
# usermod -a -G nagcmd nagios
# usermod -a -G nagcmd www-data
Nagios、Nagiosプラグインのソースダウンロード及びインストール
ももーいさんという方が日本語パッチを作成してくれていますのでありがたく使わせて頂きます。
# cd /usr/local/src
# wget http://downloads.sourceforge.net/project/nagios/nagios-3.x/nagios-3.4.1/nagios-3.4.1.tar.gz
# wget http://ftp.momo-i.org/pub/other/nagios-jp-3.4.1.patch.gz
# tar zxvf nagios-3.4.1.tar.gz
# cd nagios
# gzip -dc ../nagios-jp-3.4.1.patch.gz | patch -p1
# sed -i 's#includes/rss/{AUTHORS,CHANGES,ChangeLog,INSTALL,NEWS,README,TROUBLESHOOTING,cookbook}##' html/Makefile.in
# ./configure --with-command-group=nagcmd
# make all
# make install
# cp -p ./html/includes/rss/{AUTHORS,INSTALL,TROUBLESHOOTING,CHANGES,NEWS,cookbook,ChangeLog,README} /usr/local/nagios/share/includes/rss/
# make install-init
# make install-config
# make install-commandmode
# make install-webconf

WebUIにログインするためのパスワードの設定

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

1.1.4.3. Nagiosプラグインのインストール

Nagiosを使用するにはpluginも必要ですのでインストールします。
バージョンについては Nagios Plugin を確認してください。
# cd /usr/local/src
# apt-get install libssl-dev -y
# wget http://downloads.sourceforge.net/project/nagiosplug/nagiosplug/1.4.16/nagios-plugins-1.4.16.tar.gz
# tar zxvf nagios-plugins-1.4.16.tar.gz
# cd nagios-plugins-1.4.16
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install

メモリチェックのNagiosプラグインをインストール

# cp contrib/check_mem.pl /usr/local/nagios/libexec/
# vi /usr/local/nagios/libexec/check_mem.pl
$command_line = `vmstat | tail -1 | awk '{print \$4,\$5}'`;
↓42行目を修正
$command_line = `free | head -3 | tail -1 | awk '{print \$3,\$4}'`;

メモリチェックプラグインへ実行権限を追加

# chmod +x /usr/local/nagios/libexec/check_mem.pl

1.1.4.4. Nagios設定

Nagiosのコンフィグを編集

# vi /usr/local/nagios/etc/nagios.cfg

1. 他サーバー監視設定ディレクトリの追加
=> 52行目のコメントを削除
cfg_dir=/usr/local/nagios/etc/servers

2. 日付書式をYYYY-MM-DD HH:MM:SSにする
date_format=us
=> 1103行目を変更
date_format=iso8601
さざなみフォントの有効化
画像の日本語化に必要です。
# wget http://globalbase.dl.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2
# tar jxvf sazanami-20040629.tar.bz2
# mkdir /usr/local/nagios/etc/font
# cp sazanami-20040629/sazanami-gothic.ttf /usr/local/nagios/etc/font/font.ttf
# vi /usr/local/nagios/etc/cgi.cfg
最終行のコメント解除
ttf_file=/usr/local/nagios/etc/font/font.ttf
他サーバー監視設定ファイル格納ディレクトリ作成
監視サーバ自体は /usr/local/nagios/etc/objects の設定を流用しますがその他サーバに関しては纏めて別ディレクトリで設定をするようにします。
# mkdir /usr/local/nagios/etc/servers

contacts.cfgの編集

# vi /usr/local/nagios/etc/objects/contacts.cfg
email                           nagios@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
=> アラートメール送信先の設定を行います。
email                           hagihara@fulltrust.co.jpt ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
localhost.cfgの編集
SSHとHTTPの監視設定を修正
# vi /usr/local/nagios/etc/objects/localhost.cfg

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             SSH
        check_command                   check_ssh
        notifications_enabled           1 #1を指定(SSH状態変化時に通知する)
        }

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             HTTP
#        check_command                   check_http                     #元のコンフィグをコメント
        check_command                   check_http_url!http://localhost #URL指定できるようにコマンドも変更
        notifications_enabled           1 #1を指定(HTTP状態変化時に通知する)
        }
commands.cfgの編集
メール送信の設定は日本語の文字化け対策、またそのためのnkfパッケージもインストールします。
一番下のhttpのコマンドを追加しているのはデフォルトだと(/var/www/html/index.html)を確認しようとして403エラーになるため
# apt-get install nkf -y
# vi /usr/local/nagios/etc/objects/commands.cfg
# 'notify-host-by-email' command definition
=> 27-36行目を全て変更

define command{
  command_name    notify-host-by-email
  command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/nkf -j | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ ← nkfコマンド追加(メール本文文字化け対処)
}

# '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$" | /usr/bin/nkf -j | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ ← nkfコマンド追加(メール本文文字化け対処)
}

# 'check_http2' command definition
define command{
  command_name check_http_url
  command_line $USER1$/check_http -H $HOSTADDRESS$ -u $ARG1$
}
Apacheのアクセス許可を設定
# vi /etc/httpd/conf.d/nagios.conf
<Directory "/usr/local/nagios/sbin">
#  SSLRequireSSL
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   #自ホストからのアクセスを許可
   Allow from 127.0.0.1
   #内部ネットワーク(例:192.168.10.0/24)からのアクセスを許可
   Allow from 192.168.10.0/24k
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   # 自ホストからのアクセスを許可
   Allow from 127.0.0.1
   # 内部ネットワーク(例:192.168.10.0/24)からのアクセスを許可
   Allow from 192.168.10.0/24
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>

Apacheの設定変更を反映、Nagiosも起動

# service apache2 restart
# service nagios restart
ブラウザで http://設定したIPアドレス/nagios でログイン画面が出力されます。
ユーザ名 nagiosadmin パスワードは設定したものでログイン出来ます。

1.1.4.5. 監視ホストの追加

リモートに監視ホストがある場合の追加方法です
一台しかない場合はローカルホストについてるIPアドレスで実験として追加

ホスト名をコンフィグ名として設定します。

# vi /usr/local/nagios/etc/servers/newserver.cfg

define host{
        use                     linux-server
        host_name               newserver
        alias                   newserver
        address                 192.168.10.10
        }

define service{
        use                             generic-service
        host_name                       newserver
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }

Nagiosを再起動

# /etc/rc.d/init.d/nagios restart

1.1.4.6. 監視サービス追加(ローカルホスト)

メモリ空き状況、NTPのコマンドをを最終行に追加

# vi /usr/local/nagios/etc/objects/commands.cfg

# 'check_mem' command definition
define command{
        command_name    check_mem
        command_line    $USER1$/check_mem.pl -f -w $ARG1$ -c $ARG2$
        }

# 'check_ntp' command definition
define command{
        command_name    check_ntp
        command_line    $USER1$/check_ntp -H $ARG1$ -w $ARG2$ -c $ARG3$
        }

空きメモリ、ログインユーザ数、NTPに時刻ずれ設定を追加

# vi /usr/local/nagios/etc/objects/localhost.cfg

define service{
        use                             generic-service
        host_name                       localhost
        service_description             Memory Free
        check_command                   check_mem!20!10 #空きメモリ量が20%で警告、10%で異常
        }

define service{
        use                             generic-service
        host_name                       localhost
        service_description             Current Users
        check_command                   check_local_users!3!5 #ログインユーザー数が3以上で警告、5以上で異常とする
        }


define service{
        use                             generic-service
        host_name                       localhost
        service_description             NTP
        check_command                   check_ntp!0.rhel.pool.ntp.org!1!2 #外部NTPサーバーと時間が1秒ずれていたら警告、2秒ずれていたら異常とする
        }

Nagiosを再起動して設定を反映

# /etc/rc.d/init.d/nagios restart

1.1.4.7. アラート通知用のSMTP設定

メールサーバを既に構築しているなどの場合は必要ありませんがそうでない場合はアラートメールを送信できません。
ここではメール送信を行いたいだけなので大げさなものはインストールしません。
sSMTPをインストールして外部SMTPサーバを利用してアラート通知するようにします。
外部サーバはプロバイダのものでもいいですがGmailで設定します。

1.1.4.7.1. インストール

# apt-get install ssmtp mailutils -y

1.1.4.7.2. 設定

hogehogeの部分とパスワードの部分は環境にあったものを設定してください。

# vi /etc/ssmtp/ssmtp.conf
root=hogehoge@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
hostname=gmail.com
FromLineOverride=YES
AuthUser=hogehoge@gmail.com
AuthPass=*********
UseSTARTTLS=YES

1.1.4.7.3. 確認

メール送信が出来ることを確認します。

# ssmtp hogehoge@gmail.com
本文入力後、改行してCtrl-Dを入力します。
メールが送信されてくれば問題ありません。
ダメな場合はログを確認します。
/var/log/mail.log もしくは /var/log/mail.err を確認しましょう。