Envoy 지표를 사용하여 애플리케이션 모니터링 - AWS App Mesh

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Envoy 지표를 사용하여 애플리케이션 모니터링

Envoy는 지표를 다음과 같은 주요 범주로 분류합니다.

  • 다운스트림—프록시로 들어오는 연결 및 요청과 관련된 지표입니다.

  • 업스트림—프록시에 의한 발신 연결 및 요청과 관련된 지표입니다.

  • 서버—Envoy의 내부 상태를 설명하는 지표입니다. 여기에는 가동 시간 또는 할당된 메모리와 같은 지표가 포함됩니다.

App Mesh에서 프록시는 업스트림 및 다운스트림 트래픽을 가로챕니다. 예를 들어 Envoy는 클라이언트에서 받은 요청과 서비스 컨테이너의 요청을 다운스트림 트래픽으로 분류합니다. 이러한 다양한 유형의 업스트림 트래픽과 다운스트림 트래픽을 구분하기 위해 App Mesh는 서비스와 관련된 트래픽 방향에 따라 Envoy 지표를 추가적으로 분류합니다.

  • 수신—서비스 컨테이너로 흐르는 연결 및 요청과 관련된 지표 및 리소스입니다.

  • 송신—서비스 컨테이너에서, 궁극적으로는 Amazon ECS 태스크 또는 Kubernetes 포드에서 나가는 연결 및 요청과 관련된 지표 및 리소스입니다.

다음 그림은 프록시와 서비스 컨테이너 간의 통신을 보여 줍니다.

리소스 이름 지정 규칙

Envoy가 메시를 보는 방식과 해당 리소스가 App Mesh에서 정의한 리소스에 다시 매핑되는 방식을 이해하는 데 유용합니다. App Mesh가 구성하는 기본 Envoy 리소스는 다음과 같습니다.

  • 리스너—프록시가 다운스트림 연결을 수신하는 주소 및 포트입니다. 이전 그림에서 App Mesh는 Amazon ECS 태스크 또는 Kubernetes 포드로 들어오는 트래픽에 대한 수신 리스너와 서비스 컨테이너에서 나가는 트래픽에 대한 송신 리스너를 생성합니다.

  • 클러스터—프록시가 연결하고 트래픽을 라우팅하는 업스트림 엔드포인트의 명명된 그룹입니다. App Mesh에서 서비스 컨테이너는 서비스가 연결할 수 있는 다른 모든 가상 노드뿐만 아니라 클러스터로 표시됩니다.

  • 경로—메시에서 정의한 경로에 해당합니다. 여기에는 프록시가 요청과 일치시키는 조건과 요청이 전송되는 대상 클러스터가 포함됩니다.

  • 엔드포인트 및 클러스터 로드 할당—업스트림 클러스터의 IP 주소입니다. 가상 노드의 서비스 검색 메커니즘으로 AWS Cloud Map를 사용하는 경우 App Mesh는 검색된 서비스 인스턴스를 엔드포인트 리소스로서 프록시에 전송합니다.

  • 보안 암호—여기에는 암호화 키와 TLS 인증서가 포함되지만 이에 국한되지는 않습니다. 클라이언트 및 서버 인증서의 소스로 AWS Certificate Manager을 사용하는 경우 App Mesh는 퍼블릭 및 프라이빗 인증서를 보안 암호 리소스로서 프록시에 전송합니다.

App Mesh는 일관된 Envoy 리소스 이름 지정 체계를 사용하므로 메시와 다시 연관시키는 데 사용할 수 있습니다.

리스너 및 클러스터의 이름 지정 체계를 이해하는 것은 App Mesh의 Envoy 지표를 이해하는 데 중요합니다.

리스너 이름

리스너 이름은 다음 형식을 사용하여 지정됩니다.

lds_<traffic direction>_<listener IP address>_<listening port>

일반적으로 Envoy에 구성된 다음과 같은 리스너를 볼 수 있습니다.

  • lds_ingress_0.0.0.0_15000

  • lds_egress_0.0.0.0_15001

