share facebook facebook2 twitter menu hatena pocket slack

2016.10.24 MON

collectd の exec プラグインで俺のデータを CloudWatch に飛ばす

川原 洋平

WRITTEN BY川原 洋平

全国 5000 万人の収集癖、メトリクス厨の皆さん、こんばんわ。かっぱです。

tl;dr

の続き。
collectd はプラグイン機構が備わっており、自作することも出来る。

参考

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 <host_id> [-i <sampling_interval>]")
  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 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

記述フォーマットは多分、以下のようなルールで正規表現も利用出来る。

#{プラグイン名}-#{メトリクス名}

暫くすると…

20161008200541

おお。

ちなみに…

collectd のフロントエンドとして Go で書かれた Facetteでもメトリクスを表示させてみた。

20161008200752

Facette については、改めて書くことにする。

ということで

collectd 面白い。

元記事はこちら

collectd の exec プラグインで俺のデータを CloudWatch に飛ばす