2013年1月14日月曜日

FluentdからCloudWatchのカスタムメトリクスにデータを登録してみた

スズキです。
こちらが最新です!(本記事は少し古い...)
FluentdからCloudWatchのカスタムメトリクスにデータを登録してみた(UPDATE!)
今回は下記で集計したデータをCloudWatchのカスタムメトリクスに登録して、
BashのHistoryをFluentdのDataCounterで集計してみた
次のようなAWSコンソールでのグラフ表示などの機能が利用できるようにしてみました。


CloudWatchへのデータ登録は下記のFluentdのプラグインを作成して行なっています。

/etc/td-agent/plugin/out_cloudwatch.rb
module Fluent
    require 'aws-sdk'
    class CloudWatchOutput < BufferedOutput

        Fluent::Plugin.register_output('cloudwatch', self)
        include SetTagKeyMixin
        config_set_default :include_tag_key, false
        include SetTimeKeyMixin
        config_set_default :include_time_key, true

        config_param :aws_key_id,           :string, :default => nil
        config_param :aws_sec_key,          :string, :default => nil
        config_param :cloud_watch_endpoint, :string, :default => 'monitoring.ap-northeast-1.amazonaws.com'
        config_param :namespace,            :string
        config_param :metric_name,          :string
        config_param :metric_data_key,      :string
        config_param :metric_unit,          :string
        
        def configure(conf)
            super
        end

        def start
            super
            AWS.config(
                :access_key_id        => @aws_key_id,
                :secret_access_key    => @aws_sec_key,
                :cloud_watch_endpoint => @cloud_watch_endpoint
            )
            @cloudwatch = AWS::CloudWatch.new
        end

        def shutdown
            super
        end

        def format(tag, time, record)
            record.to_msgpack
        end
        
        def write(chunk)
            metric_data = []
            chunk.msgpack_each do |record|
                metric_data << {
                    :metric_name => @metric_name,
                    :timestamp   => record['time'],
                    :value       => record[@metric_data_key],
                    :unit        => @metric_unit
                }
            end
            begin
                @cloudwatch.put_metric_data(
                    :namespace   => @namespace,
                    :metric_data => metric_data
                )
            rescue => e
                $log.error(e)
            end
        end

    end
end

設定ファイル(/etc/td-agent/td-agent.conf)は次のとおりです。
<source>
    type     tail
    format   syslog
    path     /opt/suz-lab/var/log/syslog/all.log
    pos_file /opt/suz-lab/var/lib/td-agent/pos/tail.syslog.pos
    tag      tail.syslog
</source>
<match tail.syslog>
    type copy
    <store>
        type file
        path /tmp/tail.syslog
    </store>
    <store>
        type      datacounter
        unit      minute
        aggregate all
        count_key ident
        pattern1  history ^-bash$
        tag       datacounter.syslog
    </store>
</match>
<match datacounter.syslog>
    type copy
    <store>
        type file
        path /tmp/datacounter.syslog
    </store>
    <store>
        type            cloudwatch
        namespace       SUZ-LAB/TEST
        metric_name     HistoryCount
        metric_data_key history_count
        metric_unit     Count
    </store>
</match>
まだ、"dimensions"や"statistic_values"は未対応です。。。

最終的には"gem"でインストールできるようにしたい。。。
--------
http://www.suz-lab.com

0 コメント: