摘要
Istio 最簡單的日志類型是 Envoy 的通路日志。Envoy 代理列印通路資訊到标準輸出。Envoy 容器的标準輸出能夠通過 kubectl logs 指令列印出來。
實作效果
擷取資料平面(Data Plane)中代理(Envoy)的日志, Istio 架構中代理負責協調和控制微服務之間的所有網絡通信,他們收集和報告所有網格流量的遙測資料,
本示例中以擷取productpage 的代理(Envoy)的日志為例,通路 https://istio.bbx.com/productpage ,觀察通路日志。
Istio 架構圖
前置條件
- Kubernetes 叢集
- 正确部署bookinfo 示例,本示例中配置通過域名通路
- 正确安裝istio ,可以注入 sidecar
開啟Envoy 的通路日志
- Istio 提供了多種方式,推薦使用 遙測API 進行
- 使用遙測API 開啟通路日志 ---關于Telemetry 的詳細資訊 請通路Istio官網:https://istio.io/latest/docs/reference/config/telemetry/
# mesh-default.yaml apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: mesh-default namespace: istio-system spec: accessLogging: - providers: - name: envoy |
kubectl apply -f mesh-default.yaml |
kubectl get telemetry -n istio-system |
通路服務
- 從浏覽器請求 https://istio.bbx.com/productpage
擷取日志
- 擷取productpage 代理的日志
kubectl logs -f -l app=productpage -c istio-proxy # -f: 動态檢視日志 # -l: 指定檢視的label |
#如果沒有指定 accessLogFormat ,使用的是預設的日志格式 #從productpage 發起通路 /details 的日志 --出方向 [2022-10-18T02:54:38.826Z] "GET /details/0 HTTP/1.1" 200 - via_upstream - "-" 0 178 2 2 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42" "ae498530-0993-9ee7-9dcc-ce300f5fb14a" "details:9080" "10.233.70.92:9080" outbound|9080||details.default.svc.cluster.local 10.233.118.37:49836 11.233.43.194:9080 10.233.118.37:51802 - default #從productpage 發起通路 /reviews 的日志 --出方向 [2022-10-18T02:54:38.832Z] "GET /reviews/0 HTTP/1.1" 200 - via_upstream - "-" 0 375 17 16 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42" "ae498530-0993-9ee7-9dcc-ce300f5fb14a" "reviews:9080" "10.233.108.99:9080" outbound|9080||reviews.default.svc.cluster.local 10.233.118.37:58706 11.233.6.43:9080 10.233.118.37:56388 - default #從浏覽器通路 productpage 的日志 ---入方向 [2022-10-18T02:54:38.821Z] "GET /productpage HTTP/1.1" 200 - via_upstream - "-" 0 5299 31 30 "11.11.11.11,192.168.0.164" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42" "ae498530-0993-9ee7-9dcc-ce300f5fb14a" "istio.bbx.com" "10.233.118.37:9080" inbound|9080|| 127.0.0.6:42287 10.233.118.37:9080 192.168.0.164:0 outbound_.9080_._.productpage.default.svc.cluster.local default |
- 日志格式,詳細資訊請參考官方文檔:https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#format-rules
Log operator | access log in sleep | 示例 |
[%START_TIME%] | 開始時間 | [2022-10-18T02:54:38.821Z] |
\"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" | 方法\路徑\協定 | "GET /productpage HTTP/1.1" |
%RESPONSE_CODE% | 響應碼 | 200 |
%RESPONSE_FLAGS% | 響應标志 | - |
%RESPONSE_CODE_DETAILS% | via_upstream | |
%CONNECTION_TERMINATION_DETAILS% | - | |
\"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" | "-" | |
%BYTES_RECEIVED% | 接收位元組 | |
%BYTES_SENT% | 發送位元組 | 5299 |
%DURATION% | 31 | |
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% | 30 | |
\"%REQ(X-FORWARDED-FOR)%\" | "11.11.11.11,192.168.0.164" | |
\"%REQ(USER-AGENT)%\" | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42" | |
\"%REQ(X-REQUEST-ID)%\" | 請求ID | "ae498530-0993-9ee7-9dcc-ce300f5fb14a" |
\"%REQ(:AUTHORITY)%\" | "istio.bbx.com" | |
\"%UPSTREAM_HOST%\" | 上遊主機 | "10.233.118.37:9080" |
%UPSTREAM_CLUSTER% | inbound|9080|| | |
%UPSTREAM_LOCAL_ADDRESS% | 上遊位址 | 127.0.0.6:42287 |
%DOWNSTREAM_LOCAL_ADDRESS% | 下遊本地位址 | 10.233.118.37:9080 |
%DOWNSTREAM_REMOTE_ADDRESS% | 下遊遠端位址 | 192.168.0.164:0 |
%REQUESTED_SERVER_NAME% | 請求服務名稱 | outbound_.9080_._.productpage.default.svc.cluster.local |
%ROUTE_NAME% | default |