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

この記事は公開されてから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 のサブスクリプションフィルタ

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

CloudFromation

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

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を利用したログ参照については、 次の記事で紹介させて頂きたいと思います。