

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

# 使用 Envoy 指標監控您的應用程式
<a name="envoy-metrics"></a>

**重要**  
支援終止通知：2026 年 9 月 30 日， AWS 將停止支援 AWS App Mesh。2026 年 9 月 30 日之後，您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊，請參閱此部落格文章[從 遷移 AWS App Mesh 至 Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)。

Envoy 將其指標分類為下列主要類別：
+ **下游** - 與傳入代理的連線和請求相關的指標。
+ **上游** - 與代理發出的傳出連線和請求相關的指標。
+ **伺服器** - 描述 Envoy 內部狀態的指標。這些包括運作時間或配置記憶體等指標。

在 App Mesh 中，代理會攔截上游和下游流量。例如，從您的用戶端收到的請求以及您的服務容器提出的請求，會分類為 Envoy 的下游流量。為了區分這些不同類型的上游和下游流量，App Mesh 會根據相對於服務的流量方向進一步分類 Envoy 指標：
+ **傳入** - 與流向服務容器的連線和請求相關的指標和資源。
+ **輸出** - 與從服務容器流出，最終從您的 Amazon ECS 任務或 Kubernetes Pod 流出之連線和請求相關的指標和資源。

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

![\[Diagram showing proxy and service containers within an Amazon ECS task or Kubernetes Pod with ingress and egress flow.\]](http://docs.aws.amazon.com/zh_tw/app-mesh/latest/userguide/images/task-proxy-container.png)


**資源命名慣例**

了解 Envoy 如何檢視您的網格及其資源如何映射回您在 App Mesh 中定義的資源很有用。以下是 App Mesh 設定的主要 Envoy 資源：
+ **接聽程式** - 代理接聽下游連線的地址和連接埠。在上圖中，App Mesh 會為傳入 Amazon ECS 任務或 Kubernetes Pod 的流量建立傳入接聽程式，並為離開服務容器的流量建立輸出接聽程式。
+ **叢集** - 代理連線和路由流量的具名上游端點群組。在 App Mesh 中，您的服務容器會呈現為叢集，以及您服務可以連線的所有其他虛擬節點。
+ **Routes** - 這些對應於您在網格中定義的路由。它們包含代理符合請求的條件，以及傳送請求的目標叢集。
+ **端點和叢集負載指派** - 上游叢集的 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 Pod 中的流量會導向連接埠 `15000`和 `15001`。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 的 Secret Discovery Service 擷取秘密時，您可以定義端點的叢集，例如 TLS：`static_cluster_sds_unix_socket`。

## 範例應用程式指標
<a name="envoy-metrics-examples"></a>

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

![\[Diagram showing Envoy proxies in product-details, cart, and website services of an online store mesh.\]](http://docs.aws.amazon.com/zh_tw/app-mesh/latest/userguide/images/envoy-metric-example1.png)


我們建議您將環境變數新增至網格中執行`ENABLE_ENVOY_STATS_TAGS=1`的 Envoy 代理容器。這會將下列指標維度新增至代理發出的所有指標：
+ `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`- 輸入網路連線至 Envoy 的總數。
+ `listener.0.0.0.0_15001.downstream_cx_total`- 輸出網路連線至 Envoy 的總數。

如需完整的接聽程式指標集，請參閱 Envoy 文件中的[統計資料](https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/stats)。

**範例叢集指標**
+ `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 文件中的[統計資料](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/stats)。

**管理伺服器指標**

Envoy 也會發出與 App Mesh 控制平面連線相關的指標，做為 Envoy 的管理伺服器。我們建議您監控其中一些指標，以便在代理與控制平面長時間取消同步時通知您。失去與控制平面的連線或更新失敗，會使您的代理無法從 App Mesh 接收新組態，包括透過 App Mesh APIs進行的網格變更。
+ `control_plane.connected_state`- 當代理連線到 App Mesh 時，此指標設定為 1，否則為 0。
+ `*.update_rejected`- Envoy 拒絕的組態更新總數。這些通常是由於使用者設定錯誤所致。例如，如果您設定 App Mesh 從 Envoy 無法讀取的檔案讀取 TLS 憑證，則會拒絕包含該憑證路徑的更新。
  + 對於已更新的接聽程式遭拒，統計資料將為 `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 文件中的 [Management Server](https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/mgmt_server)。