Nagios
Nagios はオープンソースのホスト・サービス・ネットワーク監視プログラムです。指定されたホストやサービスを監視して、問題の兆候などを警告します。この記事では Nagios のインストール・設定方法を説明します。
Nagios には以下のような機能があります [1]:
- ネットワークサービスの監視 (SMTP, POP3, HTTP, NNTP, PING など)
- ホストのリソース監視 (プロセッサの負担率、ディスクの使用率など)
- 簡単に自分のサービスをチェックできるシンプルなプラグイン設計
- 並列化されたサービスチェック
- "parent" ホストを使ってネットワークホストの階層を定義でき、ホスト間で落ちてないか検知できます。
- サービスやホストに問題が発生した場合に通知 (メールやページャ、あるいはユーザーが定義した方法を使用)
- サービスやホストに何か起こったときに対処するようにあらかじめ定義可能
- ログファイルの自動ローテーション
- ホストの冗長監視の実装をサポート
- 現在のネットワーク状態・履歴・通知・ログファイルなどを表示するウェブインターフェイス
目次
ウェブサーバー
公式ドキュメント ではウェブサーバーは必ずしも必要ではないとされていますが、CGI 機能を使いたいと考えているのであればウェブサーバー (Apache が推奨されています), PHP (php-apache), gd ライブラリが必要になります。
インストール
インストールする前に、ウェブサーバーとして必要なパッケージをインストールしてください。例えば nginx を使用する場合: nginx, php, php-fpm, fcgiwrap などが必要です。
AUR から nagiosAUR パッケージをインストールしてください。
monitoring-plugins もインストールすると良いでしょう。インストールした場合、/etc/nagios/resource.cfg
を編集して新しいパスを記述してください:
#$USER1$=/usr/share/nagios/libexec $USER1$=/usr/lib/monitoring-plugins
Nagios の設定
サンプル設定ファイルを root でコピーしてください:
# cp /etc/nagios/cgi.cfg.sample /etc/nagios/cgi.cfg # cp /etc/nagios/resource.cfg.sample /etc/nagios/resource.cfg # cp /etc/nagios/nagios.cfg.sample /etc/nagios/nagios.cfg # cp /etc/nagios/objects/commands.cfg.sample /etc/nagios/objects/commands.cfg # cp /etc/nagios/objects/contacts.cfg.sample /etc/nagios/objects/contacts.cfg # cp /etc/nagios/objects/localhost.cfg.sample /etc/nagios/objects/localhost.cfg # cp /etc/nagios/objects/templates.cfg.sample /etc/nagios/objects/templates.cfg # cp /etc/nagios/objects/timeperiods.cfg.sample /etc/nagios/objects/timeperiods.cfg
コピーしたファイルの所有者・所有グループを nagios/nagios に設定:
# chown -R nagios:nagios /etc/nagios
適当なユーザー名とパスワードで htpasswd.users
ファイルを作成してください (例: nagiosadmin と secretpass):
# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
apache-toolsAUR をインストールしたくない場合、以下のコマンドを実行してください:
# echo -e "nagiosadmin:`perl -le 'print crypt("your-password","salt")'`" > /etc/nagios/htpasswd.users
別のユーザーを追加することもできますが、/etc/nagios/cgi.cfg
を編集する必要があります。'nagiosadmin' を適当なユーザーに置き換えるか、カンマで区切ってユーザーを追加してください (例: nagiosadmin,yourusername,yournextusername
)。
インストールした nagios のプラグインの所有者・所有グループが root:root の場合、以下のコマンドを実行してください:
# chown -R nagios:nagios /usr/share/nagios
Nagios を設定したら、次はウェブサーバーの設定です。
Apache の設定
/etc/httpd/conf/httpd.conf
を編集して、ファイルの末尾に以下を追加してください:
LoadModule php5_module modules/libphp5.so # Nagios Include "conf/extra/nagios.conf" # PHP Include "conf/extra/php5_module.conf"
設定ファイルをコピー:
# cp /etc/webapps/nagios/apache.example.conf /etc/httpd/conf/extra/nagios.conf
apache ユーザーの http を nagios グループに追加してください:
# usermod -G nagios -a http
追加しないと nagios を使用するときに以下のようなエラーが表示されます:
Could not open command file '/var/nagios/rw/nagios.cmd' for update!:
グループに追加しても上記のエラーが解決しない場合、ファイルのパーミッションを変更してください:
# chmod 666 /var/nagios/rw/nagios.cmd
Nginx の設定
php と php-fpm だけでなく、CGI スクリプトを動かすために fcgiwrap もインストールする必要があります。
設定例:
server { server_name nagios.yourdomain.tld; root /usr/share/nagios/share; listen 80; index index.php index.html index.htm; access_log nagios.access.log; error_log nagios.error.log; auth_basic "Nagios Access"; auth_basic_user_file /etc/nagios/htpasswd.users; # Fixes frames not working add_header X-Frame-Options "ALLOW"; location ~ \.php$ { try_files $uri = 404; fastcgi_index index.php; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; include fastcgi.conf; } location ~ \.cgi$ { root /usr/share/nagios/sbin; rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break; fastcgi_param AUTH_USER $remote_user; fastcgi_param REMOTE_USER $remote_user; include fastcgi.conf; fastcgi_pass unix:/run/fcgiwrap.sock; } # Fixes the fact some links are expected to resolve to /nagios, see here. location /nagios { alias /usr/share/nagios/share; } }
Lighttpd の設定
lighttpd の設定例:
$HTTP["url"] =~ "^/nagios" { alias.url = ( "/nagios/cgi-bin" => "/usr/share/nagios/sbin", "/nagios" => "/usr/share/nagios/share" ) $HTTP["url"] =~ "^/nagios/cgi-bin" { cgi.assign = ( "" => "" ) } auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/etc/nagios/passwd" auth.require = ( "" => ( "method" => "basic", "realm" => "nagios", "require" => "user=nagiosadmin" ) ) }
mod_setenv, mod_cgi, mod_alias, mod_auth を許可してください。
PHP の設定
/etc/php/php.ini
を編集して open_basedir ディレクティブに /usr/share/nagios
を追加してください。
設定例:
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps:/etc/webapps:/usr/share/nagios
起動
ウェブサーバーを起動してから nagios.service
を起動してください。
起動したらウェブブラウザから nagios にアクセスできます。htpasswd を作成するときに入力したユーザー名とパスワードを使用してください: http://localhost/nagios
Arch Linux ホストの監視
monitoring-plugins と nrpe または check_by_ssh とパスワード無しでホストを監視できる ssh が必要です。
nrpe の設定は /etc/nrpe/nrpe.cfg
で行い、監視するファイルは /usr/share/nagios/libexec/
に配置します。インストール後は nrpe.cfg
はほとんど空なので必ず編集してください。
check_by_ssh
を使用する場合、監視する側のシステムで、Nagios を実行するユーザーに切り替えてから、ssh-keygen を実行してください。監視される側の Arch 環境にも同じ名前のユーザーを作成して一時的にパスワードを設定します: # useradd -m -d /home/icinga -s /bin/bash -p icinga icinga
。監視する側のシステムで次のようにコマンドを実行してください: $ ssh-copy-id address
(address はクライアントの IP に置き換えてください)。実行したらクライアントのパスワードを消去してください: # passwd -d icinga
。それから $ ssh icinga@address
でサーバーからクライアントにログインできることを確かめてください。
Arch 以外の環境では大抵、監視プラグインは /usr/lib/nagios/plugins
にインストールされますが、Arch では /usr/lib/monitoring-plugins/
にインストールされます。/usr/lib/nagios
を作成して ../monitoring-plugins
から plugins
にシンボリックリンクを作成すると良いでしょう。
監視する側のシステムのユーザーからコマンドラインで以下のように実行します (パスを正しく設定していれば、あらゆる Linux および BSD で動作します、FreeNAS でも動作します):
$ /usr/lib/nagios/plugins/check_by_ssh -E -H 192.168.100.11 -C "/usr/lib/nagios/plugins/check_disk -w 10 -c 5 --path=/ --units=GB"
check_rdiff プラグイン
check_rdiff というプラグインを使って rdiff-backup を監視する例。
ダウンロードとインストール
先に perl をインストールする必要があります。
$ wget http://www.monitoringexchange.org/attachment/download/Check-Plugins/Software/Backup/check_rdiff/check_rdiff # cp check_rdiff /usr/share/nagios/libexec # chown nagios:nagios /usr/share/nagios/libexec/check_rdiff # chmod 755 /usr/share/nagios/libexec/check_rdiff
nagios ユーザーで sudo を有効化
perl スクリプトの check_rdiff は root で実行する必要があるため、nagios ユーザーで sudo を使えるように設定します:
# visudo
/etc/sudoers
ファイルが開くのでファイルの末尾に以下を追加してください:
nagios ALL=(root)NOPASSWD:/usr/share/nagios/libexec/check_rdiff
check_rdiff プラグインを nagios に統合
/etc/nagios/objects/commands.cfg
を編集して以下の command 定義を記述してください:
# check rdiff-backup define command{ command_name check_rdiff command_line sudo $USER1$/check_rdiff -r $ARG1$ -w $ARG2$ -c $ARG3$ -l $ARG4$ -p $ARG5$ }
/etc/nagios/objects/localhost.cfg
を編集して localhost の rdiff-backup のチェックを記述してください。例:
define service{ use local-service ; Name of service template to use host_name localhost service_description rdiff-backup check_command check_rdiff!/home/x/rdiffbackup!8!10!500!24 }
check_rdiff スクリプトより:
- 上記のコマンドはバックアップ先として定義されたリポジトリ (rdiff-backup-data ディレクトリ) をチェックします。バックアップが午前8時までに完了しなかった場合、警告が返り、午前10までに完了しなかった場合は緊急状態となります。また、TotalDestinationSizeChange が 500Mb を超過した場合も警告が返ってきます。24時間ごとにセットされるようになっています (-p)。バックアップが時間通りに開始されなかったときにプラグインが問題を報告できるようにするためです。
最後に nagios を再起動してください:
# systemctl restart nagios
nagios のウェブインターフェイスのコントロールパネルで左側のサービスをクリックすることで rdiff-backup の状態を確認できます。
フォーク
- Icinga は Nagios のフォークです。フォークに関する詳細は Icinga FAQ: Why a fork? を見てください。
参照
- nagios.org - 公式ウェブサイト
- Nagios Plugins - 公式プラグイン
- Wikipedia:ja:Nagios - Wikipedia 記事
- NagiosExchange - Nagion のプラグイン・アドオン・メーリングリスト
- NagiosForge