VPC Flow LogsがS3出力をサポートして低価格で利用可能になりました

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

大栗です。

今までCloudWatch Logsのみ出力をサポートしていたVPC Flow LogsがS3への出力もサポートしたので試してみます。

Amazon VPC Flow Logs can now be delivered to S3

今までのVPC Flow Logs

VPC Flow LogsはVPCのトラフィックをロギングしてくれる機能ですが、的確に出力対象をフィルタリングしないと大量のログが出力され高額な利用料金になりかねない危険性が有りました。

VPC Flow LogsはVended Logsの対象となっているため、大量に使用した時に通常のCloudWatch Logsに比べて割引がされます。しかし、割引がされるのは10TB以上の場合となるため一般的なユースケースでは割引の対象とはなりませんでした。

【祝】CloudWatchログの新たな料金体系「Amazon CloudWatch Vended Logs」が発表されました!

また、大規模にトラフィックを分析したいといった用途ではAthenaを使用するために、以下のようにKinesis Firehoseを経由してCloudWatch LogsからS3への出力を行う必要がありました。そのためコスト的にもCloudWatch LogsとS3の両方の料金とKinesis Firehoseの料金がかかりました。

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

VPC Flow LogsのS3出力

VPC Flow LogsのS3出力では、CloudWatch Logsを経由せずに直接S3へ直接出力できます。また料金も低価格になっています。東京リージョンの場合は、以下の料金となっています。

料金の比較

取り込まれたデータ(東京リージョン)

こちらはVPC Flow Logsのログデータが発生した時にかかる料金です。

データ量 Vended Logs Deliver Logs to S3
〜10TB $0.76 $0.38
10TB〜30TB $0.38 $0.228
30TB〜50TB $0.152 $0.114
50TB〜 $0.076 $0.076

保存されたデータ(東京リージョン)

こちらは永続的に保存しているデータに対する料金です。

種類 料金
Vended Logs $0.033/GB
S3 標準 〜50TB $0.025/GB
S3 標準 50TB〜500TB $0.024/GB
S3 標準 500TB〜 $0.023/GB
S3 標準 – IA $0.019/GB

S3 標準 – IAのS3バケットに保存すると、10TBまでは概ね半額程度となります。

やってみる

VPC Flow LogsはVPC、サブネット、ENIの単位で作成可能ですが、今回はVPC単位で作成してみます。

VPCのコンソールでVPC Flow Logsを作成するVPCを選択します。そしてフローログタブでフローログの作成をクリックします。

今回VPC Flow Logsの設定は以下のようにします。

項目 内容
Resources <選択したVPC>
Filter All
Destination Send to an S3 bucket |S3への出力
S3 bucket ARN <出力対象のS3バケット>

VPC Flow Logsが作成されます。

VPC Flow Logs作成時にS3のバケットポリシーに以下のポリシーが設定されます。delivery.logs.amazonaws.comと言うサービスがS3へログを出力します。

{
    "Version": "2012-10-17",
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::maroon1st-flow-logs/AWSLogs/123456789012/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::maroon1st-flow-logs"
        }
    ]
}

しばらくするとS3にデータが保存されます。

ログの中味は以下のようになります。各カラムの意味はフローログレコードのドキュメントを参照ください。

version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 unknown eni-XXXXXXXX - - - - - - - 1533762253 1533762316 - NODATA
2 unknown eni-XXXXXXXX - - - - - - - 1533762490 1533762497 - NODATA
2 unknown eni-XXXXXXXX - - - - - - - 1533762246 1533762342 - NODATA
2 unknown eni-XXXXXXXX - - - - - - - 1533762487 1533762582 - NODATA
2 unknown eni-XXXXXXXX - - - - - - - 1533762365 1533762462 - NODATA
2 unknown eni-XXXXXXXX - - - - - - - 1533762373 1533762437 - NODATA
2 unknown eni-YYYYYYYY - - - - - - - 1533762308 1533762391 - NODATA
2 unknown eni-YYYYYYYY - - - - - - - 1533762361 1533762462 - NODATA
2 unknown eni-YYYYYYYY - - - - - - - 1533762427 1533762511 - NODATA
2 unknown eni-XXXXXXXX - - - - - - - 1533762432 1533762488 - NODATA
2 unknown eni-YYYYYYYY - - - - - - - 1533762486 1533762582 - NODATA

さいごに

リアルタイムにログを確認するにはCloudWatch Logsは有用なのですが、大量のデータを分析するには不向きです。その様な大量データの分析にはS3に保存して、AthenaやRedshift Spectrum、EMRやGlueなどを駆使して分析することになります。その場合一旦CloudWatch Logsに保存するのは無駄ですしコストが大きくなります。今回のアップデートでネットワークトラフィックの分析がやりやすくなったのではないでしょうか。