Xymonクライアントで動作するtestモジュールは自機の情報だけをXymonサーバに通知すればいいのに対して、Xymonサーバで動作するtestモジュールは、一般には複数の監視対象を検査・判定しなければなりません。Xymonでは、hosts.cfgを走査して監視対象を抽出するのはXymonサーバ本体ではなくtestモジュールの役割です。その工程を支援するユーティリティとしてxymongrepが提供されています。xymongrepコマンドは~xymon/server/binにインストールされています。マニュアルには$XYMONHOME
という表記が登場しており、これはXymonサーバがtestモジュールを起動するときに実際に引き渡してくる環境変数なんですが、/usr/local/www/xymonではなく、もう1階層下の/usr/local/www/xymon/serverを指しているので気をつけて下さい。
実行例はマニュアルのEXAMPLEに載っていますが、ちょっと別の例をご覧いただきましょう。hosts.cfgに
192.0.2.1 server.example.jp # link:fxp0 192.0.2.254 gw.example.jp # link:wan link:lan link:dmz
と書かれているときに
$ /usr/local/www/xymon/server/bin/xymongrep MyExcellentService
を実行すると
192.0.2.1 server.example.jp # MyExcellentService
という応答が、また
$ /usr/local/www/xymon/server/bin/xymongrep 'link:*'
を実行すると
192.0.2.1 server.example.jp # link:fxp0 192.0.2.254 gw.example.jp # link:wan link:lan link:dmz
という応答が返ってきます。
*を使えば標準のtestのssh:8022やdns=hostnameと同じスタイルのパラメータがついた設定を記述・解釈できます。マニュアルに
Tags may be given with a trailing asterisk '*'
と書かれているように、test名の末尾のワイルドカードとしては指定できますが、先頭や途中にはマッチしません。また、上の例のgw.example.jpのように1ノードでlink:wan
、link:lan
、link:dmz
と複数の監視項目にマッチするときも各項目1行ずつではなく全部を1行にまとめた応答が返ります。
サンプルコードはのServer-side scriptsを見ていただきたいんですが、xymongrepで得られた結果分ループして、それぞれについてXymonクライアントで動作するtestモジュールと同様に
$XYMON
$XYMSRV
status
$MACHINE
.column名 greenかyellowかred additional testを実行する。
というのが処理の流れです。
Xymonサーバで動作するtestモジュールはXymonクライアントで動作するtestモジュールとは違って1プロセスで一般にはxymongrepで得られた複数の監視対象について処理しなければなりません。タイムアウト待ちが発生し得るような監視項目のときは、あまり時間がかかるとpurple判定されてしまうことがあります。リソースに注意しながらfork()して各監視対象について並行処理するとか、試したことはありませんがPrometheusのexporterからの連想で、情報収集は別プロセスで非同期に行っておき、testモジュールは情報収集モジュールと通信するだけにするといった対策があるでしょう。
Xymonサーバで動作するtestモジュールはXymonクライアントと違って任意の場所に置くことができる代わりにtasks.cfgという設定ファイルにエントリを追加しなければいけません。実際にはtasks.cfgに直接記述するのではなくtasks.cfgの中でdirectory命令を使って、例えばtasks.dといったサブディレクトリに設定を置くことができるようになっていることが多いようです。
内容は
[
test名]
ENVFILE
xymonserver.cfgのfull path
CMD
testモジュールのfull path
あと、必要に応じてLOGFILE、INTERVALなどを指定して下さい。tasks.cfgにエントリを追加すれば、特にXymonサーバにHUPを送ったり再起動したりしなくてもtestモジュールが起動されるようになります。Xymonクライアントで動作するtestモジュールと同様に、特にcolumnを追加する設定も必要ありません。誤ったcolumnができてしまったときの対処は独自の監視項目を追加する(Xymonクライアント編)をご覧下さい。