DatadogはMuninとGrowthForecastを合わせたようなモニタリングサービスで、主に『エージェントをインストールしてサーバ情報をグラフ化』と『APIでmetricを送信してグラフ化』をしてくれます。*1
fluentdと相性が良さそうなので、アクセスログをDataDogに投げたりするためのプラグイン(とパッチ)を書きました。
- fluent-plugin-datadog
- Pull Request
- 修正版gem
- ※2/22 17:19注) fluent-plugin-ddをリリースしました
- fluent-plugin-unit-time-filter
- 参考: http://so-wh.at/entry/2014/02/08/fluent-plugin-unit-time-filter
- ※2/09 20:45注) 0.1.0をリリースしました
- ※2/17 14:26注) fluent-plugin-time-sliced-filterというものも作りました
まだ、ちょうあるふぁ版ですが…
利用例
Apacheからのアクセスログがfluentdに流れてくる…と仮定して、それをDataDogに流してみます。
ダミー入力
while true; do # {"status":200,"time":177} ruby -rjson -e 'puts({status:200, time:rand(100)+100}.to_json)' | fluent-cat datadog.data done
fluentdの設定
<source> type forward </source> <match datadog.**> type unit_time_filter filter_path /Users/sugawara/work/fluent/datadog_filter.rb #unit_sec 1 #prefix filtered </match> <match filtered.**> type copy <store> type datadog dd_api_key ... </store> <store> type stdout </store> </match>
フィルタ(datadog_filter.rb)
require 'simple_stats' # https://github.com/brianhempel/simple_stats proc {|rs| records = rs.map {|i| i[2] } time_avg = records.map {|i| i['time'] }.mean [ # 1sあたりのリクエスト数 {'metric' => 'apache.reqs', 'value' => rs.count }, # 1sあたりの平均応答時間 {'metric' => 'apache.time_avg', 'value' => time_avg} ] }
結果
DataDogに以下のようなグラフが作成されます。