thold プラグインのアップデート失敗と RPN Expression


cacti の thold プラグインを 0.4.3 → 0.4.9 にバージョンアップしたら、閾値に計算式が使えるようになっていたので使ってみました。

作業時の環境

OS CentOS 5 (2.6.18-308.8.1.el5)
php 5.3.12
mysql 5.0.95
cacti 0.8.7g → 0.8.8a
thold 0.4.3 → 0.4.9
settings 0.5 → 0.71

cacti は rpmforge から yum で入れているのでインストール先は「/var/www/cacti」です。

バージョンアップ(0.8.7g で失敗)

まず最初に thold のバージョンアップですが、ダウンロードしてきたアーカイブの中に「thold/extras/upgrade.php」というものがあったので、これでサクッとできそうだと思い、試してみましたが・・・0.8.7g だと Notice やら Warning が何個か出ました。

# php /var/www/cacti/plugins/thold/extras/upgrade.php
Faking Low Thold Version
Running Thold Upgrade

Notice: Undefined index: keys in /var/www/cacti/lib/plugins.php on line 174

Warning: Invalid argument supplied for foreach() in /var/www/cacti/lib/plugins.php on line 174

Notice: Undefined index: keys in /var/www/cacti/lib/plugins.php on line 174

Warning: Invalid argument supplied for foreach() in /var/www/cacti/lib/plugins.php on line 174
Upgrade Complete

バージョンアップ(0.8.8a で失敗、諦めてプラグインはクリーンインストール

まともにアップデート出来た気がしないので、本体を 0.8.8a にアップデートしてからプラグインのアップデートを行うことにします。本体のアップデートは この へん が参考になりました。

本体が 0.8.8a になったら、再度 thold のバージョンアップを試みます。まずは thold-0.4.9 をダウンロードしてプラグインディレクトリに上書きします(一緒に settings もアップデートしてます)。

# wget http://docs.cacti.net/_media/plugin:thold-v0.4.9-3.tgz
# wget http://docs.cacti.net/_media/plugin:settings-v0.71-1.tgz

# tar xzvf ./plugin:thold-v0.4.9-3.tgz
# tar xzvf ./plugin:settings-v0.71-1.tgz
※ "plugin:thold-v0.4.9-3.tgz" だと "plugin:" がリモートホストと解釈されるので "./" を付与

# rm -fR  /var/www/cacti/plugins/thold/
# rm -fR  /var/www/cacti/plugins/settings/

# mv thold/    /var/www/cacti/plugins/
# mv settings/ /var/www/cacti/plugins/

次に「thold/extras/upgrade.php」を実行します・・・エラー無く終わりましたが、cacti のログにエラーが出力されていました。

# php /var/www/cacti/plugins/thold/extras/upgrade.php
Faking Low Thold Version
Running Thold Upgrade
Upgrade Complete

# cat /var/www/cacti/log/cacti.log
06/07/2012 09:26:31 PM - CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1064', SQL:"ALTER TABLE thold_data REMOVE COLUMN bl_enabled'
06/07/2012 09:26:31 PM - CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1064', SQL:"ALTER TABLE thold_template REMOVE COLUMN bl_enabled'

「REMOVE」→「DROP」の間違いのようなので、DBを直接手修正しました・・・が、まともに動作している気配がありません。バージョンアップ前の thold の設定はそのまま残っていますが、新しい設定を追加しても反映されません。

そこで、クリーンインストールした環境とアップデートした環境のDB定義を比べてみると・・・thold_data や thold_template に expression 列が存在しないなどの差異が幾つかありました。

upgrade.php の中身を見てみると、アップデート処理の中に expression 列を追加している記述がありません(インストール処理の中にはあるのですが・・・)。これは upgrade.php がおかしいか、あるいは、私の手順が根本的に何か間違っているかのどちらかだと思います。

仕方ないので、cacti 本体のアップデート前に thold をアンインストールし、cacti 本体のアップデート後に thold の最新版をインストールする手順にしました。thold の設定が全て消えてしまうので再設定が凄くめんどくさいですが・・・

RPN Expression

なんやかんやでバージョンはあがったので、早速計算式を試してみます。
普通に thold の設定を追加した後、「Data Type」の選択候補で「RPN Expression」が追加されています。

f:id:ngyuki:20120607213713p:image:w640

計算式はカンマ区切りで逆ポーランド記法で記述する必要があります。例えば「10 - 2 * 3」であれば「10,2,3,*,-」などと入力します。

ただの四則演算以外の演算子や、同じデータソースの項目の値を参照したり出来ます。
画像の例では「hdd_used」と「hdd_free」を使用してディスクの使用率に対してパーセンテージで閾値を設定出来るようにしています。

ただし、参照可能な項目はあくまでも「同じデータソース(rrdファイル)の項目」です。そのため、CPU使用率の Nice/System/User の合計値に閾値を設けることは出来ません。なぜなら、CPU使用率の Nice/System/User はそれぞれ別のデータソースになっているためです。同じ理由で、メモリ使用量の Buffers/Cache/Free の合計値に閾値を設けることも出来ません。


この辺り非常に不便だと思います・・・cacti インストール時のデフォルトで定義されているデータテンプレートのうち、thold の閾値監視が有効に使えるものがどれぐらいあるのでしょうか・・・

SNMP系だと、ディスク使用率、ロードアベレージトラフィック、辺りなら有効に使えそうですが、CPU使用率、メモリ使用量では余り意味のある閾値監視が出来なさそうです。

そのため、私は thold プラグインでの監視のためだけにメモリ使用量とCPU使用率の各種データを1つのデータソースに保存するようにしたスクリプトを作成して、データテンプレート&グラフテンプレートを自前で作成して使っていました。

計算式が使えるようになったと知って、複数のデータソースの値を組み合わせられるようになるのか! と思っていたのですが・・・残念です。


あ、それと計算式は最大 70 文字までしか入力出来ないようです。それ以上入力すると暗黙のうちに 70 文字に千切られます(MySQLのステキ仕様)。

thold のソースを眺めてたら割と簡単にデータソースをまたがった計算式に対応させられそう? というか本当は同じグラフに関連するデータソースは参照出来るようになるはずが不具合で参照できなくなっているのか?