以前、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のfluent-plugin-datacounter_DataCounterプラグインを利用して、このログから単位時間あたり、
どれだけのコマンドが実行されたか集計してみました。
○SyslogのログをFluentdでtail
設定ファイルは下記の通りです。
# cat /etc/td-agent/td-agent.conf
type copy
type file
path /tmp/tail.syslog
加工されたログは次の通りです。(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
type copy
type file
path /tmp/tail.syslog
type datacounter
unit minute
aggregate all
count_key ident
pattern1 history ^-bash$
tag datacounter.syslog
type copy
type file
path /tmp/datacounter.syslog
加工されたログは次の通りです。(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}
...