Amazon Virtual Private Cloud (Amazon VPC) ピアリング接続を介して転送されるバイト数を監視したいです。
解決策
Amazon CloudWatch Logs Insights と Amazon Athena を使用して Amazon VPC フローログをクエリします。
前提条件
アクティブな Amazon VPC ピアリング接続を作成します。
Amazon VPC フローログは、少なくともソース VPC で有効にする必要があります。VPC フローログは CloudWatch Logs または Amazon Simple Storage Service (Amazon S3) バケットに発行できます。
このカスタム VPC フローログ形式の例では、${traffic-path} および ${bytes} フィールドを使用しています。
${interface-id} ${vpc-id} ${srcaddr} ${dstaddr} ${pkt-srcaddr} ${pkt-dstaddr} ${traffic-path} ${bytes} ${log-status}
ピアリング接続を介して転送されるバイト数を調べるには、${traffic-path} および ${bytes} フィールドを指定してクエリします。traffic-path では、出力トラフィックが宛先までたどるパスを識別します。
注: Amazon VPC ピアリング接続のトラフィックパス値は、AWS リージョン内部では 4、AWS 間リージョンでは 5 です。
詳細については、「使用可能なフィールド」を参照してください。
CloudWatch Insights を使用してフローログをクエリする
CloudWatch Logs Insights を使用してフローログをクエリするには、次の手順に従います。
-
CloudWatch コンソールを開きます。
-
ナビゲーションペインで、[Logs Insights] を選択します。
-
Logs Insights ダッシュボードで、ロググループを選択します。
-
次のクエリを実行して、VPC ログ内のリージョン内およびリージョン間の VPC ピアリング接続すべてで転送された合計バイト数を計算します。
fields @timestamp, bytes
|filter trafficPath in ['4','5']
| stats sum(bytes) as
TotalBytesTransferred
-
このクエリを実行して、すべてのリージョン内およびリージョン間の VPC ピアリング接続において、送信元と宛先の間で転送されるバイトの総数を計算します。結果は、転送されたバイト数に基づいて降順に表示されます。
fields @timestamp, bytes, srcAddr, dstAddr
| sort srcAddr, dstAddr
| filter trafficPath in ['4', '5']
| stats sum(bytes) as TotalBytesTransferred by srcAddr, dstAddr
| sort -TotalBytesTransferred
-
このクエリを実行して、送信元と宛先 IP アドレスで検索します。
fields @timestamp, bytes, srcAddr, dstAddr
| sort @timestamp desc
| filter trafficPath in ['4', '5']
| filter srcAddr = "x.x.x.x" and dstAddr = "x.x.x.x"
| stats sum(bytes) as TotalBytesTransferred by srcAddr, dstAddr
| sort -TotalBytesTransferred
カスタムクエリについては、チュートリアル: 集計関数を使用してクエリを実行するを参照してください。クエリ構文の詳細については、「CloudWatch Logs Insights のクエリ構文」を参照してください。
CloudWatch Logs Insights クエリを使用する方法の詳細については、「VPC フローログで CloudWatch Logs Insights クエリを使用する方法を教えてください」を参照してください。
Amazon Athena を使用して VPC フローログをクエリする
Amazon Athena を使用して VPC フローログをクエリするには、以下の手順に従います。
注: デフォルトでは、VPC フローログは Amazon S3 バケットを宛先とするテキスト形式でアクティブ化されます。
-
Amazon Athena コンソールを開き、クエリエディタを起動します。
-
Amazon VPC フローログ用の Athena テーブルを作成します。
-
DDL ステートメントを使用して、VPC フローログのデータと一致する列を含むテーブルを作成します。行番号が Amazon S3 ファイルの出力の列番号と一致していることを確認してください。ロケーションソースには Amazon S3 バケット URI を使用します。
-
Amazon S3 のデフォルトのテキスト形式のクエリには、次の DDL ステートメントを使用します。
CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` (
interface_id string,
vpc_id string,
srcaddr string,
dstaddr string,
pkt_srcaddr string,
pkt_dstaddr string,
traffic_path int,
bytes bigint,
log_status string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://EXAMPLE_BUCKET/REGION/'
TBLPROPERTIES ("skip.header.line.count"="1");
注: 各テーブル列はエントリの順序で追加されます。最後の行ではカウントからヘッダーが省略されるため、最初の列は interface_id 文字列です。
-
次のクエリを実行して、リージョン内またはリージョン間のピアリング接続を介して転送された合計バイト数を調べます。
SELECT sum(bytes) as total_bytes_transferred
FROM vpc_flow_logs
WHERE traffic_path IN (4, 5);
-
次のクエリを実行して、リージョン内またはリージョン間のピアリング接続を介して転送された合計バイト数を計算します。
SELECT
srcaddr,
dstaddr,
SUM(bytes) AS total_bytes_transferred
FROM
vpc_flow_logs
WHERE traffic_path IN (4,5)
GROUP BY
srcaddr, dstaddr
ORDER BY
total_bytes_transferred DESC;
注: データは送信元 IP アドレスと宛先 IP アドレスで分類され、転送されたバイト数に基づいて降順に表示されます。
詳細については、「カスタム VPC フローログ用のテーブルの作成とクエリ」を参照してください。
関連情報
VPC フローログを使用して IP アドレストラフィックを記録する
フローログを CloudWatch ログに発行する
フローログを Amazon S3 に発行する