share facebook facebook2 twitter menu hatena pocket slack

2013.02.14 THU

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

鈴木 宏康

WRITTEN BY鈴木 宏康

以前紹介した記事で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)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。