Custom Object Variablesを使った監視設定の記述メモ
Nagios/IcingaでCustom Object Variablesを使うと、固有の変数を定義する事が出来ます。
これをうまく使うと、監視設定の記述が少しシンプルに記述できるかも、という話です。
IPアドレスを複数持つホストの監視設定
複数IPアドレスを持つホストの監視は結構悩ましいと思います。
例えば、以下のようなホストを監視するとします。
- HostA → eth0:192.168.0.10, eth1:192.168.1.10
- HostB → eth0:192.168.0.20, eth1:192.168.1.20
これをCustom Object Variablesを使う、使わないで書き分けてみる事にします。
今回メモの前提として、以下のようにcheck_pingコマンドを定義しています。
define command{ command_name check_ping command_line $USER1$/check_ping -H $ARG1$ -w "$ARG2$" -c "$ARG3$" -t $ARG4$ -p $ARG5$ }
Custom Object Variablesを使わない場合
ホスト定義をします。同じ名前でホスト定義は出来ないので、ホスト名-ethX(Xは数字)とします。
define host{ use linux-generic-host host_name HostA-eth0 alias HostA-eth0 address 192.168.0.10 } define host{ use linux-generic-host host_name HostA-eth1 alias HostA-eth1 address 192.168.1.10 } define host{ use linux-generic-host host_name HostB-eth0 alias HostB-eth0 address 192.168.0.20 } define host{ use linux-generic-host host_name HostB-eth1 alias HostB-eth1 address 192.168.1.20 }
次にサービス定義をします。
define service{ use linux-generic-service host_name HostA-eth0 service_description ICMP:eth0 check_command check_ping!$HOSTADDRESS$!3000.0,100%!5000.0,100%!10!5 } define service{ use linux-generic-service host_name HostA-eth1 service_description ICMP:eth1 check_command check_ping!$HOSTADDRESS$!3000.0,100%!5000.0,100%!10!5 } define service{ use linux-generic-service host_name HostB-eth0 service_description ICMP:eth0 check_command check_ping!$HOSTADDRESS$!3000.0,100%!5000.0,100%!10!5 } define service{ use linux-generic-service host_name HostB-eth1 service_description ICMP:eth1 check_command check_ping!$HOSTADDRESS$!3000.0,100%!5000.0,100%!10!5 }
監視は出来ます。が、同じホストにも関わらず監視設定上別のホストとみなされ、管理上嫌な感じです。
またホストが増えれば増えるほどホスト毎の記述が増えるので、管理負荷が上がってしまいます。
Custom Object Variablesを使った監視設定
次に同じ監視をCustom Object Variablesを使って記述してみます。
まずはホスト定義です
define host{ use linux-generic-host host_name HostA alias HostA address 192.168.0.10 _ETH1 192.168.1.10 } define host{ use linux-generic-host host_name HostB alias HostB address 192.168.0.20 _ETH1 192.168.1.20 }
「_ETH1」というCustome Object Variablesを定義して、これにeth1のIPアドレスを定義します。
先頭に"_"を入れておく事、全て英語大文字で記述しておくのが重要です。
次にサービス定義です。
define service{ use linux-generic-service host_name HostA, HostB service_description ICMP:eth0 check_command check_ping!$HOSTADDRESS$!3000.0,100%!5000.0,100%!10!5 } define service{ use linux-generic-service host_name HostA, HostB service_description ICMP:eth1 check_command check_ping!$_HOSTETH1$!3000.0,100%!5000.0,100%!10!5 }
「_HOSTETH1」という形で定義したCustom Object Variablesを呼び出します。
そうすると、ホスト定義で設定した「_ETH1」の値がコマンドの引数として使われます。
記述の比較
同じ監視設定をCustom Object Variablesを使わない場合、使った場合で書き分けてみました。
Custom Object Variablesを使うと、ホスト定義としてeth0とeth1のICMP監視を設定する事ができ、
管理上の見通しが良くなりました。
また、コンフィグの記述量もCustom Object Variablesを使わない場合と比較して、
半分になっている事が分かります。
コンフィグの記述量の差は、監視する機器数が増えれば増えるほど負荷軽減につながりますし、
記述ミスの減少にもつながるかと思います。
IPアドレス情報をホスト定義にまとめておけるため、チェックも楽かと思います。
おまけ
今回はやりませんでしたが、応用するとプロセス監視のパスやポート監視のポート設定、
リソース監視の閾値をホスト別に定義出来たりもするかと。(今度やってみようと思います)
Custom Object Variables をもっと使って、綺麗なコンフィグを目指していこうと思います。
今日はこんなところで。