2013年1月13日日曜日

BashのHistoryをFluentdのDataCounterで集計してみた

スズキです。

以前、下記でBashのHistoryをSyslogに出力する方法を紹介しました。
BashのHistoryをSyslogに出力(CentOS6)
実際のログは次のような感じです。
# cat /opt/suz-lab/var/log/syslog/all.log | grep bash
Jan 13 21:15:43 ip-10-200-32-46 -bash: HISTORY: PID=22858 UID=0 less /tmp/tail.syslog.20130113.b4d324ea9e0a8bf03 
Jan 13 21:16:13 ip-10-200-32-46 -bash: HISTORY: PID=22858 UID=0 cat /tmp/tail.syslog.20130113.b4d324ea9e0a8bf03 | grep bash
Jan 13 21:23:37 ip-10-200-32-46 -bash: HISTORY: PID=22858 UID=0 cat /tmp/datacounter.syslog.20130113.b4d324ee14fb0be93 
Jan 13 21:27:48 ip-10-200-32-46 -bash: HISTORY: PID=22858 UID=0 cat /opt/suz-lab/var/log/syslog/all.log

今回は、このログをFluentdの"DataCounterプラグイン"を利用して、単位時間あたり
どれだけのコマンドが実行されたか集計してみました。

SyslogのログをFluentdで"tail"


設定ファイルは下記の通りです。
# cat /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>
</match>

加工されたログは次の通りです。(JSON形式になっています)
# cat /tmp/tail.syslog.20130113.b4d324ea9e0a8bf03 | grep bash
...
2013-01-13T20:27:02+09:00 tail.syslog {"host":"ip-10-200-32-46","ident":"-bash","message":"HISTORY: PID=22858 UID=0 vi td-agent.conf"}
2013-01-13T20:29:38+09:00 tail.syslog {"host":"ip-10-200-32-46","ident":"-bash","message":"HISTORY: PID=22858 UID=0 ls"}
2013-01-13T20:29:53+09:00 tail.syslog {"host":"ip-10-200-32-46","ident":"-bash","message":"HISTORY: PID=22858 UID=0 less td-agent.conf"}
2013-01-13T21:09:04+09:00 tail.syslog {"host":"ip-10-200-32-46","ident":"-bash","message":"HISTORY: PID=22858 UID=0 cat /etc/td-agent/td-agent.conf"}
...
「"ident":"-bash"」のものを集計する形になります。

DataCounterプラグインのインストール


Fluentdが下記の方法でインストールされていることを前提とします。
CentOS6にFluentdをインストール
プラグインは"gem"でインストールします。
# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-datacounter
Fetching: fluent-plugin-datacounter-0.4.0.gem (100%)
Successfully installed fluent-plugin-datacounter-0.4.0
1 gem installed
Installing ri documentation for fluent-plugin-datacounter-0.4.0...
Installing RDoc documentation for fluent-plugin-datacounter-0.4.0...

DataCounterプラグインでBashのHistoryを集計


設定ファイルは下記の通りです。
# cat /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>
</match>

加工されたログは次の通りです。(1分ごとに集計されています)
# cat /tmp/datacounter.syslog.20130113.b4d324ee14fb0be93
...
2013-01-13T21:14:55+09:00 datacounter.syslog {"unmatched_count":8,"unmatched_rate":0.13,"unmatched_percentage":100.0,"history_count":0,"history_rate":0.0,"history_percentage":0.0}
2013-01-13T21:15:55+09:00 datacounter.syslog {"unmatched_count":8,"unmatched_rate":0.13,"unmatched_percentage":88.88888888888889,"history_count":1,"history_rate":0.01,"history_percentage":11.11111111111111}
2013-01-13T21:16:55+09:00 datacounter.syslog {"unmatched_count":11,"unmatched_rate":0.18,"unmatched_percentage":91.66666666666667,"history_count":1,"history_rate":0.01,"history_percentage":8.333333333333334}
2013-01-13T21:17:55+09:00 datacounter.syslog {"unmatched_count":8,"unmatched_rate":0.13,"unmatched_percentage":100.0,"history_count":0,"history_rate":0.0,"history_percentage":0.0}
...
無事、BashのHistoryが集計されるようになりました。

そして、このデータをCloudWatchに...
--------
http://www.suz-lab.com

0 コメント: