我想监控通过我的 Amazon Virtual Private Cloud (Amazon VPC) 对等连接传输的字节数。
解决方法
使用 Amazon CloudWatch Logs Insights 和 Amazon Athena 查询 Amazon VPC 流日志。
先决条件
创建活动的 Amazon VPC 对等连接。
至少在源 VPC 上激活 Amazon 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 标识出口流量到达目标的路径。
**注意:**AWS 内部区域的 Amazon VPC 对等连接的流量路径值为 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 查询的详细信息,请参阅如何将 CloudWatch Logs Insights 查询与 VPC 流日志结合使用?
使用 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 string,因为最后一行在计数中省略了标头。
-
运行此查询以确定通过区域内或区域间对等连接传输的总字节数:
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 地址分类,并根据传输的字节数按降序列出。
有关详细信息,请参阅创建和查询自定义 VPC 流日志表。
相关信息
使用 VPC 流日志记录 IP 地址流量
将流日志发布到 CloudWatch Logs
将流日志发布到 Amazon S3