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に以下のようなグラフが作成されます。
