CloudWatchLogsのログをFirehose経由でS3に出力してみた

CloudwatchLogsのサブスクリプションフィルタを利用し、Kinesis Data Firehoseを連携、 CloudWatch Logs(Vended Logs) に登録されたVPCフローログのニアリアルタイムなS3へのログ出力を試してみました。
2018.07.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

Amazon CloudWatch Logs (Vended Logs)はサブスクリプションフィルタを利用して、 Lambda、Kinesis Stream、Kinesis Data Firehose、Amazon Elasticsearch Serviceと連携する事が可能です。(2018年7月現在)

CloudWatch Logs Subscriptionsを利用したZabbixへのログ転送

今回、サブスクリプションフィルタの連携先としてKinesis Data Firehoseを指定し、 Vended Logs(VPCフローログ)のS3への出力を試す機会がありましたので紹介させて頂きます。

設定

LambdaとElasticsearch以外のサブスクリプションフィルタは、AWS CLIなどを利用して設定します。

例 3: Amazon Kinesis Data Firehose のサブスクリプションフィルタ

今回の検証環境は、以下のCloudFormationテンプレートを利用して設定を行いました。

CloudFormation

  • 検証に利用したCloudFormationテンプレートです。
  • CloudWatchのLogGroup、SubscriptionFilter、Firehoseのストリーム、S3バケットを設置します。

cfn-cw_logs-to-firehose.yaml

VPCフローログ設定

  • CloudFormationで作成されたLogGroupを出力先とするVPCフローログ設定を行いました。

【新機能】VPC Flow LogsでVPC内のIPトラフィックを監視することができるようになりました!

確認

  • Firehoseの出力先からファイルをダウンロード、GZIP圧縮を展開しJSON形式で保存されたログを参照する事ができました。
cd /tmp
aws s3 cp s3://<S3バケット名>/firehose/cw_logs_firehose/2018/07/15/05/aaa-Step3deliverystream-bbbbbb /tmp/
cat aaa-Step3deliverystream-bbbbbb | gzip -d| jq .

出力例

  • VPCフローログ出力例
{
  "messageType": "DATA_MESSAGE",
  "owner": "00000000000",
  "logGroup": "/cw_logs/aaa",
  "logStream": "eni-xxxxxxxx-all",
  "subscriptionFilters": [
    "aaa-Step2SubscriptionFilter-ccc"
  ],
  "logEvents": [
    {
      "id": "34156565544237522570852594165671859978202113352719663104",
      "timestamp": 1531633371000,
      "message": "2 00000000000 eni-xxxxxxxx 192.168.0.XX 54.239.25.XX 41314 443 6 1 40 1531633371 1531633405 ACCEPT OK"
    },
    {
      "id": "34156565544237522570852594165671859978202113352719663105",
      "timestamp": 1531633371000,
      "message": "2 00000000000 eni-xxxxxxxx 60.191.38.XX 192.168.0.XX 46389 8000 6 1 44 1531633371 1531633405 REJECT OK"
    }
  ]
}

AWS費用

2018年7月現在、東京リージョンで投入データ1GBあたりの利用費用は以下の通り。

  • CloudWatchLogs: $0.76
  • Kinesis Data Firehose: $0.036

今回紹介したFirehoseを利用したS3へのエクスポート、CloudWatchLogs費用の5%程度の増加で利用可能です。

まとめ

CloudwatchLogs、S3へのエクスポート機能を備えていましたが、 サブスクリプションフィルタによるFirehose連携でより簡単にS3出力が可能になりました。

CloudWatch LogsのS3エクスポート

CloudwatchLogsに登録されたログデータの集計や検索処理などのためS3へのログ保存が望ましい場合、 今回紹介させて頂いた手順をお試しください。

また、CloudwatchLogsのサブスクリプションフィルタはLambdaと連携する事も可能です。 Firehoseへの投入前処理をLambda関数で実施し、S3 Selectや、Athenaを利用したログ参照については、 次の記事で紹介させて頂きたいと思います。