要求 Proxy 記錄
Cloud Service Mesh 頁面提供 Cloud Logging 中兩種不同類型記錄的連結:存取記錄 (也稱為 Envoy 記錄) 和流量記錄 (也稱為 Google Cloud Observability 存取記錄)。
存取記錄檔
啟用存取記錄
啟用存取記錄的必要步驟取決於 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"
流量記錄
啟用流量記錄檔
除非您在 Google Distributed Cloud 上安裝 Cloud Service Mesh,並使用 Istio CA (先前稱為 Citadel),否則系統預設會啟用流量記錄檔。
如要使用 Istio CA 在 Google Distributed Cloud 上啟用流量記錄,請在安裝叢集內 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 時,系統預設會將指標匯出至 Google Cloud Observability 進行監控。istiod
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在指標中存取
localhost:15014和grep(convergence):curl http://localhost:15014/metrics | grep convergence
解讀 Google Cloud Observability 存取記錄
以下資訊說明如何使用 Google Cloud Observability 存取記錄,排解連線問題。Google Cloud Observability 預設會啟用存取/流量記錄。
Cloud Service Mesh 會將資料匯出至 Google Cloud Observability 存取記錄,協助您偵錯下列類型的問題:
- 流量和失敗
- 端對端要求轉送
在 Google Kubernetes Engine 上安裝 Cloud Service Mesh 時,系統預設會啟用 Google Cloud Observability 存取記錄。如要啟用 Google Cloud Observability 存取記錄,請重新執行 asmcli install。使用您原本安裝的相同選項,但省略停用 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。
在 Istio 設定中啟用 Envoy 存取記錄後,Google Cloud Observability 存取記錄中顯示的資訊,就是來自 Envoy 存取記錄。這些標頭包含下列標頭:
route_nameupstream_clusterX-Envoy-Original-PathX-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 Proxy 記錄),顯示連線兩端的流量,以利進行疑難排解。
存取記錄有助於診斷下列問題:
- 流量和失敗
- 端對端要求轉送
Cloud Service Mesh 預設不會啟用存取記錄,且只能在整個網格中全域啟用。
您可以在應用程式中產生活動,觸發 HTTP 要求,然後檢查來源或目的地記錄中的相關要求,藉此排解連線/要求失敗問題。
如果觸發要求並顯示在來源 Proxy 記錄中,表示 iptables 流量重新導向功能正常運作,且 Envoy Proxy 正在處理流量。如果記錄中顯示錯誤,請產生 Envoy 設定傾印,並檢查 Envoy 叢集設定,確保設定正確。如果看到要求,但記錄中沒有錯誤,請改為檢查目的地 Proxy 記錄。
如果要求顯示在目的地 Proxy 記錄中,表示網格本身運作正常。如果看到錯誤,請執行 Envoy 設定傾印,並驗證接聽器設定中設定的流量通訊埠值是否正確。
如果執行上述步驟後問題仍未解決,可能是 Envoy 無法在 Sidecar 和應用程式 Pod 之間自動協商通訊協定。確認 Kubernetes 服務通訊埠名稱 (例如 http-80) 與應用程式使用的通訊協定相符。
使用 Logs Explorer 查詢記錄
您可以使用 Logs Explorer 介面查詢特定存取記錄。舉例來說,如要查詢已啟用 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- Dumps the Envoy configurationlisteners- 已設定 Envoy 的監聽器logging- 查看及變更記錄設定stats- Envoy 統計資料stats/prometheus- Envoy 統計資料 (Prometheus 記錄)
查看 Proxy Socket 狀態
您可以直接檢查 Envoy 代理程式通訊端的狀態,方法如下:
顯示已建立的通訊端清單,包括
TIME_WAIT狀態的通訊端,如果數量過多,可能會對擴充性造成負面影響:kubectl exec POD_NAME -n NAMESPACE_NAME -c istio-proxy -- ss -anopim
顯示通訊端統計資料摘要:
kubectl exec POD_NAME -n NAMESPACE_NAME -c istio-proxy -- ss -s
詳情請參閱「An Introduction to the ss Command」。
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 的選用功能。