Envoy 存取紀錄檔記錄了通過 Envoy 進行請求 / 響應互動的相關記錄,可以方便地瞭解具體通訊過程和偵錯定位問題。
部署 httpbin
服務:
kubectl apply -f samples/httpbin/httpbin.yaml
部署 sleep
服務:
kubectl apply -f samples/sleep/sleep.yaml
httpbin
服務作為接收請求的伺服器端, sleep
服務作為傳送請求的使用者端。
還需要開啟 Envoy 存取紀錄檔,執行以下命令修改 istio 設定:
kubectl -n istio-system edit configmap istio
編輯yaml檔案的對應設定:
data:
mesh: |-
accessLogEncoding: JSON
accessLogFile: /dev/stdout
其中,accessLogEncoding
表示 accesslog 輸出格式,Istio 預定義了 TEXT
和 JSON
兩種紀錄檔輸出格式。預設使用 TEXT
,通常改成 JSON
以提升可讀性;accessLogFile
:表示 accesslog 輸出位置,通常指定到 /dev/stdout (標準輸出),以便使用 kubectl logs 來檢視紀錄檔。
保證yaml檔案後,設定隨即生效。
文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。
在 sleep
服務中向 httpbin
服務發出請求:
export SLEEP_POD=$(kubectl get pods -l app=sleep -o 'jsonpath={.items[0].metadata.name}')
kubectl exec "$SLEEP_POD" -c sleep -- curl -sS http://httpbin:8000/headers
返回結果如下:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin:8000",
"User-Agent": "curl/7.81.0-DEV",
"X-B3-Parentspanid": "ed0178f3e1f48dd1",
"X-B3-Sampled": "0",
"X-B3-Spanid": "6c38b689ee5ab0c8",
"X-B3-Traceid": "f17ce19c174cae85ed0178f3e1f48dd1",
"X-Envoy-Attempt-Count": "1",
"X-Forwarded-Client-Cert": "......"
}
}
執行以下命令,檢視sleep
服務的Envoy紀錄檔:
kubectl logs -l app=sleep -c istio-proxy
可以看到sleep
服務對httpbin
服務的呼叫的紀錄檔:
{
"authority": "httpbin:8000",
"bytes_received": 0,
"bytes_sent": 533,
"connection_termination_details": null,
"downstream_local_address": "172.24.146.239:8000",
"downstream_remote_address": "172.24.158.25:49350",
"duration": 3,
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"request_id": "ea40d320-348f-4f58-86d4-da157b0e0cca",
"requested_server_name": null,
"response_code": 200,
"response_code_details": "via_upstream",
"response_flags": "-",
"route_name": "default",
"start_time": "2022-07-04T10:00:09.401Z",
"upstream_cluster": "outbound|8000||httpbin.istio-demo.svc.cluster.local",
"upstream_host": "172.24.158.96:80",
"upstream_local_address": "172.24.158.25:41812",
"upstream_service_time": "2",
"upstream_transport_failure_reason": null,
"user_agent": "curl/7.81.0-DEV",
"x_forwarded_for": null
}
執行以下命令,檢視httpbin
服務的Envoy紀錄檔:
kubectl logs -l app=httpbin -c istio-proxy
可以看到httpbin
服務被sleep
服務呼叫的Envoy紀錄檔:
{
"authority": "httpbin:8000",
"bytes_received": 0,
"bytes_sent": 533,
"connection_termination_details": null,
"downstream_local_address": "172.24.158.96:80",
"downstream_remote_address": "172.24.158.25:41812",
"duration": 2,
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"request_id": "ea40d320-348f-4f58-86d4-da157b0e0cca",
"requested_server_name": "outbound_.8000_._.httpbin.istio-demo.svc.cluster.local",
"response_code": 200,
"response_code_details": "via_upstream",
"response_flags": "-",
"route_name": "default",
"start_time": "2022-07-04T10:00:09.401Z",
"upstream_cluster": "inbound|80||",
"upstream_host": "172.24.158.96:80",
"upstream_local_address": "127.0.0.6:33665",
"upstream_service_time": "1",
"upstream_transport_failure_reason": null,
"user_agent": "curl/7.81.0-DEV",
"x_forwarded_for": null
}
看到這麼多引數,是不是有點懵逼?沒關係接下來,我們詳細看看!
文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。
名稱 | HTTP | TCP |
---|---|---|
authority | 請求授權頭 | 未實現(「-」) |
bytes_received | 接收到訊息體位元組數 | 在連線上從下游接收的位元組數 |
bytes_sent | 傳送的包體位元組數 | 在連線上傳送給下游的位元組數 |
connection_termination_details | 連線中斷詳情 | 連線中斷詳情 |
downstream_local_address | 下游連線的本地地址 | 下游連線的本地地址 |
downstream_remote_address | 下游連線的遠端地址 | 下游連線的遠端地址 |
duration | 請求從起始時間到最後一個位元組發出的持續總時長(以毫秒為單位) | 下游連線的持續總時長(以毫秒為單位) |
method | HTTP請求方法 | 未實現(「-」) |
path | HTTP請求路徑 | 未實現(「-」) |
protocol | 協定,目前不是 HTTP/1.1 就是 HTTP/2 | 未實現(「-」) |
request_id | 由envoy建立的 X-REQUEST-ID 請求頭的值 |
未實現(「-」) |
requested_server_name | 設定在 ssl 連線通訊端上表示伺服器名稱指示 (SNI) 的字元值 | 未實現(「-」) |
response_code | HTTP 響應碼 | 未實現(「-」) |
response_code_details | TTP 響應狀態碼詳情提供關於響應狀態碼的附加資訊。 | 未實現(「-」) |
response_flags | 響應或者連線的附加詳情 | 響應或者連線的附加詳情 |
route_name | 路由名 | 路由名 |
start_time | 請求開始時間(包括毫秒) | 下游連線開始時間(包括毫秒) |
upstream_cluster | 上游主機所屬的上游叢集 | 上游主機所屬的上游叢集 |
upstream_host | 上游主機 URL | 上游主機 URL |
upstream_local_address | 上游連線的本地地址 | 上游連線的本地地址 |
upstream_transport_failure_reason | 如果上游因傳輸通訊端而連線失敗,從傳輸通訊端中提供失敗原因。 | 未實現(「-」) |
user_agent | User-Agent 請求頭的值 |
未實現(「-」) |
x_forwarded_for | X-Forwarded-For 請求頭的值 |
未實現(「-」) |
刪除 httpbin
和 sleep
服務:
kubectl delete -f samples/httpbin/httpbin.yaml
kubectl delete -f samples/sleep/sleep.yaml
微信公眾號:萬貓學社
微信掃描二維條碼
關注後回覆「電子書」
獲取12本Java必讀技術書籍