2013年2月10日日曜日

AIDEで改竄検知した情報をCloudWatchで管理する

スズキです。

下記でAIDEの改竄検知情報をFluentdに持ってこれたので、
AIDEで改竄検知した情報をFluentdでまとめる
手っ取り早くグラフ化やアラート通知(閾値超えたら)するために、CloudWatchで
データを管理したいところです。ということで、"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"、"chenged"、の和
(ベースラインからの「違い」の総数)にして簡略化しておきます。

つまり、上記のログを下記のように調整します。
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}
そして、この変換を実現するために、今度は"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}
設定ファイル全体は下記のようにしています。
<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     parser
        key_name message
        format   /011(?<total>[^ ]*).012.+011(?<added>[^ ]*).012.+011(?<removed>[^ ]*).012.+011(?<changed>[^ ]*).012/
        tag      parsed.syslog
    </store>
</match>
<match parsed.syslog>
    type copy
    <store>
        type file
        path /tmp/parsed.syslog
    </store>
    <store>
        type   map
        tag    "mapped.syslog"
        time   time
        record {"sum" => record["added"].to_i + record["removed"].to_i + record["changed"].to_i}
    </store>
</match>
<match mapped.syslog>
    type copy
    <store>
        type file
        path /tmp/mapped.syslog
    </store>
    <store>
        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>
            metric_name                 All
            value_key                   $['sum']
            unit                        None
            outcast_no_dimension_metric yes
            <dimensions>
                instance_id yes
            </dimensions>
        </metric>
    </store>
</match>

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


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

※ここではテストのため閾値を6にしてますが、本来なら1以上にすべきでしょう。

"fluent-plugin-clooudwatch_ya"、そろそろアップデートしないと...
--------
http://www.szu-lab.com

0 コメント: