2017/10/29 CentOS6.5/PandoraFMS5.0SP3





DNSサービスを監視する

PandoraFMSには標準でDNSの監視プラグインがあります。
DNSサーバに対して名前解決を行い、回答があるかを確認します。
回答が無かったり、回答が期待するアドレスでない場合、障害を発生させます。

DNSサービスが正常に稼働しているかどうか。
レコードが不正に書き換えられたりしてしてないかどうか。を調べます。

しかしちょっとしたコツが必要です。
何も考えず手なりに設定すると「DNSがダウンしてもエラーにならない」「DNSが違うIPを回答してもエラーにならない」という症状に悩まされます。

デフォルトではこのプラグイン、DNSが応答しなくてもアラートが発生しません
(不明イベントが発生するだけです)。
アラートを発生させるためには設定変更が必要です。

なお、DNSのポート監視だけでいいのなら「DNSポートを監視する」を参照してください。




0.digコマンドをインストールする

プラグインによるDNS監視は、実体としてdigコマンドを使用します。
PandoraFMSアプライアンスなど、標準でdigコマンドが入っていない場合は事前にインストールする必要があります。

#yum install bind-utils -y




1.エージェントのモジュール追加で「プラグインモジュールサーバの新規作成」を選択します





2.DNSプラグインを選択する

名前 任意の名前を付けます。
種類 Generic booleanを選択します ←ここ重要
プラグイン DNS Pluginを選択します。


デフォルトでは種類にgeneric numericが選択されているため、設定を見逃すとDNSサーバがダウンしたり別のアドレスを回答(0を検出)しても、エラーが発生しません。





3.監視項目を指定する

「TargetIP」には、返ってくるはずのIPアドレスを指定します。
「Domain to check」には、解決するホスト名を指定します。
「DNS Server to check」には、監視するDNSサーバを指定します。
設定後、更新ボタンをクリックして保存します。


画像ではDNSサーバ192.168.1.1へ、pandora.example.localを問い合わせ、192.168.1.199が返ってくるはず、というストーリーです。
設定の並びが直観的じゃないので注意です。

ここで設定する「Domain to Check」と「Target IP」には固定的で信頼されるアドレスを使用しましょう。
例えば自社のwwwサーバのホスト名とアドレスとか。
www.yahoo.co.jpとかダメです。アドレスがラウンドロビンで変化しますから。
無関係なwwwサーバもダメです。ある日IPアドレスが変更されたりしますから。



4.タイムアウトを変更します。

今のままでは、DNSサービスがダウンしても不明イベントが発生するだけで障害は発生しません。
dns_plugin.shを編集します。

#vi /usr/share/pandora_erver/util/plugin/dns_plugin.sh

dig行を見つけ、以下赤字部分を追加します。

dig +time=3 +tries=2 @DNS_CHECK $DOMAIN_CHECK > $TMPFILE


変更が完了したら、DNSサーバをダウンさせてみるか、「DNS Server to check」のIPアドレスを変更して、DNSサーバダウンをシミュレーションしてみます。

モジュールがレッドに変わることを確認します。



補足

なぜプラグインを書き換える必要があったかについて補足説明します。
DNS PluginはDNSサーバがダウンしても不明イベントが発生するだけで、アラートを発生させることができません。

理由はPandoraFSMのデフォルトのタイムアウト値です。

dns_pluginの実体は「/usr/share/pandora_erver/util/plugin/dns_plugin.sh」です。
中を見てみると、やっていることはdigコマンドを使用して得られたIPアドレスを比較しているだけです。

しかしDNSサービスがダウンしているときにdigコマンドで問い合わせても、digコマンドはタイムアウト5秒の問い合わせを3回試みるため、プラグインが0(失敗)を返すまでに約15秒かかります。

試しにモジュールを単体で動作させてみます。
-sが問い合わせるDNSサーバ、-dが解決するホスト名、-iが応答が期待されるアドレスです。
ネットワーク内の適切な値を設定してみてください。

#cd /usr/share/pandora_server/util/plugin/
#./dns_plugin.sh -s 192.168.1.11 -d pandora.example.local -i 192.168.1.199

1と表示されれば成功です。
-sのアドレスに、DNSサービスが動作してないIPアドレスを指定してみます。
今度は失敗して、0が返ってくるまでに15秒かかります。

PandoraFMSのプラグインタイムアウトの初期値は12秒です。

digコマンドを使用したudp_plugin.shから0が返ってくるより先に、Pandoraサーバのほうがプラグインタイムアウトと判断して不明イベントを発生させます。

だったらモジュールの設定画面でタイムアウト値を設定して、延ばせばいいんじゃないかと思うのですが、pandora_server.confに書かれている全体向けのplugin_timeout値は、プラグイン個々の設定より優先されます。
リファレンスより)
普通逆ですよね?


とにかく対策はいずれか2つです。

1.digコマンドのタイムアウトを短くする。

 dig +time=3 +tries=2 @DNS_CHECK $DOMAIN_CHECK > $TMPFILE
 とすれば、タイムアウト3秒、リトライ2回となり、合計タイムアウトは6秒になります。


2.pandora_server.confのタイムアウト値を延ばす。ただし全プラグインのタイムアウトが延びます。

 pandora_server.confを開き、plugin_timeoutの値が12になっているので、それを16〜20へ変更します。
 pandora_serverサービスを再起動します。






prev.gif