Kubernetes CNI 플러그인 또는 IP 테이블 규칙을 사용하면 Amazon ECS 태스크 또는 Kubernetes 포드의 트래픽이 포트 1500015001로 전달됩니다. App Mesh는 수신 및 송신(발신) 트래픽을 수락하도록 이 두 리스너로 Envoy를 구성합니다. 가상 노드에 리스너가 구성되어 있지 않으면 수신 리스너가 보이지 않을 것입니다.

클러스터 이름

대부분의 클러스터는 다음 형식을 사용합니다.

cds_<traffic direction>_<mesh name>_<virtual node name>_<protocol>_<port>

서비스가 통신하는 가상 노드에는 자체 클러스터가 있습니다. 앞서 언급했듯이 App Mesh는 Envoy 옆에서 실행되는 서비스를 위한 클러스터를 생성하여 프록시가 수신 트래픽을 해당 서비스로 전송할 수 있도록 합니다.

예를 들어 포트 8080에서 http 트래픽을 수신하는 my-virtual-node라는 가상 노드가 있고 해당 가상 노드가 이름이 my-mesh인 메시에 있는 경우 App Mesh는 이름이 cds_ingress_my-mesh_my-virtual-node_http_8080인 클러스터를 생성합니다. 이 클러스터는 my-virtual-node의 서비스 컨테이너로 들어오는 트래픽의 대상 역할을 합니다.

App Mesh는 다음과 같은 유형의 특수 클러스터를 추가로 생성할 수도 있습니다. 이러한 다른 클러스터가 메시에서 명시적으로 정의한 리소스와 반드시 일치하는 것은 아닙니다.

  • 다른 AWS 서비스에 연결하는 데 사용되는 클러스터. 이 유형을 사용하면 기본적으로 메시가 대부분의 AWS 서비스에 도달할 수 있습니다(기본값: cds_egress_<mesh name>_amazonaws).

  • 가상 게이트웨이의 라우팅을 수행하는 데 사용되는 클러스터. 다음은 무시해도 됩니다.

    • 단일 리스너의 경우: cds_ingress_<mesh name>_<virtual gateway name>_self_redirect_<protocol>_<port>

    • 여러 리스너의 경우: cds_ingress_<mesh name>_<virtual gateway name>_self_redirect_<ingress_listener_port>_<protocol>_<port>

  • Envoy의 보안 암호 검색 서비스를 사용하여 보안 암호를 검색할 때 정의할 수 있는 엔드포인트가 되는 클러스터(예: TLS): static_cluster_sds_unix_socket.

예제 애플리케이션 지표

Envoy에서 사용할 수 있는 메트릭을 설명하기 위해 다음 샘플 애플리케이션에는 세 개의 가상 노드가 있습니다. 메시의 가상 서비스, 가상 라우터 및 경로는 Envoy의 지표에 반영되지 않으므로 무시해도 됩니다. 이 예제에서는 모든 서비스가 포트 8080에서 http 트래픽을 수신합니다.

메시에서 실행되는 Envoy 프록시 컨테이너에 환경 변수 ENABLE_ENVOY_STATS_TAGS=1을 추가하는 것이 좋습니다. 그러면 프록시에서 내보내는 모든 지표에 다음과 같은 지표 측정기준이 추가됩니다.

  • appmesh.mesh

  • appmesh.virtual_node

  • appmesh.virtual_gateway

이러한 태그는 메시, 가상 노드 또는 가상 게이트웨이의 이름으로 설정되므로 메시의 리소스 이름을 사용하여 지표를 필터링할 수 있습니다.

리소스 이름

웹 사이트 가상 노드의 프록시에는 다음과 같은 리소스가 있습니다.

  • 수신 및 송신 트래픽용 리스너 2개:

    • lds_ingress_0.0.0.0_15000

    • lds_egress_0.0.0.0_15001

  • 두 개의 가상 노드 백엔드를 나타내는 송신 클러스터 2개:

    • cds_egress_online-store_product-details_http_8080

    • cds_egress_online-store_cart_http_8080

  • 웹 사이트 서비스 컨테이너의 수신 클러스터:

    • cds_ingress_online-store_website_http_8080

