全国 5000 万人の収集癖、メトリクス厨の皆さん、こんばんわ。かっぱです。
- tl;dr
- 参考
- memo
— 引続き、試している環境は…
— execプラグイン用スクリプト実装時の注意点
— execプラグインの設定
— CloudWatchプラグインの設定
— 暫くすると…
— ちなみに… - ということで
tl;dr
前の続き。
collectd はプラグイン機構が備わっており、自作することも出来る。
- https://collectd.org/wiki/index.php/Table_of_Plugins
ただ、コマンドの標準出力の結果をメトリクスとして記録してくれる exec プラグインを利用することで、より簡単にオリジナルデータを collectd に飛ばすことが出来るようだ。
参考
- http://docs.rightscale.com/cm/rs101/create_custom_collectd_plug-ins_for_linux.html
- https://collectd.org/wiki/index.php/Plugin:Exec
- https://collectd.org/wiki/index.php/Plain_text_protocol#PUTVAL
memo
引続き、試している環境は…
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
exec プラグイン用スクリプト実装時の注意点
以下のようなフォーマットで標準出力させることで由なに collectd が集めてくれる。
"PUTVAL #{hostname}/#{PLUGIN_NAME}/#{metric_name} #{unix_time}:#{data}"
また、以下のようにオプションとして interval=#{INTERVAL} も指定可能。
"PUTVAL #{hostname}/#{PLUGIN_NAME}/#{metric_name} interval=#{INTERVAL} #{unix_time}:#{data}"
例えば、ランダムな数値を収集したい場合に Ruby では以下のように書ける。
#!/usr/bin/env ruby PLUGIN_NAME = 'oreno-collectd-plugin' hostname = ENV['COLLECTD_HOSTNAME'] || "localhost" interval = ENV['COLLECTD_INTERVAL'] || 20 def usage puts("#{$0} -h[-i ]") exit end # Main begin $stdout.sync = true while true do start_run = Time.now.to_i random = Random.new data = random.rand(1000..10000) puts("PUTVAL #{hostname}/#{PLUGIN_NAME}/gauge-random-number #{start_run}:#{data}") sleep(interval.to_i) end end
このプログラムを実行すると、以下のように出力される。
$ ./oreno-collectd-plugin.rb PUTVAL localhost/oreno-collectd-plugin/gauge-random-number 1475923480:4336 PUTVAL localhost/oreno-collectd-plugin/gauge-random-number 1475923500:4618 PUTVAL localhost/oreno-collectd-plugin/gauge-random-number 1475923520:8226 PUTVAL localhost/oreno-collectd-plugin/gauge-random-number 1475923540:5802 PUTVAL localhost/oreno-collectd-plugin/gauge-random-number 1475923560:9781
exec プラグインの設定
上記のスクリプトを /usr/lib/collectd/ 以下に置いて、実行権限を付与する。
sudo cp oreno-collectd-plugin.rb /usr/lib/collectd sudo chmod +x oreno-collectd-plugin.rb
そして、/etc/collectd/collectd.conf.d/ に以下のような設定ファイルを置く。設定ファイル名は任意。ただ、拡張子に .conf が必要かもしれないので注意する。(ちゃんと確認出来ていない)
LoadPlugin execExec vagrant "/usr/lib/collectd/oreno-collectd-plugin.rb"
上記の設定が終わったら collectd を再起動する。
sudo service collectd restart
暫くすると以下のように rrd 形式でデータが保存される。
/var/lib/collectd/rrd/vagrant-ubuntu-trusty-64/oreno-collectd-plugin/gauge-random-number.rrd
CloudWatch プラグインの設定
前回同様に CloudWatch に飛ばしたいメトリクス名を以下のように whitelist.conf に追記する。
oreno-collectd-plugin-gauge-random-number
記述フォーマットは多分、以下のようなルールで正規表現も利用出来る。
#{プラグイン名}-#{メトリクス名}
暫くすると…
おお。
ちなみに…
collectd のフロントエンドとして Go で書かれた Facetteでもメトリクスを表示させてみた。
Facette については、改めて書くことにする。
ということで
collectd 面白い。