部署在資料平面(即加入網格的Kubernetes叢集)的Envoy Proxy可以輸出所有訪問日誌。ASM支援自訂Envoy Proxy輸出的訪問日誌內容。本文介紹如何自訂Envoy Proxy輸出的訪問日誌內容。
前提條件
步驟一:啟用訪問日誌
ASM執行個體版本為1.17.2.35以下
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在基本資料頁面右上方,單擊功能設定。
在功能設定更新面板,選中開啟訪問日誌並將其列印到容器標準輸出,然後單擊確定。
istio-proxy容器預設輸出包含以下欄位的日誌。如果關閉訪問日誌,istio-proxy容器將不會產生JSON格式的訪問日誌。
ASM執行個體版本為1.17.2.35及以上
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在可觀測配置頁面,按需單擊全域、命名空間或自訂頁簽。
若您選擇命名空間頁簽,請單擊建立,按需選擇命名空間。
若您選擇自訂頁簽,請單擊建立,按需選擇命名空間,輸入名稱和匹配標籤。
在日誌設定地區,開啟啟用日誌輸出開關,然後單擊提交。
開啟開關後,服務網格資料平面Sidecar或網關會將訪問日誌輸出至容器標準輸出。ASM還支援日誌過濾功能,詳情請參見日誌過濾。
在資料平面Sidecar容器的標準輸出查看日誌。
下文以使用kubectl查看訪問日誌為例進行說明。
執行以下命令,查看Sidecar日誌。
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1
執行以下命令,查看入口網關日誌。
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
(可選)通過Container Service控制台查看訪問日誌。
如果您使用阿里雲Container Service叢集,還可以通過Container Service控制台查看訪問日誌。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在容器組頁面,單擊目標Pod名稱,然後在頁面下方單擊日誌頁簽,查看訪問日誌。
關於日誌的更多資訊,請參見可觀測配置和啟用控制平面日誌採集和日誌警示(新版)。
步驟二:自訂資料面訪問日誌內容
ASM執行個體版本為1.17.2.35以下
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在基本資料頁面的配置資訊地區,單擊開啟訪問日誌並將其列印到容器標準輸出右側的自訂訪問日誌格式。
在自訂訪問日誌格式對話方塊下方,新增自訂訪問日誌格式,設定變數名稱為my_custom_key,變數值為%REQ(end-user)%,然後單擊確認。
本文以擷取Bookinfo樣本中HTTP請求的Header欄位end-user為例。如下圖所示,自訂訪問日誌格式時,您可以選擇ASM提供的可選欄位,也可以新增自訂欄位。選中目標欄位後,將按照自訂的訪問日誌格式輸出訪問日誌。
ASM執行個體版本為1.17.2.35及以上
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在可觀測配置頁面,按需單擊全域、命名空間或自訂頁簽。
若您選擇命名空間頁簽,請單擊建立,按需選擇命名空間。
若您選擇自訂頁簽,請單擊建立,按需選擇命名空間,輸入名稱和匹配標籤。
在日誌設定地區,按需選中欄位、修改目標欄位資訊或在最下方日誌指標右側單擊表徵圖,新增日誌欄位,然後單擊提交。
只有開啟啟用日誌輸出開關,才能自訂日誌格式。在日誌格式地區,預設選中的日誌欄位為預設必選欄位,不支援修改。日誌欄位支援從請求Header、響應Header、Envoy內建值中取值。
下文以列印請求中的accept-coding Header為例,配置變數名稱為accept-encoding,類型為請求屬性,變數值為Accept-Encoding。
執行以下命令,查看服務網格資料平面組件日誌。
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=auto
可以看到步驟4新增的Accept-Encoding Header的值,已被輸出至訪問日誌。關於日誌的更多資訊,請參見可觀測配置和啟用控制平面日誌採集和日誌警示(新版)。
步驟三:查看訪問日誌
啟用訪問日誌後,發起請求的Sidecar容器將按照自訂的訪問日誌格式輸出訪問日誌。
在瀏覽器地址欄輸入入口網關地址:productpage,訪問Productpage應用。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面頂部,設定命名空間為default,然後在productpage-v1應用右側,單擊操作列下的詳情。
在應用詳情頁面,單擊日誌頁簽,設定Container為istio-proxy。
在日誌輸出框中可以看到如下日誌。日誌中包含名為jason的end-user,表明自訂日誌內容成功。
請求耗時相關欄位說明
在Service MeshASM中,“上遊(upstream)”表示調用鏈中請求的接收方,“下遊(downstream)”表示請求的發起方。例如,服務A向服務B發起請求時,服務A為“下遊(downstream)”,服務B為“上遊(upstream)”。
變數名稱 | 變數值 | 說明 |
duration | $DURATION% |
|
request_duration | %REQUEST_DURATION% |
|
request_tx_duration | %REQUEST_TX_DURATION% |
|
response_duration | %RESPONSE_DURATION% |
|
response_tx_duration | %RESPONSE_TX_DURATION% |
|
upstream_service_time(sidecar) | %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% | 在Sidecar訪問日誌或網關日誌中,該欄位表示上遊的處理時間及與上遊進行網路通訊消耗的時間。若該時間較長,請檢查:
|
upstream_response_time(gateway) |
對於帶有Body(Content-Length > 0)的HTTP請求,Envoy是邊接收邊發給上遊(而非全部接受後發送)。如果下遊的讀取速度緩慢,將會增加上遊的讀取時間,以及上遊發送給它的上遊的時間(上遊為邊讀邊發送的方式)。
相關操作
您還可以使用Log Service採集資料平面的AccessLog。具體操作,請參見產生和採集ASM網關訪問日誌。