独自の監視項目を追加する(グラフ編)で触れたxymonserver.cfgのTEST2RRDやgraphs.cfgに元々書かれている内容を振り返ってみると、XYMONサーバには、説明が見当たらないもののNCV以外のRRDSERVEICEがいろいろ組み込まれていそうだということがわかります。
全部を精査したわけではありませんが、どうやらソースツリーのxymond/rrd/以下にあるのがRRDSERVICEのようです。
例えばdo_ncv.cを見ると、独自の監視項目を追加する(グラフ編)で触れたフォーマット以外に
<!-- ncv_skip -->
<!-- ncv_skipstart -->
<!-- ncv_skipend -->
<!-- ncv_ignore -->
<!-- ncv_end -->
の5つの(/* expandable for future use */というコメントもついていますが…)ディレクティブを解釈するらしいことがわかります。
temperatureには泣かされました。
mbmonの出力を取り込んでマザーボードの温度を監視するtestモジュールを作って使っています。思えば、これを開発したときに初めてxymond/rrd/以下を見たような気がします。
Xymon 4.3.28に含まれているrev.7248のdo_temperature.cでは、行頭に'('
と')'
で囲んだコメントと&green、&yellow、&red、&clearがあれば読み飛ばして
<データ系列名><空白文字><整数の摂氏温度><空白文字><整数の華氏温度>
というフォーマットを解釈していて、testモジュールもこの仕様に合わせて作ってありました。
ところがXymonを4.3.28から4.3.29にアップグレードしたところ、xymond_rrdが起動される度、つまり5分に1回異常終了するようになってしまいました。幸いcore dumpが発見できたのでgdbで調べてみたところ、原因箇所はdo_temperature_rrd()という関数の中であることがわかり、さらに調べると、Xymon 4.3.29に含まれているrev.8050のdo_temperature.cでは解釈するフォーマットが&green、&yellow、&red、&clearがあれば読み飛ばすところまでは同じなのですが、その後が
<データ系列名>TAB<整数の摂氏温度>
に変更になっていることがわかりました。ところがtestモジュールは整形のために空白にTABではなくスペースを使っていたので、do_temperature_rrd()が温度の箇所を発見できず異常終了していました。こっそりエラー処理されて値が取り込まれていないのに気づかないよりはマシだったんですが、そこは怪我の功名というやつで…。この顛末をDiscussionのページのタイトルバーにある紙飛行機のアイコン(Send Email to Create a New Topic)からメールしてみたんですがナシのつぶてでした。
mailqには特に恨みもないのでサラッといきますが、一般的なmailqコマンドが出力する
<整数><空白文字があってもよい>requests
の他に
Mail queue out:
<空白文字があってもよい>非負整数
Mail queue in:
<空白文字があってもよい>非負整数
というフォーマットも解釈します。
必要に迫られて調べたのは、この2つだけなので、他のRRDSERVICEについてはわかりません。しかし、P.*な言語しかわからない、という方にはちょいと敷居が高そうですが、NCV、temperature、mailqの3つを眺めた印象では、Cのコードが多少読めて、頭から全部律儀に読むんではなくツボにアタリをつけて拾い読みできて、ライブラリ関数のマニュアルが索けるスキルがおありでしたら、どういうフォーマットを解釈してくれるのかは割と簡単にわかりそうなので、組み込みのRRDSERVICEの中に目ぼしそうな物があったら、調べて活用してみてはいかがでしょうか?