EC2 인스턴스의 네트워크 성능 모니터링 - Amazon Elastic Compute Cloud

EC2 인스턴스의 네트워크 성능 모니터링

Elastic Network Adapter(ENA) 드라이버는 드라이버가 활성화된 인스턴스의 네트워크 성능 지표를 게시합니다. 이러한 지표를 사용하여 인스턴스 성능 문제를 해결하고, 워크로드에 적합한 인스턴스 크기를 선택하며, 조정 작업을 사전 예방적으로 계획하고, 애플리케이션을 벤치마킹하여 인스턴스의 가용 성능을 최대화할지 여부를 결정할 수 있습니다.

Amazon EC2는 인스턴스 수준에서 네트워크 최대값을 정의하여 인스턴스 크기 전반에 걸쳐 일관된 네트워크 성능을 제공하는 등 고품질 네트워킹 환경을 보장합니다. AWS는 각 인스턴스에 대해 다음에 대한 최대값을 제공합니다.

  • 대역폭 기능 - 각 EC2 인스턴스에는 인스턴스 유형 및 크기에 따라 집계 인바운드 및 아웃바운드 트래픽에 대한 최대 대역폭이 있습니다. 일부 인스턴스는 네트워크 I/O 크레딧 메커니즘을 사용하여 평균 대역폭 사용률을 기준으로 네트워크 대역폭을 할당합니다. Amazon EC2에는 AWS Direct Connect 및 인터넷에 대한 트래픽에도 최대 대역폭이 있습니다. 자세한 내용은 Amazon EC2 인스턴스 네트워크 대역폭 단원을 참조하십시오.

  • 초당 패킷(PPS) 성능 - 각 EC2 인스턴스에는 인스턴스 유형 및 크기에 따라 최대 PPS 성능이 있습니다.

  • 연결 추적 - 보안 그룹은 설정된 각 연결을 추적하여 반환 패킷이 예상대로 전달되는지 확인합니다. 인스턴스당 추적할 수 있는 최대 연결 수가 있습니다. 자세한 내용은 보안 그룹 연결 추적 섹션을 참조하세요.

  • 링크-로컬 서비스 액세스 - Amazon EC2는 DNS 서비스, Instance Metadata Service 및 Amazon Time Sync Service와 같은 서비스에 대한 트래픽에 대해 네트워크 인터페이스당 최대 PPS를 제공합니다.

인스턴스의 네트워크 트래픽이 최대값을 초과하면 AWS은(는) 네트워크 패킷을 대기열에 넣은 다음 삭제하여 최대값을 초과하는 트래픽을 처리합니다. 네트워크 성능 지표를 사용하여 트래픽이 최대값을 초과하는 시기를 모니터링할 수 있습니다. 이러한 지표는 네트워크 트래픽에 미치는 영향과 가능한 네트워크 성능 문제를 실시간으로 알려줍니다.

요구 사항

Linux 인스턴스에는 다음 요구 사항이 적용됩니다.

  • ENA 드라이버 버전 2.2.10 이상을 설치합니다. 설치된 버전을 확인하려면 ethtool 명령을 사용합니다. 다음 예에서는 버전이 최소 요구 사항을 충족합니다.

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

    ENA 드라이버를 업그레이드하려면 향상된 네트워킹을 참조하세요.

  • 이러한 지표를 Amazon CloudWatch로 가져오려면 CloudWatch 에이전트를 설치합니다. 자세한 내용은 Amazon CloudWatch 사용 설명서의 네트워크 성능 지표 수집을 참조하세요.

  • conntrack_allowance_available 지표를 지원하려면 ENA 드라이버 버전 2.8.1을 설치하세요.

ENA 드라이버에 대한 지표

ENA 드라이버는 인스턴스에 다음과 같은 지표를 실시간으로 전달합니다. 마지막 드라이버 재설정 이후 각 네트워크 인터페이스에서 대기열에 추가되거나 손실된 누적 패킷 수를 제공합니다.

Linux 인스턴스, FreeBSD 인스턴스 및 DPDK 환경에서 사용할 수 있는 지표는 다음과 같습니다.

측정치 설명 지원
bw_in_allowance_exceeded

인바운드 집계 대역폭이 인스턴스의 최대값을 초과하여 대기열에 추가되거나 손실된 패킷 수입니다.

모든 인스턴스 유형

bw_out_allowance_exceeded

