ablog

不器用で落着きのない技術者のメモ

VPCフローログのサイズがどの程度になるか

別々のVPCにEC2インスタンスを作成して iperf で1時間ネットワーク転送をして VPC フローログのサイズがどの程度になるか検証してみた。

検証手順

VPC フローログの設定

以下を2つのVPCで設定する

  • 任意の名前で S3 バケットを作成する。
  • EC2 を作成する VPC を選択して、[フローログ]をクリックする。
  • [フローログの作成]をクリックする。
EC2インスタンス作成
  • 2つのVPCに1つずつEC2インスタンスを作成する(今回は m4.10xlarge を利用した)。
iperf をインストールする
$ sudo yum -y install git gcc
$ git clone https://github.com/esnet/iperf
$ cd iperf
$ ./configure
$ sudo make
$ sudo make install
$ sudo ldconfig
  • iperf でサーバ側にする EC2 のセキュリティグループでクライアント側のEC2のIPからの通信を許可する。

検証実施

  • iperf で1時間ネットワーク通信を行う。
    • サーバ側
$ iperf -s
    • クライアント側
$ iperf3 -c ec2-**-***-191-213.ap-northeast-1.compute.amazonaws.com -t 3600 -P 10
  • CloudWatch


サイズの確認

  • iperf クライアント側
$ aws s3 cp --recursive s3://aws-vpcflowlog-100000000000-ap-noartheast-1 ./
$ cd AWSLogs/100000000000/vpcflowlogs/ap-northeast-1/2018/09/09/
$ du -hs
376K	.
$ gunzip *.gz
$ du -hs
728K	.
$ head -3 100000000000_vpcflowlogs_ap-northeast-1_fl-002b091daf0edd6fb_20180909T1230Z_9e961a12.log
version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 100000000000 eni-*****560e2bc271ee ***.**.9.121 **.***.225.139 50194 443 6 9 2689 1536496135 1536496191 ACCEPT OK
2 100000000000 eni-*****560e2bc271ee ***.**.9.121 **.***.225.139 50198 443 6 9 2689 1536496135 1536496191 ACCEPT OK
  • iperf サーバ側
$ aws s3 cp --recursive s3://aws-vpcflowlog-200000000000-ap-northeast-1 ./
$ cd AWSLogs/200000000000/vpcflowlogs/ap-northeast-1/2018/09/09/
$ du -hs 
280K	.
$ gunzip *.gz
$ du -hs
456K	.
$ head -3 200000000000_vpcflowlogs_ap-northeast-1_fl-05d4eb0a8aaa6cc41_20180909T1235Z_4ab5b1df.log
version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 200000000000 eni-*****a0032216167f **.***.225.173 **.***.45.65 443 37290 6 4 559 1536496227 1536496286 ACCEPT OK
2 200000000000 eni-*****a0032216167f **.***.225.173 **.***.45.65 443 37294 6 20 6720 1536496227 1536496286 ACCEPT OK

フローログレコードの構文
フローログレコードはスペース区切りの文字列で、以下の形式です。

<version> <account-id> <interface-id> <srcaddr> <dstaddr> <srcport> <dstport> <protocol> <packets> <bytes> <start> <end> <action> <log-status>

次の表は、フローログレコードのフィールドについて説明しています。

フィールド 説明
version VPC フローログバージョン。
account-id フローログの AWS アカウント ID。
interface-id トラフィックが記録されるネットワークインターフェイスの ID。
srcaddr 送信元の IPv4 または IPv6 アドレス。ネットワークインターフェイスIPv4 アドレスは常にそのプライベート IPv4 アドレスです。
dstaddr 送信先IPv4 または IPv6 アドレス。ネットワークインターフェイスIPv4 アドレスは常にそのプライベート IPv4 アドレスです。
srcport トラフィックの送信元ポート。
dstport トラフィック送信先ポート。
protocol トラフィックの IANA プロトコル番号。詳細については、「割り当てられたインターネットプロトコル番号」を参照してください。
packets キャプチャウィンドウ中に転送されたパケットの数。
bytes キャプチャウィンドウ中に転送されたバイト数。
start キャプチャウィンドウの開始時刻 (Unix 時間)。
end キャプチャウィンドウの終了時刻 (Unix 時間)。
action トラフィックに関連付けられたアクション:ACCEPT: 記録されたトラフィックは、セキュリティグループまたはネットワーク ACL で許可されています。
REJECT: 記録されたトラフィックは、セキュリティグループまたはネットワーク ACL で許可されていません。
log-status フローログのロギングステータス。
OK: データは選択された送信先に正常に記録されます。
NODATA: キャプチャウィンドウ中にネットワークインターフェイスとの間で行き来するネットワークトラフィックはありませんでした。
SKIPDATA: 一部のフローログレコードはキャプチャウィンドウ中にスキップされました。これは、内部的なキャパシティー制限、または内部エラーが原因である可能性があります。
VPC フローログ - Amazon Virtual Private Cloud

packets が「キャプチャウィンドウ中に転送されたパケットの数」とあるので、複数のパケットで1レコードとなる。1レコードあたりはざっくり115バイト程度。