Nagiosを使っていると、その瞬間の絶対値だけじゃなく、差分や変化量を取得してその数値を監視したくなりますよね。ならないとしたら、今すぐこの記事を読むのをやめて病院に行って下さい。
Nagiosで変化量を測定するには、プラグインの中で前の数値をどこかファイルにでも保存し、比較するという手があります。このcheck_bandwidthはその方法を取っているようです。
ただ、これだと汎用性があまりないので、監視対象サーバ側に定期的に指定したコマンドを実行して、その数値を外部から取得できるサーバを書いてみました。
CPAN: https://metacpan.org/release/App-derived *出てくるまで時間がかかるようです
github: https://github.com/kazeburo/App-derived
使い方
インストールはcpanmで
$ cpanm -n App::derived
コマンドとキーを書いたファイルを用意します
slowlog: mysql -NB -e 'show global status like "Slow_queries"'
select: mysql -NB -e 'show global status like "Com_select"'
複数のコマンドを指定することができます。
derivedを起動します
$ derived -i 10 --port 12306 Cmd
-i がコマンドを実行する間隔、portがmemcachedプロトコルなサーバが使うポート、最後に上で書いたコマンドファイルを指定します
あとは memcached のクライアントでアクセスします。perlだとCache::Memcached::Fastでしょうか。
my $memcached = Cache::Memcached::Fast->new({
servers => [qw/localhost:12306/],
});
say $memcached-server_versions->{"localhost:12306"};
=> 0.01
say $memcached->get('slowlog'); #秒間の数字だけ
=> 0.2
say $memcached->get('slowlog:full'); #JSON形式
=> {"persec":0.2,"exit_code":0,"last_update":1360224680,"status":"OK","raw":"Slow_queries\t5990"}
10秒間ごとにmysqlコマンドを実行し、Slow_queriesの値の差を10で割った数がでてきます。
あとは check_memcached_num.pl (仮称) というNagiosプラグインつくって監視すれば汎用性も高いし、便利なはず。こっちはのちほど