fluentdとDataDogでアクセスログをグラフ化

DatadogはMuninとGrowthForecastを合わせたようなモニタリングサービスで、主に『エージェントをインストールしてサーバ情報をグラフ化』と『APIでmetricを送信してグラフ化』をしてくれます。*1

fluentdと相性が良さそうなので、アクセスログをDataDogに投げたりするためのプラグイン(とパッチ)を書きました。

まだ、ちょうあるふぁ版ですが…

利用例

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

f:id:winebarrel:20140208185335p:plain

*1:それ以外にもEC2やGitHubから情報を収集してグラフ化したり、イベントデータを集めたりします