VPC FLow Logsを可視化したい
検証環境のVPC Flow Logsを収集、調査、分析するためにElasticSearch Serviceを利用していましたが、利用料をケチるためにt2.microで動かしていたため動作が遅く困っていました。オンプレミスで十分なリソースを積んだElasticSearchを立ててもよかったのですが、目的はログを分析することであって、ElasticSearchを運用することではありません。
そこで、VPC FLow Logsに対応しており、無料プランのあるログ分析SaaSを調べたところ、sumologicが見つかりました。Re:Invent2015の会場で相撲を取っていたあのsumologicです。
参考:Sumo wrestling, presented by SumoLogic @ AWS re:Invent2015 Game 3
トライアル期間を利用して、さらっと触ってみた結果をメモしておきます。
なお、現時点でのプランが30日トライアルのため、sumologicの全機能が利用できる状況です。30日後にフリープランになった場合、このエントリーに記載したことの何ができなくなるのか少々不安です。30日後に確認します。(参考:Pricing)
SumoLogicにログを転送する仕組み
sumologicにログを転送する方法は2つあります。
方法 | 詳細 |
---|---|
installed Collector | 自前のサーバ上にインストールするコレクター。サーバにエージェントが常駐する |
Hosted Collector | sumologic上にホストされているコレクター。サーバにエージェントをインストールする必要なし |
詳細はWhat’s the difference between Collector types?を参照ください。
Hosted CollectorはデフォルトでAWSの以下サービスに対応しています。残念なことに、現時点でVPC Flow Logsには未対応です。(VPC Flow LogsをS3に吐き出せば、そのログを取得できるかもしれません)
- S3
- ELB
- CloudFront
- CloudTrail
- Config
- S3 Audit
sumologicにVPC Flow Logsを送る方法
公式のヘルプ(Collecting Amazon VPC Flow Logs)に従い、installed Collectorを利用したログ転送を試したのですが、以下のエラーが出てしまい上手く行きませんでした。
2016-01-22 17:39:29,994 10946 [pool-2-thread-4] INFO com.amazonaws.internal.DefaultServiceEndpointBuilder - {logs, ap-southeast-1} was not found in region metadata, trying to construct an endpoint using the standard pattern for this region: 'logs.ap-southeast-1.amazonaws.com'.
そこで今回は、sumologicのgithubリポジトリで公開されているLambdaファンクション(SumoLogic/sumologic-aws-lambda)を利用することにしました。このLambdaファンクションは、VPC Flow Logsに特化したものではなく、sumologicのAPIを利用してCloudWatch Logsをsumologicに送るものです。そのため、VPC Flow Logs以外でも利用可能です。
なお、sumologicのAPI(Collector Management API)は、PROFESSIONALプラン以上で利用可能です。そのため、FREEプランでは利用できません。。。
sumologicにログを送る
Hosted Collectorを作成します。
作成したHosted Collectorに、HTTPSでデータを投入できるAPIエンドポイントを追加します。
作成したエンドポイントの情報を元にSumoLogic/sumologic-aws-lambdaの内容を修正して、Lambdaファンクションを作ります。
最後に、作成したLambdaファンクションをVPC Flow LogsのSubscriptionに追加します。
ログを可視化する
sumologicには標準でVPC Flow Logsを可視化するAppsが用意されています。とりあえずこれを利用します。FREEプランになっても使えるかは要確認です。
Appには複数のダッシュボードとクエリが定義されています。とりあえずActivityなるダッシュボードを見てみます。
超カッコいい。
ログを検索する
独自のクエリ言語を利用して、ログを検索することができます。
取り込んだVPC Flow Logsを送信元IPアドレスで限定して、送信元IPアドレスと宛先IPアドレスで分類して転送バイトを合計、さらに合計値でソートしてみます。アウト方向の転送量が多い通信を特定するクエリをイメージしています。
_sourceCategory=xxxx_vpcflowlogs message
| json "message","logStream","logGroup"
| parse field=message "* * * * * * * * * * * * * *" as version,accountID,interfaceID,src_ip,dest_ip,src_port,dest_port,Protocol,Packets,bytes,StartSample,EndSample,Action,status
| where src_ip = "172.20.0.10"
| sum(bytes) group by src_ip,dest_ip
| sort by _sum
クエリの結果が、下の方に表示されています。
結果をCSVでダウンロードすることもできます。
結果をグラフにすることもできます。
さらに結果をダッシュボードに追加することもできます。
雑な所感
有料のSaaSだけあってかなり使いやすいです。また、Hosted Collectorを利用することで、サーバレスでAWSの各種ログを収集・分析することができます。今後、AWSのログを保存・分析するための基盤のお仕事があった場合、検討候補にしたいと思います。