예제 리스너 지표

  • listener.0.0.0.0_15000.downstream_cx_active—Envoy에 대한 활성 수신 네트워크 연결 수

  • listener.0.0.0.0_15001.downstream_cx_active—Envoy에 대한 활성 송신 네트워크 연결 수 애플리케이션에서 외부 서비스에 연결하는 경우도 이 수에 포함됩니다.

  • listener.0.0.0.0_15000.downstream_cx_total—Envoy에 대한 총 수신 네트워크 연결 수

  • listener.0.0.0.0_15001.downstream_cx_total—Envoy에 대한 총 송신 네트워크 연결 수

전체 리스너 지표 세트는 Envoy 설명서의 통계를 참조하세요.

예제 클러스터 지표

  • cluster_manager.active_clusters—Envoy가 하나 이상의 연결을 설정한 클러스터의 총 수

  • cluster_manager.warming_clusters—Envoy가 아직 연결하지 않은 클러스터의 총 수

다음 클러스터 지표는 cluster.<cluster name>.<metric name> 형식을 사용합니다. 이러한 지표 이름은 애플리케이션 예제에 고유하며 웹 사이트 Envoy 컨테이너에서 내보내집니다.

  • cluster.cds_egress_online-store_product-details_http_8080.upstream_cx_total—웹 사이트와 제품 세부 정보 간의 총 연결 수

  • cluster.cds_egress_online-store_product-details_http_8080.upstream_cx_connect_fail—웹 사이트와 제품 세부 정보 간의 실패한 총 연결 수

  • cluster.cds_egress_online-store_product-details_http_8080.health_check.failure—웹 사이트와 제품 세부 정보 간의 실패한 총 상태 확인 수

  • cluster.cds_egress_online-store_product-details_http_8080.upstream_rq_total—웹 사이트와 제품 세부 정보 간에 수행된 총 요청 수

  • cluster.cds_egress_online-store_product-details_http_8080.upstream_rq_time—웹 사이트와 제품 세부 정보 간에 수행된 요청별 소요 시간

  • cluster.cds_egress_online-store_product-details_http_8080.upstream_rq_2xx—웹 사이트와 제품 세부 정보에서 받은 HTTP 2xx 응답 수.

전체 HTTP 지표 세트는 Envoy 설명서의 통계를 참조하세요.

관리 서버 지표

또한 Envoy는 Envoy의 관리 서버 역할을 하는 App Mesh 제어 영역에 대한 연결과 관련된 지표를 내보냅니다. 프록시가 제어 영역에서 장기간 비동기화될 때 알림을 받으려면 이러한 지표 중 일부를 모니터링하는 것이 좋습니다. 제어 영역에 대한 연결이 끊어지거나 업데이트가 실패하면 프록시가 App Mesh에서 App Mesh API를 통한 메시 변경을 비롯한 새 구성을 수신하지 못합니다.

  • control_plane.connected_state—프록시가 App Mesh에 연결된 경우 이 지표는 1로 설정되고, 그렇지 않으면 0으로 설정됩니다.

  • *.update_rejected—Envoy에서 거부한 구성 업데이트의 총 수. 이것은 일반적으로 사용자 구성 오류로 인한 것입니다. 예를 들어 Envoy에서 읽을 수 없는 파일에서 TLS 인증서를 읽도록 App Mesh를 구성하면 해당 인증서의 경로가 포함된 업데이트가 거부됩니다.

    • 리스너 업데이트가 거부된 경우 통계는 listener_manager.lds.update_rejected가 됩니다.

    • 클러스터 업데이트가 거부된 경우 통계는 cluster_manager.cds.update_rejected가 됩니다.

  • *.update_success—App Mesh에서 프록시에 대해 성공적으로 수행한 구성 업데이트 수. 여기에는 새 Envoy 컨테이너가 시작될 때 전송되는 초기 구성 페이로드가 포함됩니다.

    • 리스너 업데이트가 성공한 경우 통계는 listener_manager.lds.update_success가 됩니다.

    • 클러스터 업데이트가 성공한 경우 통계는 cluster_manager.cds.update_success가 됩니다.

관리 서버 메트릭 세트는 Envoy 설명서의 관리 서버를 참조하세요.