要求 Proxy 記錄
Cloud Service Mesh 頁面提供 Cloud Logging 中兩種不同類型的記錄檔連結:存取記錄 (也稱為 Envoy 記錄) 和流量記錄 (也稱為 Google Cloud 觀測功能存取記錄)。
存取記錄檔
啟用存取記錄
啟用存取記錄所需的步驟取決於 Cloud Service Mesh 類型 (受管理或叢集內):
代管
請按照操作說明啟用受管理的 Cloud Service Mesh 中的存取記錄。
叢集內
請按照操作說明啟用叢集內 Cloud Service Mesh 的存取記錄。
查看存取記錄檔
如要在記錄檔探索工具中查看存取記錄,請按照下列步驟操作:
- 前往「Logs Explorer」(記錄檔探索工具): 
- 選取適當的 Google Cloud 專案。 
- 執行以下查詢: - resource.type="k8s_container" \ resource.labels.container_name="istio-proxy" resource.labels.cluster_name="CLUSTER_NAME" \ resource.labels.namespace_name="NAMESPACE_NAME" \ resource.labels.pod_name="POD_NAME"
流量記錄檔
啟用流量記錄檔
根據預設,系統會啟用流量記錄檔,除非 Cloud Service Mesh 已安裝在Google Distributed Cloud 搭配 Istio CA (舊稱 Citadel) 上。
如要在 Google Distributed Cloud 上啟用流量記錄,並使用 Istio CA,請在安裝叢集內 Cloud Service Mesh 時使用 --option stackdriver 標記。或者,您也可以在安裝叢集內 Cloud Service Mesh後,使用 Istio CA 在 Google Distributed Cloud 上啟用流量記錄。
查看流量記錄
在記錄檔探索工具中查看流量記錄
如要在 記錄檔探索工具中查看流量記錄,請按照下列步驟操作:
- 前往「Logs Explorer」(記錄檔探索工具): 
- 選取適當的 Google Cloud 專案。 
- 視您要查看用戶端還是伺服器存取記錄而定,執行下列查詢: - 伺服器紀錄- resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_NAME/logs/server-accesslog-stackdriver"- 用戶端記錄- resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_NAME/logs/client-accesslog-stackdriver"
在 Anthos 服務網格頁面中查看流量記錄
如要在指定時間範圍內,查看服務的 Cloud Service Mesh 頁面中的流量記錄,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Cloud Service Mesh」頁面。 
- 在「服務」下方,選取要檢查的服務名稱。 
- 前往「指標」頁面。 
- 從「時間範圍」下拉式選單指定時間範圍,或使用時間軸設定自訂範圍。 
- 按一下「查看流量記錄」。 
流量記錄檔的名稱為 server-accesslog-stackdriver,並附加至服務使用的對應監控資源 (k8s_container 或 gce_instance)。流量記錄包含下列資訊:
- HTTP 要求屬性,例如 ID、網址、大小、延遲時間和常見標頭。 
- 來源和目的地工作負載資訊,例如名稱、命名空間、身分和常見標籤。 
- 如果啟用追蹤功能,則會顯示追蹤資訊,例如取樣、追蹤 ID 和跨度 ID。 
記錄項目範例如下:
{
  insertId: "1awb4hug5pos2qi"
  httpRequest: {
    requestMethod: "GET"
    requestUrl: "YOUR-INGRESS/productpage"
    requestSize: "952"
    status: 200
    responseSize: "5875"
    remoteIp: "10.8.0.44:0"
    serverIp: "10.56.4.25:9080"
    latency: "1.587232023s"
    protocol: "http"
  }
  resource: {
    type: "k8s_container"
    labels: {
      location: "us-central1-a"
      project_id: "YOUR-PROJECT"
      pod_name: "productpage-v1-76589d9fdc-ptnt9"
      cluster_name: "YOUR-CLUSTER-NAME"
      container_name: "productpage"
      namespace_name: "default"
    }
  }
  timestamp: "2020-04-28T19:55:21.056759Z"
  severity: "INFO"
  labels: {
    destination_principal: "spiffe://cluster.local/ns/default/sa/bookinfo-productpage"
    response_flag: "-"
    destination_service_host: "productpage.default.svc.cluster.local"
    source_app: "istio-ingressgateway"
    service_authentication_policy: "MUTUAL_TLS"
    source_name: "istio-ingressgateway-5ff85d8dd8-mwplb"
    mesh_uid: "YOUR-MESH-UID"
    request_id: "021ce752-9001-4ac6-b6d6-3b15f5d3632"
    destination_namespace: "default"
    source_principal:  "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
    destination_workload: "productpage-v1"
    destination_version: "v1"
    source_namespace: "istio-system"
    source_workload: "istio-ingressgateway"
    destination_name: "productpage-v1-76589d9fdc-ptnt9"
    destination_app: "productpage"
  }
  trace: "projects/YOUR-PROJECT/traces/d4197f59b7a43e3aeff3571bac99d536"
  receiveTimestamp: "2020-04-29T03:07:14.362416217Z"
  spanId: "43226343ca2bb2b1"
  traceSampled: true
  logName: "projects/YOUR-PROJECT/logs/server-accesslog-stackdriver"
  receiveTimestamp: "2020-04-28T19:55:32.185229100Z"
}解讀 Anthos 服務網格遙測資料
以下各節將說明如何查看網格狀態,並檢查各種遙測資料,其中包含有助於排除問題的詳細資訊。
解讀控制層指標
使用叢集內控制層安裝 Cloud Service Mesh 時,istiod 預設會將指標匯出至 Google Cloud Observability 進行監控。istiod 會在這些指標前方加上 istio.io/control,並提供控制平面狀態的深入分析資訊,例如與每個控制平面執行個體連線的 Proxy 數量、設定事件、推送和驗證。
請按照下列步驟觀察或排解控制平面問題。
- 載入範例資訊主頁: - git clone https://github.com/GoogleCloudPlatform/monitoring-dashboard-samples && cd monitoring-dashboard-samples/dashboards && git checkout servicemesh 
- 安裝 Cloud Service Mesh 資訊主頁: - gcloud monitoring dashboards create --config-from-file=dashboards/servicemesh/anthos-service-mesh-control-plane-monitoring.json 
- 在清單中找出名為 - Istio Control Plane Dashboard的資訊主頁。詳情請參閱「查看已安裝的資訊主頁」。
如需可用指標的完整清單,請參閱「匯出的指標」。
診斷設定延遲問題
下列步驟說明如何使用 pilot_proxy_convergence_time 指標,診斷設定變更與所有 Proxy 收斂之間的延遲。
- 在 Pod 中執行殼層指令: - kubectl exec -it $(kubectl get pod -l app=pilot -o jsonpath='{.items[0].metadata.name}' -n istio-system) -n istio-system -c istio-proxy -- curl -s
- 在指標中存取 - convergence的- localhost:15014和- grep:- curl http://localhost:15014/metrics | grep convergence 
解讀 Google Cloud Observability 存取記錄
以下說明如何使用 Google Cloud 觀測功能存取記錄來排解連線問題。根據預設,Google Cloud 觀測功能的存取/流量記錄會啟用。
Cloud Service Mesh 會將資料匯出至 Google Cloud 可觀測性存取記錄,協助您偵錯下列類型的問題:
- 流量流向和失敗
- 端對端要求轉送
根據預設,Google Kubernetes Engine 上的 Cloud Service Mesh 安裝作業會啟用 Google Cloud 觀測功能存取記錄。您可以重新執行 asmcli install,啟用 Google Cloud Observability 存取記錄。使用與原先安裝相同的選項,但省略停用 Stackdriver 的自訂疊加層。
存取記錄分為兩種類型:
- 伺服器存取記錄可提供伺服器端的請求檢視畫面。這些指令碼位於 - server-accesslog-stackdriver下方,並附加至- k8s_container監控的資源。請使用下列網址語法,顯示伺服器端存取記錄:- https://console.cloud.google.com/logs/viewer?advancedFilter=logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"&project=PROJECT_ID 
- 用戶端存取記錄會提供要求的用戶端端檢視畫面。這些檔案位於 - client-accesslog-stackdriver下方,並附加至- k8s_pod受控資源。使用下列網址語法,即可顯示用戶端存取記錄:- https://console.cloud.google.com/logs/viewer?advancedFilter=logName="projects/PROJECT_ID/logs/client-accesslog-stackdriver"&project=PROJECT_ID 
存取記錄包含下列資訊:
- HTTP 要求屬性,例如 ID、網址、大小、延遲時間和常見標頭。
- 來源和目的地工作負載資訊,例如名稱、命名空間、身分和常見標籤。
- 來源和目的地的標準服務和修訂版本資訊。
- 如果啟用追蹤功能,記錄會包含追蹤資訊,例如取樣、追蹤 ID 和時距 ID。
在 Google Cloud Observability 存取記錄中顯示的資訊,源自於您在 Istio 設定中啟用的 Envoy 存取記錄。這些檔案包含下列標頭:
- route_name
- upstream_cluster
- X-Envoy-Original-Path
- X-Envoy-Original-Host
以下是記錄項目範例:
{
  "insertId": "1j84zg8g68vb62z",
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "http://35.235.89.201:80/productpage",
    "requestSize": "795",
    "status": 200,
    "responseSize": "7005",
    "remoteIp": "10.168.0.26:0",
    "serverIp": "10.36.3.153:9080",
    "latency": "0.229384205s",
    "protocol": "http"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "cluster_name": "istio-e2e22",
      "namespace_name": "istio-bookinfo-1-68819",
      "container_name": "productpage",
      "project_id": "***",
      "location": "us-west2-a",
      "pod_name": "productpage-v1-64794f5db4-8xbtf"
    }
  },
  "timestamp": "2020-08-13T21:37:42.963881Z",
  "severity": "INFO",
  "labels": {
    "protocol": "http",
    "upstream_host": "127.0.0.1:9080",
    "source_canonical_service": "istio-ingressgateway",
    "source_namespace": "istio-system",
    "x-envoy-original-path": "",
    "source_canonical_revision": "latest",
    "connection_id": "32",
    "upstream_cluster": "inbound|9080|http|productpage.istio-bookinfo-1-68819.svc.cluster.local",
    "requested_server_name": "outbound_.9080_._.productpage.istio-bookinfo-1-68819.svc.cluster.local",
    "destination_version": "v1",
    "destination_workload": "productpage-v1",
    "source_workload": "istio-ingressgateway",
    "destination_canonical_revision": "v1",
    "mesh_uid": "cluster.local",
    "source_principal": "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account",
    "x-envoy-original-dst-host": "",
    "service_authentication_policy": "MUTUAL_TLS",
    "destination_principal": "spiffe://cluster.local/ns/istio-bookinfo-1-68819/sa/bookinfo-productpage",
    "response_flag": "-",
    "log_sampled": "false",
    "destination_service_host": "productpage.istio-bookinfo-1-68819.svc.cluster.local",
    "destination_name": "productpage-v1-64794f5db4-8xbtf",
    "destination_canonical_service": "productpage",
    "destination_namespace": "istio-bookinfo-1-68819",
    "source_name": "istio-ingressgateway-6845f6d664-lnfvp",
    "source_app": "istio-ingressgateway",
    "destination_app": "productpage",
    "request_id": "39013650-4e62-9be2-9d25-78682dd27ea4",
    "route_name": "default"
  },
  "logName": "projects/***/logs/server-accesslog-stackdriver",
  "trace": "projects/***t/traces/466d77d15753cb4d7749ba5413b5f70f",
  "receiveTimestamp": "2020-08-13T21:37:48.758673203Z",
  "spanId": "633831cb1fda4fd5",
  "traceSampled": true
}您可以透過多種方式使用這份記錄:
- 整合 Cloud Trace,這是 Cloud Service Mesh 中的選用功能。
- 將流量記錄匯出至 BigQuery,以便執行「選取所有要求超過 5 秒」等查詢。
- 建立記錄指標。
- 排解 404和503錯誤
排解 404 和 503 錯誤
以下範例說明如何在要求失敗並顯示 404 或 503 回應碼時,使用這份記錄來排解問題。
- 在用戶端存取記錄中搜尋類似下列的項目: - httpRequest: { requestMethod: "GET" requestUrl: "://IP_ADDRESS/src/Util/PHP/eval-stdin.php" requestSize: "2088" status: 404 responseSize: "75" remoteIp: "10.168.0.26:34165" serverIp: "10.36.3.149:8080" latency: "0.000371440s" protocol: "http" }
- 前往存取記錄項目中的標籤。找出如下所示的 - response_flag欄位:- response_flag: "NR" - NR值是- NoRoute的縮寫,表示找不到目的地路徑,或沒有相符的下游連線篩選器鏈結。同樣地,您也可以使用- response_flag標籤來排解- 503錯誤。
- 如果您在用戶端和伺服器存取記錄中都看到 - 503錯誤,請確認為每項服務設定的通訊埠名稱,與兩者之間使用的通訊協定名稱相符。舉例來說,如果 golang 二進位檔用戶端使用 HTTP 連線至 golang 伺服器,但通訊埠名稱為- http2,則通訊協定不會正確自動協商。
詳情請參閱回應標記。
解讀存取記錄檔
下列步驟說明如何使用存取記錄 (也稱為 Envoy 代理程式記錄),針對連線兩端之間的流量顯示資訊,以利排除問題。
存取記錄可用於診斷下列問題:
- 流量流向和失敗
- 端對端要求轉送
根據預設,Cloud Service Mesh 不會啟用存取記錄,且只能在整個網格中啟用。
您可以在應用程式中產生可觸發 HTTP 要求的活動,然後在來源或目的地記錄中檢查相關要求,藉此排解連線/要求失敗問題。
如果您觸發要求,並且該要求出現在來源 Proxy 記錄中,表示 iptables 流量重新導向功能運作正常,且 Envoy Proxy 正在處理流量。如果您在記錄中看到錯誤,請產生 Envoy 設定傾印,並檢查 Envoy 叢集設定,確保設定正確無誤。如果您看到要求,但記錄中沒有錯誤,請改為檢查目的地 Proxy 記錄。
如果要求出現在目的地 Proxy 記錄中,表示網格本身運作正常。如果您看到錯誤,請執行 Envoy 設定傾印,並驗證在事件監聽器設定中設定的流量通訊埠的正確值。
如果在執行上述步驟後問題仍未解決,Envoy 可能無法自動協商 sidecar 與其應用程式 Pod 之間的通訊協定。請確認 Kubernetes 服務通訊埠名稱 (例如 http-80) 與應用程式使用的通訊協定相符。
使用記錄檔探索工具查詢記錄檔
您可以使用記錄檔探索工具介面查詢特定存取記錄。舉例來說,如要查詢已啟用 MULTUAL_TLS 且使用 grpc 通訊協定的所有要求,請在伺服器存取記錄查詢中附加以下內容:
labels.protocol="grpc" labels.service_authentication_policy="MULTUAL_TLS"
設定存取記錄政策
如要為受管理的 Cloud Service Mesh 設定 Proxy 記錄,請參閱 Envoy 存取記錄。
如要使用叢集內控制層為 Cloud Service Mesh 設定存取記錄政策,請按照下列步驟操作:
- 建立 - IstioOperator自訂疊加檔案,其中包含適用於您情境的- AccessLogPolicyConfig值。
- 使用 - --custom_overlay選項將這個檔案傳遞至- asmcli,以便更新叢集內控制層設定。如要瞭解如何搭配自訂疊加檔案執行- asmcli install,請參閱「安裝選用功能」。
查看服務或工作負載專屬資訊
如果您遇到的是特定服務或工作負載的問題,而非網格全域的問題,請檢查個別 Envoy 代理程式,並從中收集相關資訊。如要收集特定工作負載及其 Proxy 的相關資訊,您可以使用 pilot-agent:
kubectl exec POD_NAME -n NAMESPACE_NAME -c istio-proxy -- pilot-agent request GET SCOPE
在這個範例中,SCOPE 是下列其中一種:
- certs- Envoy 例項中的憑證
- clusters:已設定 Envoy 的叢集
- config_dump:轉儲 Envoy 設定
- listeners- 已設定 Envoy 的事件監聽器
- logging- 查看及變更記錄設定
- stats- Envoy 統計資料
- stats/prometheus- Envoy 統計資料做為 Prometheus 記錄
查看 Proxy 通訊端口狀態
您可以使用下列程序,直接檢查 Envoy 代理程式通訊端的狀態。
- 顯示已建立的通訊端口清單,包括 - TIME_WAIT狀態中的通訊端口,如果數量過多,可能會對可擴充性造成負面影響:- kubectl exec POD_NAME -n NAMESPACE_NAME -c istio-proxy -- ss -anopim 
- 顯示 Socket 統計資料摘要: - kubectl exec POD_NAME -n NAMESPACE_NAME -c istio-proxy -- ss -s 
詳情請參閱「ss 指令簡介」。
istio-proxy 和 istio-init 記錄
此外,請擷取 istio-proxy 記錄並查看內容,找出可能導致問題的錯誤:
kubectl logs POD_NAME -n NAMESPACE_NAME -c istio-proxy
您也可以對 init 容器執行相同操作:
kubectl logs POD_NAME -n NAMESPACE_NAME -c istio-init
後續步驟
- 與 Cloud Trace 整合。Cloud Trace 是 Cloud Service Mesh 中的選用功能。