如何计算自定义 VPC 流日志中通过我的 VPC 对等连接传输的字节数?

2 分钟阅读
0

我想监控通过我的 Amazon Virtual Private Cloud (Amazon VPC) 对等连接传输的字节数。

解决方法

使用 Amazon CloudWatch Logs Insights 和 Amazon Athena 查询 Amazon VPC 流日志。

先决条件

创建活动的 Amazon VPC 对等连接

至少在源 VPC 上激活 Amazon VPC 流日志。您可以将 VPC 流日志发布到 CloudWatch LogsAmazon 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 查询流日志:

  1. 打开 CloudWatch 控制台

  2. 在导航窗格中,选择 Logs Insights

  3. Logs Insights 控制面板上,选择日志组。

  4. 运行此查询以计算 VPC 日志中通过所有区域内和区域间 VPC 对等连接传输的总字节数:

    fields @timestamp, bytes
    |filter trafficPath in ['4','5']
    | stats sum(bytes) as
    TotalBytesTransferred
  5. 运行此查询以计算通过所有区域内和区域间 VPC 对等连接在源和目标之间传输的总字节数。结果根据传输的字节数按降序列出:

    fields @timestamp, bytes, srcAddr, dstAddr
    | sort srcAddr, dstAddr
    | filter trafficPath in ['4', '5']
    | stats sum(bytes) as TotalBytesTransferred by srcAddr, dstAddr
    | sort -TotalBytesTransferred
    
  6. 运行此查询以按源和目标 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 存储桶作为目标。

  1. 打开 Amazon Athena 控制台,然后启动查询编辑器。

  2. 为 Amazon VPC 流日志创建 Athena 表

  3. 使用 DDL 语句创建表,其中的列与您的 VPC 流日志中的数据相匹配。确保行号与 Amazon S3 文件输出中的列号一致。使用 Amazon S3 存储桶 URI 作为位置源。

  4. 对于 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,因为最后一行在计数中省略了标头。

  5. 运行此查询以确定通过区域内或区域间对等连接传输的总字节数:

    SELECT sum(bytes) as total_bytes_transferred
    FROM vpc_flow_logs
    WHERE traffic_path IN (4, 5);
  6. 运行此查询以计算通过区域内或区域间对等连接传输的总字节数:

    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

AWS 官方
AWS 官方已更新 1 年前