全国 5000 万人の収集癖、メトリクス厨の皆さん、こんばんわ。かっぱです。
tl;dr
前の続き。
collectd はプラグイン機構が備わっており、自作することも出来る。
ただ、コマンドの標準出力の結果をメトリクスとして記録してくれる exec プラグインを利用することで、より簡単にオリジナルデータを collectd に飛ばすことが出来るようだ。
参考
memo
引続き、試している環境は...
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
以下のようなフォーマットで標準出力させることで由なに 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 <host_id> [-i <sampling_interval>]")
exit
end
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
上記のスクリプトを /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 exec
<Plugin exec>
Exec vagrant "/usr/lib/collectd/oreno-collectd-plugin.rb"
</Plugin>
上記の設定が終わったら 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 面白い。