监控 EC2 实例的网络性能 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

监控 EC2 实例的网络性能

Elastic Network Adapter (ENA) 驱动程序从启用这些指标的实例发布网络性能指标。您可以使用这些指标来排查实例性能问题、为工作负载选择合适的实例大小、主动计划扩展活动以及对应用程序进行基准测试,以确定它们是否最大限度地提高了实例的可用性能。

Amazon EC2 定义实例级别的网络最大值,以确保高质量的联网体验,包括不同大小实例间一致的网络性能。Amazon 为每个实例提供以下最大值:

  • 带宽功能 – 根据实例类型和大小,每个 EC2 实例都具有聚合入站和出站流量的最大带宽。一些实例使用一种网络 I/O 积分机制,根据平均带宽使用率分配网络带宽。Amazon EC2 还拥有最大的带宽,可用于流向 Amazon Direct Connect 和互联网的流量。

  • 每秒数据包 (PPS) 性能 – 根据实例类型和大小,每个 EC2 实例都具有最大的 PPS 性能。

  • 跟踪连接 – 安全组会跟踪建立的每个连接,以确保返回数据包按预期交付。每个实例都有可以跟踪的最大连接数量。

  • 链接本地服务访问 – Amazon EC2 为流向 DNS 服务、实例元数据服务和 Amazon Time Sync Service 等服务的流量提供每个网络接口的最大 PPS。

当实例的网络流量超过最大值时,Amazon 将通过排队然后丢弃网络数据包来调整超过最大值的流量。您可以使用网络性能指标监控流量何时超过最大值。这些指标可以实时告知您对网络流量的影响以及可能的网络性能问题。

Requirements

以下要求适用于 Linux 实例。

  • 安装 ENA 驱动程序版本 2.2.10 或更高版本。要验证安装的版本,请使用 ethtool 命令。在以下示例中,版本符合最低要求。

    [ec2-user ~]$ ethtool -i eth0 | grep version version: 2.2.10

    要升级 ENA 驱动程序,请参阅增强联网

  • 要将这些指标导入到 Amazon CloudWatch,请安装 CloudWatch 代理。有关更多信息,请参阅 Amazon CloudWatch 用户指南 中的收集网络性能指标

ENA 驱动程序的指标

ENA 驱动程序实时向实例传送以下指标。它们提供了自上次驱动程序重置以来在每个网络接口上排队或丢弃的累计数据包数。

以下指标适用于 Linux 实例、FreeBSD 实例和 DPDK 环境。

指标 描述
bw_in_allowance_exceeded

因入站聚合带宽超过实例的最大值而排队或丢弃的数据包的数量。

bw_out_allowance_exceeded

因出站聚合带宽超过实例的最大值而排队或丢弃的数据包的数量。

conntrack_allowance_exceeded

由于连接跟踪超过实例的最大值且无法建立新连接而丢弃的数据包的数量。这可能会导致进出实例的流量丢失数据包。

linklocal_allowance_exceeded

由于到本地代理服务的流量的 PPS 超出网络接口的最大值而丢弃的数据包数量。这会影响流向 DNS 服务、实例元数据服务和 Amazon Time Sync Service 的流量。

pps_allowance_exceeded

因双向 PPS 超过实例的最大值而排队或丢弃的数据包的数量。

查看 Linux 实例的网络性能指标

您可以将指标发布到自己的收藏夹工具以可视化指标数据。例如,您可以使用 CloudWatch 代理将指标发布到 Amazon CloudWatch。代理使您能够选择单个指标并控制发布。

您还可以使用 ethtool 按如下方式检索每个网络接口的指标,例如 eth0。

[ec2-user ~]$ ethtool -S eth0 bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0

ENA 的 DPDK 驱动程序的网络性能指标

ENA 驱动程序版本 2.2.0 及更高版本支持网络指标报告。DPDK 20.11 包括 ENA 驱动程序 2.2.0,它是第一个支持此功能的 DPDK 版本。

您可以使用示例应用程序查看 DPDK 统计信息。要启动示例应用程序的交互式版本,请运行以下命令。

./app/dpdk-testpmd -- -i

在此交互式会话中,您可以输入命令来检索端口的扩展统计信息。以下示例命令将检索端口 0 的统计信息。

show port xstats 0

以下是与 DPDK 示例应用程序进行交互式会话的示例。

[root@ip-192.0.2.0 build]# ./app/dpdk-testpmd -- -i EAL: Detected 4 lcore(s) EAL: Detected 1 NUMA nodes EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: Probing VFIO support... EAL: Invalid NUMA socket, default to 0 EAL: Invalid NUMA socket, default to 0 EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket 0) EAL: No legacy callbacks, legacy socket not created Interactive-mode selected Port 0: link state change event testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0 testpmd: preferred mempool ops selected: ring_mp_mc Warning! port-topology=paired and odd forward ports number, the last port will pair with itself. Configuring Port 0 (socket 0) Port 0: 02:C7:17:A2:60:B1 Checking link statuses... Done Error during enabling promiscuous mode for port 0: Operation not supported - ignore testpmd> show port xstats 0 ###### NIC extended statistics for port 0 rx_good_packets: 0 tx_good_packets: 0 rx_good_bytes: 0 tx_good_bytes: 0 rx_missed_errors: 0 rx_errors: 0 tx_errors: 0 rx_mbuf_allocation_errors: 0 rx_q0_packets: 0 rx_q0_bytes: 0 rx_q0_errors: 0 tx_q0_packets: 0 tx_q0_bytes: 0 wd_expired: 0 dev_start: 1 dev_stop: 0 tx_drops: 0 bw_in_allowance_exceeded: 0 bw_out_allowance_exceeded: 0 pps_allowance_exceeded: 0 conntrack_allowance_exceeded: 0 linklocal_allowance_exceeded: 0 rx_q0_cnt: 0 rx_q0_bytes: 0 rx_q0_refill_partial: 0 rx_q0_bad_csum: 0 rx_q0_mbuf_alloc_fail: 0 rx_q0_bad_desc_num: 0 rx_q0_bad_req_id: 0 tx_q0_cnt: 0 tx_q0_bytes: 0 tx_q0_prepare_ctx_err: 0 tx_q0_linearize: 0 tx_q0_linearize_failed: 0 tx_q0_tx_poll: 0 tx_q0_doorbells: 0 tx_q0_bad_req_id: 0 tx_q0_available_desc: 1023 testpmd>

有关示例应用程序以及使用它检索扩展统计信息的更多信息。请参阅 DPDK 文档中的 Testpmd 应用程序用户指南

运行 FreeBSD 的实例的指标

从 2.3.0 版开始,ENA FreeBSD 驱动程序支持在运行 FreeBSD 的实例上收集网络性能指标。要启用 FreeBSD 指标的收集,请输入以下命令并将间隔设置为 1 到 3600 之间的值。这指定了收集 FreeBSD 指标的频率(以秒为单位)。

sysctl dev.ena.network_interface.eni_metrics.sample_interval=interval

例如,以下命令将驱动程序设置为每 10 秒在网络接口 1 上收集 FreeBSD 指标:

sysctl dev.ena.1.eni_metrics.sample_interval=10

要关闭 FreeBSD 指标的集合,您可以运行上述命令并将 0 指定为间隔

收集 FreeBSD 指标后,您可以通过运行以下命令来检索最新收集的指标集。

sysctl dev.ena.network_interface.en1_metrics