아웃바운드 집계 대역폭이 인스턴스의 최대값을 초과하여 대기열에 추가되거나 손실된 패킷 수입니다.

모든 인스턴스 유형

conntrack_allowance_exceeded

연결 추적에서 인스턴스의 최대값이 초과되어 새 연결을 설정하지 못했기 때문에 손실된 패킷 수입니다. 이로 인해 인스턴스의 수신 또는 송신 트래픽에 대한 패킷 손실이 발생할 수 있습니다.

모든 인스턴스 유형

conntrack_allowance_available 해당 인스턴스 유형의 연결 추적 허용량에 도달하기 전에 인스턴스에서 설정할 수 있는 추적된 연결 수입니다.

AWS Nitro 시스템에 구축된 인스턴스 전용.

FreeBSD 인스턴스 또는 DPDK 환경에서는 지원되지 않습니다.

linklocal_allowance_exceeded

로컬 프록시 서비스에 대한 트래픽의 PPS가 네트워크 인터페이스의 최대값을 초과하여 손실된 패킷 수입니다. 이는 DNS 서비스, Instance Metadata Service 및 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 conntrack_allowance_available: 136812

ENA Express의 지표

ENA Express는 AWS Scalable Reliable Datagram(SRD) 기술로 구동됩니다. SRD는 동적 라우팅을 사용하여 스루풋을 늘리고 테일 지연 시간을 최소화하는 고성능 네트워크 전송 프로토콜입니다. ENA Express 지표를 사용하면 인스턴스가 SRD 기술을 통해 제공되는 성능 개선의 이점을 최대한 활용하도록 보장할 수 있습니다. 예를 들면 다음과 같습니다.

  • 리소스를 평가하여 추가로 SRD 연결을 설정할 용량이 충분한지 확인합니다.

  • 적절한 전송 패킷의 SRD 사용을 방해하는 잠재적 문제가 있는 위치를 식별합니다.

  • 인스턴스에서 SRD를 사용하는 전송 트래픽의 비율을 계산합니다.

  • 인스턴스에서 SRD를 사용하는 수신 트래픽의 비율을 계산합니다.

참고

지표를 생성하려면 드라이버 버전 2.8 이상을 사용합니다.

Linux 기반 인스턴스에 대해 ethtool 명령을 실행하여 다음과 같은 ENA Express 지표를 사용할 수 있습니다.

  • ena_srd_mode - 어떤 ENA Express 기능이 활성화되어 있는지 설명합니다. 값은 다음과 같습니다.

    • 0 = ENA Express 꺼짐, UDP 꺼짐

    • 1 = ENA Express 켜짐, UDP 꺼짐

    • 2 = ENA Express 꺼짐, UDP 켜짐

      참고

      ENA Express가 원래 활성화되어 있고, UDP가 ENA Express를 사용하도록 구성된 경우에만 이렇게 나타납니다. UDP 트래픽에 대한 이전 값이 유지됩니다.

    • 3 = ENA Express 켜짐, UDP 켜짐

  • ena_srd_eligible_tx_pkts - 다음과 같이, 일정 기간 동안 전송된 네트워크 패킷 중 적합성에 대한 SRD 요구 사항을 충족하는 네트워크 패킷의 수입니다.

    • 전송 인스턴스 유형과 수신 인스턴스 유형이 모두 지원되어야 합니다. 자세한 내용은 ENA Express를 지원하는 인스턴스 유형 표를 참조하세요.

    • 전송 인스턴스와 수신 인스턴스 모두에 ENA Express가 구성되어 있어야 합니다.

    • 전송 인스턴스와 수신 인스턴스가 동일한 서브넷에서 실행되어야 합니다.

    • 인스턴스 간 네트워크 경로에 미들웨어 박스가 포함되지 않아야 합니다. ENA Express는 현재 미들웨어 박스를 지원하지 않습니다.

    참고

    ENA Express 적합성 지표는 소스 및 대상 요구 사항과 두 엔드포인트 간의 네트워크를 보여줍니다. 이미 카운팅되었더라도 적격 패킷이 적합하지 않을 수 있습니다. 예를 들어 적격 패킷이 최대 전송 단위(MTU) 한도를 초과하는 경우, 해당 패킷이 적격 패킷으로 카운터에 반영되더라도 표준 ENA 전송으로 폴백됩니다.

  • ena_srd_tx_pkts - 일정 기간 동안 전송한 SRD 패킷의 수입니다.

  • ena_srd_rx_pkts - 일정 기간 동안 수신한 SRD 패킷의 수입니다.

  • ena_srd_resource_utilization - 동시 SRD 연결에 허용된 최대 메모리 사용률 중 인스턴스에 사용된 비율입니다.

