以前紹介した記事でAIDEで改竄検知した情報をFluentdでまとめることができましたが、
グラフ化やアラート通知(閾値超え)を素早く行うため、CloudWatchでデータを管理したいと考えました。
そこで以下のツールを利用して実現してみます。

suz-lab.github : fluent-plugin-clooudwatch_ya

インストール等は、以前紹介した「FluentdのCloudWatchプラグイン(fluent-plugin-cloudwatch_ya)を
RubyGems.orgに公開してみた
」を参照下さい。

冒頭で紹介した記事ではAIDEでの改竄検知情報を下記の形式ログへと調整しました。

2013-02-09T22:41:46+09:00       parsed.syslog   {"total":"384","added":"2","removed":"2","changed":"3"}
2013-02-09T22:42:41+09:00 parsed.syslog {"total":"384","added":"2","removed":"2","changed":"3"}

CloudWatchに情報を登録するのは大変なので、added、removed、changedの和(ベースラインからの
「違い」の総数)にして簡略化しておきます。

つまり、上記のログを下記のように調整します。

2013-02-10T02:40:01+09:00       mapped.syslog   {"sum":7}
2013-02-10T02:50:01+09:00 mapped.syslog {"sum":5}
2013-02-10T02:51:01+09:00 mapped.syslog {"sum":9}

そして、この変換を実現するため、以下pluginを利用します。

tomity / fluent-plugin-map : fluent-plugin-map

インストールは、以下のように実施します。

# /usr/lib64/fluent/ruby/bin/gem install fluent-plugin-map
...

そして次のような設定で、上記の変換が実現できます。

type   map
tag "mapped.syslog"
time time
record {"sum" => record["added"].to_i + record["removed"].to_i + record["changed"].to_i}

設定ファイル全体は下記のようにしています。


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


type copy

type file
path /tmp/tail.syslog


type parser
key_name message
format /011(?[^ ]*).012.+011(?[^ ]*).012.+011(?[^ ]*).012.+011(?[^ ]*).012/
tag parsed.syslog



type copy

type file
path /tmp/parsed.syslog


type map
tag "mapped.syslog"
time time
record {"sum" => record["added"].to_i + record["removed"].to_i + record["changed"].to_i}



type copy

type file
path /tmp/mapped.syslog


type cloudwatch_ya
buffer_type file
buffer_path /opt/suz-lab/var/lib/td-agent/buf/cloudwatch.syslog
flush_interval 1m
cloud_watch_endpoint monitoring.ap-northeast-1.amazonaws.com
namespace SUZ-LAB/AIDE

metric_name All
value_key $['sum']
unit None
outcast_no_dimension_metric yes

instance_id yes



上記の設定でfluentd(td-agent)を起動し、aide –updateを毎分動かすと、次のようにCloudWatchに
1分毎にデータが登録され、グラフとしても確認できることがわかります。

さらに、CloudWatchの機能としてアラームを設定することができるため、(ベースラインとの違いの数の)閾値を
超えた場合、SNSでメール通知することも可能です。

※ここではテストのため閾値を6にしていますが、本来ならば1以上にすることを推奨します。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら