You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Athena查询NAT网关中CloudWatch相关的VPC流量日志

筛选NAT网关产生的CloudWatch流量Athena查询方案

要从VPC流日志中统计经过NAT网关的CloudWatch相关流量,你可以结合NAT网关标识、CloudWatch服务的IP/端口特征编写查询,以下是几种实用方案:

1. 基于NAT网关ID的精准查询

已知NAT网关ID(格式为nat-xxxxxxx)时,直接筛选该网关的流量,再匹配CloudWatch的HTTPS流量(putLogEvents操作走443端口):

SELECT 
  dstaddr,
  SUM(bytes) AS total_bytes,
  COUNT(*) AS flow_count
FROM twgflowlogs.awslogs
WHERE 
  -- 指定目标NAT网关ID
  instance_id = 'nat-xxxxxxxxx'
  -- CloudWatch API/Logs操作均使用HTTPS(443端口)
  AND dstport = 443
  -- 替换为你所在区域的CloudWatch服务CIDR范围
  AND dstaddr IN CIDR('52.23.0.0/16', '52.46.0.0/16')
GROUP BY dstaddr
ORDER BY total_bytes DESC;

2. 基于NAT网关弹性网卡(ENI)的查询

不确定NAT网关ID时,可通过其绑定的弹性网卡ID(eni-xxxxxxx)筛选流量:

SELECT 
  dstaddr,
  SUM(bytes) AS total_bytes,
  COUNT(*) AS flow_count
FROM twgflowlogs.awslogs
WHERE 
  -- 指定NAT网关的弹性网卡ID
  interface_id = 'eni-xxxxxxxxx'
  AND dstport = 443
  -- 替换为你区域的CloudWatch CIDR
  AND dstaddr IN CIDR('52.23.0.0/16', '52.46.0.0/16')
GROUP BY dstaddr
ORDER BY total_bytes DESC;

3. 利用流日志服务分类字段(推荐)

如果你的VPC流日志创建时开启了服务分类功能,会自动生成aws_service字段,无需手动找IP段,直接匹配CloudWatch相关服务即可:

SELECT 
  dstaddr,
  SUM(bytes) AS total_bytes,
  COUNT(*) AS flow_count
FROM twgflowlogs.awslogs
WHERE 
  -- 匹配所有NAT网关(ID以nat-开头)
  instance_id LIKE 'nat-%'
  -- 筛选CloudWatch核心服务
  AND aws_service IN ('AMAZON_CLOUDWATCH', 'AMAZON_CLOUDWATCH_LOGS')
  AND dstport = 443
GROUP BY dstaddr
ORDER BY total_bytes DESC;

补充说明

  • 获取区域CloudWatch CIDR:通过AWS CLI执行aws ec2 describe-prefix-lists --prefix-list-names com.amazonaws.<你的区域>.cloudwatch com.amazonaws.<你的区域>.logs,返回结果中的cidrBlockSet就是该区域的CloudWatch服务IP范围。
  • 评估接口端点效果:创建CloudWatch VPC接口端点后,VPC内资源访问CloudWatch会走私有网络,不再占用NAT网关流量。你可以在创建端点前后分别运行上述查询,对比total_bytes的差值,直观看到节省的NAT流量。

内容的提问来源于stack exchange,提问作者DenCowboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:35:25