使用 Envoy 指標監控您的應用程式 - AWS App Mesh

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Envoy 指標監控您的應用程式

Envoy 將其指標分類為以下主要類別:

  • 下游 — 與進入代理伺服器的連線和要求相關的測量結果。

  • 上游 — 與代理伺服器所發出之外送連線和要求相關的測量結果。

  • 伺服器 — 描述 Envoy 內部狀態的測量結果。其中包括正常運行時間或分配內存等指標。

在 App Mesh 中,代理攔截上游和下游流量。例如,從您的客戶收到的請求以及服務容器發出的請求都被 Envoy 分類為下游流量。為了區分這些不同類型的上游和下游流量,App Mesh 會根據相對於您的服務的流量方向進一步分類 Envoy 指標:

  • Ingress — 與流向服務容器的連線和要求相關的量度和資源。

  • 出:與從服務容器流動到最終從 Amazon ECS 任務或 Kubernetes 網繭流出的連線和請求相關的度量和資源。

下圖顯示 Proxy 和服務容器之間的通訊。

資源命名慣例

了解 Envoy 如何查看您的網格以及其資源如何映射回您在 App Mesh 中定義的資源非常有用。這些是 App Mesh 配置的主要特使資源:

  • 監聽器 — Proxy 監聽下游連線的位址和連接埠。在上一張圖片中,App Mesh 會針對進入 Amazon ECS 任務或 Kubernetes 網繭的流量建立輸入接聽程式,以及用於流量離開服務容器的輸出接聽程式。

  • 叢集 — 代理伺服器連線和路由傳送流量的具名上游端點群組。在 App Mesh 中,您的服務容器會表示為叢集,以及您的服務可連線到的所有其他虛擬節點。

  • 路線 (Routes)-這些對應於您在網格中定義的路線。它們包含代理匹配請求以及發送請求的目標集群的條件。

  • 端點和叢集載入指派 — 上游叢集的 IP 位址。當您將虛擬節點用AWS Cloud Map作服務探索機制時,App Mesh 會將探索到的服務執行個體做為端點資源傳送至 Proxy。

  • — 包括但不限於您的加密金鑰和 TLS 憑證。當AWS Certificate Manager作用戶端和伺服器憑證的來源使用時,App Mesh 會將公用和私有憑證作為秘密資源傳送至您的 Proxy。

App Mesh 使用一致的配置來命名 Envoy 資源,您可以使用這些資源與您的網格建立關聯。

了解偵聽器和集群的命名方案對於了解 Envoy 在 App Mesh 中的指標非常重要。

監聽器名稱

監聽程式是使用下列格式如下:

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 旁邊執行的服務建立叢集,以便代理伺服器可以將輸入流量傳送至該伺服器。

例如,如果您有一個名為監聽連接埠上my-virtual-node的 http 流量的虛擬節點,8080而該虛擬節點位於名為的網格中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

範例 App Mesh

為了說明 Envoy 中可用的指標,以下示例應用程序具有三個虛擬節點。網狀中的虛擬服務、虛擬路由器和路由可以忽略,因為它們不會反映在 Envoy 的指標中。在此範例中,所有服務都會接聽連接埠 8080 上的 http 流量。

我們建議將環境變數新增ENABLE_ENVOY_STATS_TAGS=1至網狀中執行的 Envoy 代理容器。這會將下列指標維度新增至 Proxy 發出的所有指標:

  • appmesh.mesh

  • appmesh.virtual_node

  • appmesh.virtual_gateway

這些標籤設定為網狀、虛擬節點或虛擬閘道的名稱,以允許使用網狀中的資源名稱篩選指標。

資源名稱

網站虛擬節點的代理具有以下資源:

  • 兩個用於入口和出口流量的接聽程式:

    • lds_ingress_0.0.0.0_15000

    • lds_egress_0.0.0.0_15001

  • 兩個輸出叢集,代表兩個虛擬節點後端:

    • 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-與使者的輸入網路連線總數。

  • listener.0.0.0.0_15001.downstream_cx_total-與使者的出口網路連線總數。

如需完整的監聽器測量結果集,請參閱 Envoy 說明文件中的統計資料

叢集指標範例

  • cluster_manager.active_clusters-Envoy 已建立至少一個連線的叢集總數。

  • cluster_manager.warming_clusters特使尚未連線的叢集總數。

下列叢集測量結果使用的格式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 文件中的統計資料

管理伺服器度量

特使還發出與其與 App Mesh 控制平面的連接相關的指標,該控制平面充當 Envoy 的管理服務器。我們建議您監視其中一些測量結果,以便在 Proxy 長時間從控制平面不同步處理時通知您。失去與控制平面的連線或失敗的更新會導致 Proxy 從 App Mesh 接收新的設定,包括透過 App Mesh API 進行的網狀變更。

  • control_plane.connected_state當代理連接到 App Mesh 時,此度量設置為 1,否則為 0。

  • *.update_rejectedEnvoy 拒絕的組態更新總數。這些通常是由於用戶配置錯誤所致。例如,如果您將 App Mesh 設定為從 Envoy 無法讀取的檔案讀取 TLS 憑證,則會拒絕包含該憑證路徑的更新。

    • 對於更新的偵聽器被拒絕,統計數據將是listener_manager.lds.update_rejected

    • 對於集群更新被拒絕,統計數據將是cluster_manager.cds.update_rejected

  • *.update_successApp Mesh 對您的代理進行的成功配置更新次數。其中包括啟動新 Envoy 容器時傳送的初始組態承載。

    • 對於監聽器更新成功,統計數據將是listener_manager.lds.update_success

    • 對於群集更新成功,統計數據將是cluster_manager.cds.update_success

如需管理伺服器測量結果集,請參閱 Envoy 文件中的管理伺服器