Nagios で監視項目を追加するとき、次のようなコマンドの定義と、
define command{
command_name check_ping
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}
次のようなサービスの定義が必要。
define service{
use hoge-service-template
service_description PING
check_command check_ping!3000.0,80%!5000.0,100%
servicegroups hoge-servicegroup-ping
hostgroup_name hoge-hostgroup-real
}
サービスで check_command
を指定するときは、コマンドの定義がどのようになっているかを意識する必要がある(ARG1
が何で ARG2
が何なのかを)。
これが超うざいので、コマンド定義は基本的に ARG1
だけでホストアドレスを除くすべての引数を指定するようにしたい。
define command{
command_name check_ping
command_line $USER1$/check_ping -H $HOSTADDRESS$ $ARG1$
}
Nagios エージェント(nrpe)を使う場合、監視対象ホストの nrpe では次のようにコマンド定義しておいて、
command[check_load]=/usr/lib64/nagios/plugins/check_load $ARG1$
監視サーバで次のようにコマンドとサービスを定義する。
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -c $ARG1$ -a '$ARG2$'
}
define service {
use generic-service
host_name ore-no-server
service_description load
check_command check_nrpe!check_load!-w 3 -c 6
}
任意のコマンドを実行できるようにしてしまう
あるいは nrpe のコマンド定義をこんな感じにしてしまって、
command[check_exec]=/usr/bin/env PATH=/usr/lib64/nagios/plugins:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin $ARG1$
監視サーバでこんな感じに設定してしまってはどうか。
define command{
command_name check_nrpe_exec
command_line /usr/lib64/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c check_exec -a '$ARG1$'
}
define service {
use generic-service
host_name sv01
service_description load2
check_command check_nrpe_exec!check_load -w 3 -c 6
}
これなら対象ホストでプラグインのコマンド定義を個別にしておかなくても、任意のプラグインで監視することができる(もちろんプラグインをインストールしておく必要はある)。
監視サーバは対象ホストで任意のコマンドを実行することができるということになってしまうけど、Sensu だって同じだと思うし、特に問題ではないだろう。