どうも、かっぱ@inokara)です。

はじめに

EC2 につけたタグ情報を fluentd でレコードやタグで利用できないかなって思っていたら同僚に教えてもらったので使い方のメモです。


fluent-plugin-ec2-metadata とは?

fluentd のレコードやタグにに EC2 のメタデータを含めることが出来る fluentd のプラグインです。


インストール

Amazon Linux にインストールしました。

/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-ec2-metadata --no-ri --no-rdoc -V

設定

fluent-plugin-dstat で収集したメトリクスデータのタグにインスタンスのタグを含める場合に以下のように設定を行いました。

<source>
  type dstat
  tag dstat
  option -d -lcm --tcp
  delay 3
</source>

<match dstat>
  type ec2_metadata

  aws_key_id AKxxxxxxxxxxxxxxxxxxxxxxxxxx
  aws_sec_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  output_tag dstat.${instance_id}.${tagset_name}
  <record>
    tag           ${tagset_name}
    instance_id   ${instance_id}
  </record>
</match>

<match dstat.*.*>
  type forest
  subtype copy
  <template>
    <store>
      type map
      tag "dstat.${hostname}.${tag_parts[2]}.cpu"
      time time
      record record['dstat']['total cpu usage']
    </store>
  </template>
</match>

(中略)

<match dstat.**>
  type forward
  buffer_type file
  buffer_path /tmp/fluent.dstat.buffer
  retry_wait 30s
  retry_limit 5
  flush_at_shutdown true
  <server>
    host 127.0.0.1
    port 24224
  </server>
</match>

td-agent を再起動すると以下のようなログが記録されます。

2014-09-25 05:44:15 +0000 [info]: out_forest plants new output: copy for tag 'dstat.i-xxxxxxx.fluent-graphite'

尚、IAM で EC2 Read Only Access 権限のみを付与したユーザーで作成した Credential 情報で動作することを確認いたしました。
fluent-plugin-ec2-metadata の導入: IAM ユーザの情報で動作することが確認できました


暫くすると…

試しにファイルに出力した場合には

以下のようにレコード内に instance_idtag が含まれています。(type file で書き出したレコードを jq で見やすくしました)

{
  "instance_id": "i-xxxxxxxx",
  "tag": "fluent-graphite",
  "dstat": {
    "tcp sockets": {
      "clo": "0.0",
      "tim": "1.0",
      "syn": "0.0",
      "act": "33.0",
      "lis": "10.0"
    },
    "memory usage": {
      "free": "250347520.0",
      "cach": "105418752.0",
      "buff": "63483904.0",
      "used": "625778688.0"
    },
    "total cpu usage": {
      "siq": "0.0",
      "hiq": "0.331",
      "wai": "0.0",
      "idl": "96.026",
      "sys": "0.331",
      "usr": "3.311"
    },
    "load avg": {
      "15m": "0.050",
      "5m": "0.030",
      "1m": "0.010"
    },
    "dsk/total": {
      "writ": "10922.667",
      "read": "0.0"
    }
  },
  "hostname": "ip-xxx-xx-xx-xxx"
}

Graphite では…

以下のように表示されました。
fluent-plugin-ec2-metadata の導入: Graphiteでの表示


最後に

インスタンスの増減が頻繁な環境で手軽にリソース監視してはみたけど、グラフとインスタンスの関連付けに困った場合には使いたいですな。

元記事はこちらです。
fluent-plugin-ec2-metadata の使い方