ENA Express의 필터링된 지표 목록을 보려면 네트워크 인터페이스(이 예에서는 eth0으로 표시됨)에 대해 다음 ethtool 명령을 실행합니다.

[ec2-user ~]$ ethtool -S eth0 | grep ena_srd NIC statistics: ena_srd_mode: 0 ena_srd_tx_pkts: 0 ena_srd_eligible_tx_pkts: 0 ena_srd_rx_pkts: 0 ena_srd_resource_utilization: 0
송신 트래픽(전송 패킷)

송신 트래픽이 예상대로 SRD를 사용하는지 확인하려면, 일정 기간 동안 전송된 SRD 패킷 수(ena_srd_eligible_tx_pkts)와 SRD 적격 패킷 수(ena_srd_tx_pkts)를 비교합니다.

적격 패킷 수와 전송된 SRD 패킷 수 간의 큰 차이는 리소스 사용률 문제로 인해 발생하는 경우가 많습니다. 인스턴스에 연결된 네트워크 카드가 최대 리소스를 모두 사용하거나 패킷이 MTU 한도를 초과하면, 적격 패킷이 SRD를 통해 전송되지 않으며 표준 ENA 전송으로 폴백해야 합니다. 라이브 마이그레이션이나 라이브 서버 업데이트 중에도 패킷에서 이러한 차이가 발생할 수 있습니다. 근본 원인을 파악하려면 추가적인 문제 해결 프로세스가 필요합니다.

참고

적격 패킷 수와 SRD 패킷 수 간의 사소한 차이는 무시해도 됩니다. 예를 들어 인스턴스가 SRD 트래픽을 전송하기 위해 다른 인스턴스에 연결할 때 이 문제가 발생할 수 있습니다.

일정 기간 동안 총 송신 트래픽 중 SRD를 사용한 트래픽의 비율을 확인하려면, 전송된 SRD 패킷 수(ena_srd_tx_pkts)를 해당 기간 동안 인스턴스에 전송된 총 패킷 수(NetworkPacketOut)와 비교합니다.

수신 트래픽(수신 패킷)

SRD를 사용한 수신 트래픽의 비율을 확인하려면, 일정 기간 동안 수신된 SRD 패킷 수(ena_srd_rx_pkts)를 해당 기간 동안 인스턴스에 수신된 총 패킷 수(NetworkPacketIn)와 비교합니다.

리소스 사용률

리소스 사용률은 일정 시간에 단일 인스턴스가 보유할 수 있는 동시 SRD 연결 수를 기준으로 합니다. 리소스 사용률 지표(ena_srd_resource_utilization)는 인스턴스의 현재 사용률을 추적합니다. 사용률이 100%에 가까워지면 성능 문제가 발생할 수 있습니다. ENA Express가 SRD에서 표준 ENA 전송으로 폴백되므로 패킷이 손실될 가능성이 커집니다. 높은 리소스 사용률은 인스턴스를 스케일 아웃하여 네트워크 성능을 개선해야 할 때임을 나타내는 징후입니다.

참고

인스턴스의 네트워크 트래픽이 최대값을 초과하면 AWS은(는) 네트워크 패킷을 대기열에 넣은 다음 삭제하여 최대값을 초과하는 트래픽을 처리합니다.

Persistence

송신 및 수신 지표는 인스턴스에 대해 ENA Express가 활성화되어 있는 동안 누적됩니다. ENA Express가 비활성화되면 지표 누적이 중단되지만, 인스턴스가 실행되는 동안에는 계속 유지됩니다. 인스턴스가 재부팅 또는 종료되거나 네트워크 인터페이스가 인스턴스에서 분리되면 지표가 재설정됩니다.

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 지표 수집을 활성화하려면 다음 커밋을 입력하고 interval을 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 지표 수집을 끄려면 앞의 명령을 실행하고 interval0으로 지정하면 됩니다.

FreeBSD 지표를 수집한 후에는 다음 명령을 실행하여 수집된 지표의 최신 세트를 검색할 수 있습니다.

sysctl dev.ena.network_interface.eni_metrics