BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Amazon CloudWatchがJSONログとAWS CloudTrailとの統合をサポート

Amazon CloudWatchがJSONログとAWS CloudTrailとの統合をサポート

原文(投稿日:2015/02/12)へのリンク

AWS CloudTrail Processing Library(CPL)のリリースから間を置かずに,Amazon Web Service(AWS)は,さらにAWS CloudTrailAmazon CloudWatch Logs統合した。これによって"CloudWatchから,あるいはCloudTrailが捕捉した特定のAPIアクティビティをトリガとした",警告と通知の発行が可能になる。さらに,これまでは暗黙的な機能であったJSON形式のログ監視のサポートも,公式にリリースされた

以前にも記事で詳しく取り上げたAWS CloudTrailは,セキュリティ分析や変更の追跡,コンプライアンス支援,オペレーションのトラブルシュートなどのログ記録と監査のために,特定のAWSアカウントで実行されたAPIコールをすべて記録するツールだ。また,Amazon CloudWatchは,AWSリソースの計数値を記録監視し,警告を発生することにより,"リソースの使用状況やアプリケーションのパフォーマンス,運用状態のシステム全般にわたる可視性"を実現する。さらにログを監視し,アプリケーションログやオペレーティングシステムのログ,カスタムログのストレージも提供する。

CloudTrailとCloudWatch Logsの統合

以前の記事でも取り上げたように,CloudWatch Logsでは,"特定のフレーズや値,パターンの監視"によって,検索インターフェースではなく警告機能を重視している。CloudTrailとの統合においても,この点は変わらない。Amazon Web ServiceのチーフエバンジェリストであるJeff Barr氏は,一般的なユースケースのひとつとして,CloudTailのログイベントをサインイン試行の失敗パターンと継続的に比較し,"'AccessDenied'あるいは'UnauthorizedOperation'の発生毎に計数値(カウント)を1増加させる"メトリックフィルタを作成した例について解説している。

CloudWatchの一般的な使用法は,この計測値に対するカスタムアラームを定義して,"一定期間にわたって指定されたしきい値と計測値との対比を元に,1つ以上のアクションを実行する",というものだ。ここで可能なアクションとしては,Amazon SNS通知,オートスケーリングの実行,および停止や中断,あるいは(最近可能になった)インスタンス回復などのEC2アクションがある。SNS通知とは,先述の例であれば1分間に1つ以上の認証エラーの発生を示す警告があった場合に,SNSトピックの参照者に対して,順次Eメールを送信するなどのメッセージを起動するものだ。

CloudWatch LogsのJSONサポート

計数値フィルタと,スペース区切りのログイベントからの抽出値を基本とした当初機能だけでも,ApacheのHTTPログから転送バイト数を取り出す,といった有用なユースケースに対応することは可能である。さらにCloudTrailは,他のAWSやサードパーティのログイベントで採用の増えているJSON形式にも対応する。これに対応するためCloudWatch Logsでも,JSONベースの計数値フィルタが利用できるようになった。

JSON計数値フィルタパターンの構文は簡単だ。'='や'!='などの文字列比較,'*'ワイルドカード文字による任意テキストとの前方および後方一致,'<, >, >=, <=, =, !='による正確な数値比較,OR'||'やAND'&&'を使用した複合条件をサポートする。いくつか例を挙げると,

  • '{ $.eventType = "UpdateTrail" }' – "Update Trail"というイベントタイプによるフィルタ
  • '{ $.sourceIpAdress != 10.42.* }' – 10.24プレフィックスのサブネット外にあるIPアドレスを選択するフィルタ
  • '{ $.objectList[1].id = 2 }' – objectListの2番目のエントリの,idというプロパティ値が2の項目を選択するフィルタ
  • '{ $.latency >= 42 }' – latencyの値が42以上の項目を選択するフィルタ
  • '{ ($.user.id = 2 && $.users[0].email = "nonmatch") || $.actions[2] = "GET" }' – 条件式によるフィルタ

条件に一致するログイベントのカウントだけでも多くのユースケースがカバーできるが,最も有効な機能はJSONのログからの計数値の抽出だろう。例えば,"{ $latency=* }"のような単純な計数フィルタは,すべてのログイベントのlatencyという値にマッチする。そこからJSONセレクタ"$.latency"を参照することで,CloudWatchにデータをパブリッシュすることが可能になる。次のJSONログイベントは,CloudWatchに42という計測値を提供する。

{
"latency": 42,
"requestType": "GET"
}

 

CloudTrailのユーザガイドでは,AWS Management ConsoleAWS CLIを使用してCloudWatch Logsの監視機能を統合する方法の説明と,その例としてコンソールのログイン失敗ネットワークアクセス制御リストの変更,あるいはセキュリティグループ構成の変更のCloudWatch警告を生成する方法が挙げられている。サポートはAmazon CloudWatchおよびAWS CloudTrail各フォーラムを通じて提供される。インテグレーション自体は無償だが,CloudWatch Logs,CloudWatch警告,そしてAmazon SNS通知には,各サービスの標準に従った使用量ベースの費用が発生する。

この記事に星をつける

おすすめ度
スタイル

BT