Nagios
以下
| 監視対象ホスト | IP | 監視対象サービス |
| router1 | 192.168.0.1 | PING |
| linux1 | 192.168.0.2 | SSH |
| windows1 | 192.168.0.10 | PING |
| linux2 | 172.16.0.1 | HTTP |
と仮定。
設定ファイル
| ファイル名 | 詳細 |
| cgi.cfg | CGI設定 |
| checkcommands.cfg | 監視のために実行するコマンド |
| contactgroups.cfg | アラート通知先のグループ |
| contacts.cfg | アラート通知先 |
| dependencies.cfg | 依存定義 |
| escalations.cfg | 詳細なアラートの通知方法 |
| hostgroups.cfg | 監視対象ホストのグループ |
| hosts.cfg | 監視対象ホスト |
| misccommands.cfg | アラートを通知するためのコマンド |
| nagios.cfg | メイン設定 |
| resource.cfg | リソース設定 |
| services.cfg | チェックする各監視対象ホストのサービス |
| timeperiods.cfg | アラートを通知する時間帯 |
| その他の *.cfg | ホストごとのサービスの設定 (自分で作成) |
cgi.cfg
認証周りだけ設定。guestは閲覧のみ可能。
vi /usr/local/nagios/etc/cgi.cfg
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin,guest authorized_for_all_hosts=nagiosadmin,guest
authorized_for_all_service_commands=nagiosadmin authorized_for_all_host_commands=nagiosadmin
checkcommands.cfg
適当に追加
vi /usr/local/nagios/etc/checkcommands.cfg
# 'check_ssh' command definition
define command{
command_name check_ssh
command_line $USER1$/check_ssh -t $ARG1$ $HOSTADDRESS$
}contacts.cfg
通知先を変更
vi /usr/local/nagios/etc/contacts.cfg
# 'nagios' contact definition
define contact{
contact_name nagios
alias Nagios Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email nagios-admin@example.com
}hostgroups.cfg
グループごとに分ける
vi /usr/local/nagios/etc/hostgroups.cfg
# 'local-machines' host group definition
define hostgroup{
hostgroup_name local-machines ; ホストグループ名
alias Local Machines ; 愛称
contact_groups linux-admins ; 通知グループ
members router1,linux1,windows1 ; メンバー
}
# 'sample-servers' host group definition
define hostgroup{
hostgroup_name sample-servers
alias Sample-Servers
contact_groups linux-admins
members linux2
}hosts.cfg
ホストの設定は一般設定に極力まとめてしまう
vi /usr/local/nagios/etc/hosts.cfg
# Generic host definition template
define host{
name generic-host ; テンプレート名
notifications_enabled 1 ; 通知の有無
event_handler_enabled 1 ; イベントハンドラの有無
flap_detection_enabled 1 ; ステータス反転の検出
process_perf_data 1 ; パフォーマンス情報を保存
retain_status_information 1 ; ステータス情報を保存
retain_nonstatus_information 1 ; ステータス情報以外を保存
register 0 ; この設定をテンプレートとして登録
max_check_attempts 10 ; リトライ回数
notification_interval 480 ; 通知間隔
notification_period 24x7 ; 通知時間帯
notification_options d,u,r ; このステータスのときに通知
}
# 'router1' host definition
define host{
use generic-host
host_name router1
alias Router #1
address 192.168.0.1
check_command check-host-alive
}
# 'linux1' host definition
define host{
use generic-host ; 使用するテンプレート
host_name linux1 ; ホスト名
alias Linux Server #1 ; 愛称
address 192.168.0.2 ; IP
parents router1 ; 親となるホスト
check_command check-host-alive ; 生死チェックのコマンド
}
# 'windows1' host definition
define host{
use generic-host
host_name windows1
alias Windows #1
address 192.168.0.10
parents router1
check_command check-host-alive
}
# 'linux2' host definition
define host{
use generic-host
host_name linux2
alias Linux Server #2
address 172.16.0.1
check_command check-host-alive
}- notification_periodの取る値は timeperiods.cfg の timeperiod_name
- notification_optionsの取る値
d DOWN u UNREACHABLE r 回復したら n 通知しない - parentsは Status Map, 3-D Status Map 等で必要になるので、きちんと指定すること。
指定されていない場合はNagios Process(図の中心)を親とします。
misccommands.cfg
通知メールを読みやすく。
# 'notify-by-email' command definition
define command{
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nType : $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost : $HOSTALIAS$ ($HOSTNAME$)\nAddress: $HOSTADDRESS$\nState : $SERVICESTATE$\nDate : $SHORTDATETIME$\nInfo :\n\n$OUTPUT$" | /usr/local/nagios/sbin/mail.pl "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$ ($HOSTNAME$)/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
# 'host-notify-by-email' command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nType : $NOTIFICATIONTYPE$\nHost : $HOSTNAME$\nState : $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo : $OUTPUT$\n\nDate : $SHORTDATETIME$\n" | /usr/local/nagios/sbin/mail.pl "Host $HOSTSTATE$ alert for $HOSTNAME$!" $CONTACTEMAIL$
}
mail.pl はDevel/Perl/Net-SMTPのものを/usr/local/nagios/sbin/mail.plとして保存して使用。
nagios.cfg
dependencies.cfgとescalations.cfgは今回は使用しません。
サービスの設定はホストごとに別ファイルにして管理を楽にします。
日付は読みやすい形式(YYYY-MM-DD HH:MM:SS)に変更。
vi /usr/local/nagios/etc/nagios.cfg
#cfg_file=/usr/local/nagios/etc/dependencies.cfg #cfg_file=/usr/local/nagios/etc/escalations.cfg
cfg_file=/usr/local/nagios/etc/s_router1.cfg cfg_file=/usr/local/nagios/etc/s_linux1.cfg cfg_file=/usr/local/nagios/etc/s_windows1.cfg cfg_file=/usr/local/nagios/etc/s_linux2.cfg
#date_format=us date_format=iso8601
CGI経由で設定変更する場合は
groupadd nagiocmd usermod -G nagiocmd nagios usermod -G nagiocmd apache
chown nagios.nagiocmd /usr/local/nagios/var/rw chmod 2770 /usr/local/nagios/var/rw
vi /usr/local/nagios/etc/nagios.cfg
check_external_commands=1
services.cfg
サービスの設定も極力一般設定にまとめてしまう
vi /usr/local/nagios/etc/services.cfg
# Generic service definition template
define service{
name generic-service ; テンプレート名
active_checks_enabled 1 ; 自身でのチェックの有無
passive_checks_enabled 1 ; DMSによるチェックの有無
parallelize_check 1 ; 並列チェックの有無
obsess_over_service 1 ; サービスに付きまとうか
check_freshness 0 ; 鮮度チェックの有無
notifications_enabled 1 ; 通知の有無
event_handler_enabled 1 ; イベントハンドラの有無
flap_detection_enabled 1 ; ステータス反転の検出
process_perf_data 1 ; パフォーマンス情報を保存
retain_status_information 1 ; ステータス情報を保存
retain_nonstatus_information 1 ; ステータス情報以外を保存
register 0 ; この設定をテンプレートとして登録
notification_interval 120 ; 通知間隔
notification_period 24x7 ; 通知時間帯
notification_options w,u,c,r ; このステータスのときに通知
contact_groups linux-admins ; 通知グループ
}- notification_periodの取る値は timeperiods.cfg の timeperiod_name
- notification_optionsの取る値
w WARNING u UNKNOWN c CRITICAL r 回復したら n 通知しない
s_router1.cfg
別ファイルにしたサービスの設定
vi /usr/local/nagios/etc/s_router1.cfg
# router1
define service{
use generic-service ; 使用するテンプレート名
host_name router1 ; 対象ホスト名
service_description PING ; 対象サービスの説明
is_volatile 0 ; 揮発性の有無
check_period 24x7 ; チェック時間帯
max_check_attempts 3 ; リトライ回数
normal_check_interval 5 ; チェック間隔
retry_check_interval 1 ; リトライ間隔
check_command check_ping!100.0,20%!500.0,60% ; チェックコマンド
}- check_periodの取る値は timeperiods.cfg の timeperiod_name
s_linux1.cfg
別ファイルにしたサービスの設定
vi /usr/local/nagios/etc/s_linux1.cfg
# linux1
define service{
use generic-service
host_name linux1
service_description SSH
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 1
retry_check_interval 1
check_command check_ssh!2
}s_windows1.cfg
別ファイルにしたサービスの設定
vi /usr/local/nagios/etc/s_windows1.cfg
# windows1
define service{
use generic-service
host_name windows1
service_description PING
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
check_command check_ping!100.0,20%!500.0,60%
}s_linux2.cfg
別ファイルにしたサービスの設定
vi /usr/local/nagios/etc/s_linux2.cfg
# linux2
define service{
use generic-service
host_name linux2
service_description HTTP
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 1
retry_check_interval 1
check_command check_http
}Apacheの設定
vi /usr/local/apache2/conf/httpd.conf
# for Nagios
ScriptAlias /nagios/cgi-bin/ "/usr/local/nagios/sbin/"
<Directory "/usr/local/nagios/sbin">
Options ExecCGI
Order allow,deny
Allow from all
AuthUserFile /usr/local/nagios/etc/.htpasswd
AuthName "Please Enter Your Password"
AuthType Basic
Require valid-user
</Directory>
Alias /nagios/ "/usr/local/nagios/share/"
<Directory "/usr/local/nagios/share">
Options None
Order allow,deny
Allow from all
AuthUserFile /usr/local/nagios/etc/.htpasswd
AuthName "Please Enter Your Password"
AuthType Basic
Require valid-user
</Directory>/usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/.htpasswd nagiosadmin /usr/local/apache2/bin/htpasswd /usr/local/nagios/etc/.htpasswd guest
設定を再読み込み
/etc/rc.d/init.d/httpd graceful
設定が終わったら
設定ファイルの整合性を確認
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Total Warnings: 0
Total Errors: 0
となっていることを確認して、
Nagiosを起動
/etc/rc.d/init.d/nagios start
ちなみに監視中に設定を再読み込みするには下記のようにする
/etc/rc.d/init.d/nagios reload
Status Map, 3-D Status Map 等のアイコン
3-D Status Mapの表示
- まず、クライアントマシンにCortona VRML ClientなどのVRMLプラグインを入れます。
- 次にNagios監視サーバーのMIMEを書き換えます。
vi /etc/mime.types
# model/vrml wrl vrml x-world/x-vrml wrl
Tips
サービスは以下のようにまとめて書けます。
# servers
define service{
use generic-service
host_name linux1,linux2,windows1
service_description HTTP
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 1
retry_check_interval 1
check_command check_http
}




