ども、cloudpack の かっぱ (@inokara) です。
はじめに
Hosted Graphite に fluentd からメトリクスを送ってみたいと思いますので fluentd プラグインを作ってメトリクスを送ってみたい。
参考
Hosted Graphite にメトリクスを送る為には…
基本的には…
- API Key が必要になる
- 従来の Graphite と同様に TCP や UDP を利用する
- Hosted Graphite ではない普通の Graphite は Render API ってのはある
実際に送る…
TCP で送る場合には…
echo "YOUR-API-KEY.conc_users 1.2" | nc carbon.hostedgraphite.com 2003
UDP で送る場合には…
echo "YOUR-API-KEY.conc_users 59" | nc -uw0 carbon.hostedgraphite.com 2003
TCP や UDP はプレフィックスとして API Key を利用する。
尚、HTTP で送る場合には…(Hosted Graphite のみ)
curl https://YOUR-API-KEY@www.hostedgraphite.com/api/v1/sink --data-binary "conc_users 59"
curl
を利用する場合には上記のようにメトリクスを送る。
各種言語で…
様々な言語がサポートされている。
一応、個人的に慣れ親しんだ Ruby 場合には以下のようなパターンがある。
ということで、既に fluent-plugin-graphite があるので参考にさせて頂きつつ fluentd プラグインを作って fluentd から Hosted Graphite にメトリクスを送ってみたい。
fluentd からメトリクスを送る
プラグイン
引き続き、以下を対応予定。
- テスト(メソッド単位のテストが不十分)
-
複数 metric_key の指定(カンマ区切りで並べる感じを想定)(対応した)
プラグインの作り方
以下を参考にさせて頂いた。
- プラグインを書く
- >fluentdのためのプラグインをイチから書く手順(bundler版)
- >bundler + rspecでfluentdプラグインを作るための手順
- >Fluent Plugin 開発講座
個人的に作り方をまとめると…
bundle gem ${プラグイン名}
でひな形を作成(プラグインの命名には注意)- ディレクトリ構成を修正する(
${プラグイン名}/lib/fluent/plugin
にする、version.rb
を削除してgemspec
ファイルに書く等…) - テスト用のディレクトリを作成
- テストを作る
- プラグインを作る
超ざっくりで恐縮だが、1 から 3 までが終われば 4. 5. を繰り返すことになると思う。ホントに見よう見まねで作ったので、プラグイン作成については引き続き勉強していきたい。(改めて纏めたい)また、プラグインを作る(メンテナンス)することで fluentd の基礎的な部分の勉強になると思う。
実際にメトリクスを送る
以下の環境にて試してみる。
# ruby -v ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux-gnu] # fluentd --version fluentd 0.12.2
プラグインをインストール。
sudo gem install fluent-plugin-out_hosted_graphite --no-ri --no-rdoc -V
Hosted Graphite の API キーを取得しておく。ログインしたらトップページに表示されている。
fluentd にプラグインの設定を行う。
type copy type stdout type hosted_graphite api_key cxxxxxxf-4xx4-4xx0-axx5-dxxxxxxxxxx9 metric_key foo.bar protocol udp
とりあえずは type copy
を使って fluentd のログにも出力させるようにしておく。尚、プラグインの設定は以下の通り。
オプション | パラメータ(例) | デフォルト値 / Required | 説明 |
---|---|---|---|
type | hosted_graphite | fluent-plugin-out_hosted_graphite を指定 | |
api_key | cxxxxxxf-4xx4-4xx0-axx5-dxxxxxxxxxx9 | なし / Required | Hosted Graphite の API キーを指定 |
metric_key | foo.bar | なし / Required | Record 内のキーを指定 |
protocol | udp | http / Required | メトリクスを転送する際のプロトコルを指定(HTTP or TCP or UDP) |
以下のように fluentd を起動する。
fluentd -c conf/test.conf -o debug.log &
正常に起動したログを確認する。
(前略) 2015-01-11 00:51:09 +0000 [info]: reading config file path="conf/test.conf" 2015-01-11 00:51:09 +0000 [info]: starting fluentd-0.12.2 2015-01-11 00:51:09 +0000 [info]: gem 'fluent-plugin-out_hosted_graphite' version '0.0.1' 2015-01-11 00:51:09 +0000 [info]: gem 'fluentd' version '0.12.2' 2015-01-11 00:51:09 +0000 [info]: using configuration file:2015-01-11 00:51:09 +0000 [info]: adding match pattern="*.*" type="copy" 2015-01-11 00:51:09 +0000 [info]: adding source type="forward" 2015-01-11 00:51:09 +0000 [info]: listening fluent socket on 0.0.0.0:24224 type copy type stdout type hosted_graphite api_key cxxxxxxf-4xx4-4xx0-axx5-dxxxxxxxxxx9 metric_key foo.bar protocol udp
更にテストで以下のようにメトリクスを送る。
while true do echo "{"foo.bar": $RANDOM, "memo": "test"}" | fluent-cat hosted-graphite.test sleep 10 done
ということで…
fluentd を使って Hosted Graphite にメトリクスを送ってたが Hosted Graphite は簡単に Graphite を扱える上でに Grafana や Tasseo 等も自前に用意することなく利用出来るのが嬉しい。また、Hosted Graphite に用意された Gem を利用して、更に詳しいプラグインの作り方の解説により自分のようなド素人でも思ったよりも簡単に作ることが出来たことに感謝しつつプラグインは引き続きメンテナンスしていきたい。
元記事はこちらです。
「Hosted Graphite を使って 5 分で始める俺の可視化(2)~ fluentd からメトリクスを送る ~」