如何在我的 VPC 中找到通过 NAT 网关的流量的主要生成者或贡献者?
上次更新日期:2022 年 4 月 1 日
我注意到在我的 AWS 账单中,我的 Amazon Virtual Private Cloud(Amazon VPC)中的 NAT 网关的成本高于平常成本。如何在我的 VPC 中找到通过 NAT 网关的流量的主要贡献者?
解决方法
注意:在以下每个命令中,将 x.x.x.x 替换为 NAT 网关的私有 IP。将 y.y. 替换为 VPC CIDR 范围的前两个八位字节。
确认您的 VPC 或 NAT 网关弹性网络接口上已打开 VPC 流日志。创建流日志以打开 VPC 流日志(如有必要)。您可以将流日志数据发布到 Amazon CloudWatch Logs 或 Amazon Simple Storage Solution(Amazon S3)。
在 CloudWatch 日志中查询
1. 打开 CloudWatch 控制台。
2. 在导航窗格中,选择 Logs Insights。
3. 从下拉列表中,选择 NAT 网关的日志组。
4. 要查找通过 NAT 网关发送最多流量的实例,请运行以下查询:
filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
5. 要查找进出实例的流量,请运行以下查询:
filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') or (srcAddr like 'x.x.x.x' and dstAddr like 'y.y.')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
6. 要查找 VPC 中的实例最常与之通信的 Internet 目标,请运行以下查询。
对于上传:
filter (srcAddr like 'x.x.x.x' and dstAddr not like 'y.y.')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
对于下载:
filter (dstAddr like 'x.x.x.x' and srcAddr not like 'y.y.')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
使用 Athena 查询 S3 存储桶中的日志
使用 Amazon VPC 控制台或 Amazon Athena 控制台创建表。在此示例中,default(默认值)为数据库,vpc_flow_logs 为表。
1. 要查找通过 NAT 网关发送最多流量的实例,请运行以下查询:
SELECT srcaddr,dstaddr,sum(bytes) FROM "default"."vpc_flow_logs"
WHERE srcaddr like 'y.y.%' AND dstaddr like 'x.x.x.x' group by 1,2 order by 3 desc
limit 10;
2. 要查找进出实例的流量,请运行以下查询:
SELECT srcaddr,dstaddr,sum(bytes) FROM "default"."vpc_flow_logs"
WHERE (srcaddr like 'y.y.%' AND dstaddr like 'x.x.x.x') or (srcaddr like 'x.x.x.x' AND dstaddr like 'y.y.%') group by 1,2 order by 3 desc
limit 10;
3. 要查找 VPC 中的实例最常与之通信的 Internet 目标,请运行以下查询。
对于上传:
SELECT srcaddr,dstaddr,sum(bytes) FROM "default"."vpc_flow_logs"
WHERE (srcaddr like 'x.x.x.x' AND dstaddr not like 'y.y.%') group by 1,2 order by 3 desc
limit 10;
对于下载:
SELECT srcaddr,dstaddr,sum(bytes) FROM "default"."vpc_flow_logs"
WHERE (srcaddr not like 'y.y.%' AND dstaddr like 'x.x.x.x') group by 1,2 order by 3 desc
limit 10;
相关信息
查询示例(适用于 CloudWatch Logs Insights)