天天看點

使用阿裡雲服務網格ASM自定義資料面通路日志

部署在資料平面(即加入網格的Kubernetes叢集)的Envoy Proxy可以輸出所有通路日志,ASM支援自定義Envoy Proxy輸出的通路日志内容。本文介紹如何自定義Envoy Proxy輸出的通路日志内容。

前提條件

步驟一:啟用通路日志

  1. 登入 ASM控制台
  2. 在左側導航欄,選擇服務網格 > 網格管理。
  3. 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
  4. 在網格資訊頁面單擊功能設定。
  5. 在功能設定更新面闆選中啟用通路日志,然後單擊确定。

啟用通路日志(預設是開啟狀态),istio-proxy容器預設輸出包含以下字段的日志,如果關閉通路日志,istio-proxy容器将不會産生JSON格式的通路日志。

    "authority_for":"%REQ(:AUTHORITY)%",
    "bytes_received":"%BYTES_RECEIVED%",
    "bytes_sent":"%BYTES_SENT%",
    "downstream_local_address":"%DOWNSTREAM_LOCAL_ADDRESS%",
    "downstream_remote_address":"%DOWNSTREAM_REMOTE_ADDRESS%",
    "duration":"%DURATION%",
    "istio_policy_status":"%DYNAMIC_METADATA(istio.mixer:status)%",
    "method":"%REQ(:METHOD)%",
    "path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
    "protocol":"%PROTOCOL%",
    "request_id":"%REQ(X-REQUEST-ID)%",
    "requested_server_name":"%REQUESTED_SERVER_NAME%",
    "response_code":"%RESPONSE_CODE%",
    "response_flags":"%RESPONSE_FLAGS%",
    "route_name":"%ROUTE_NAME%",
    "start_time":"%START_TIME%",
    "trace_id":"%REQ(X-B3-TRACEID)%",
    "upstream_cluster":"%UPSTREAM_CLUSTER%",
    "upstream_host":"%UPSTREAM_HOST%",
    "upstream_local_address":"%UPSTREAM_LOCAL_ADDRESS%",
    "upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
    "upstream_transport_failure_reason":"%UPSTREAM_TRANSPORT_FAILURE_REASON%",
    "user_agent":"%REQ(USER-AGENT)%",
    "x_forwarded_for":"%REQ(X-FORWARDED-FOR)%"           

步驟二:自定義資料面通路日志内容

  1. 在網格資訊頁面單擊啟用通路日志右側的自定義通路日志格式。
  2. 在自定義通路日志格式對話框中設定變量名稱為my_custom_key,變量值為%REQ(end-user)%,然後單擊确認。

本文以擷取Bookinfo示例中HTTP請求的Header字段end-user為例

使用阿裡雲服務網格ASM自定義資料面通路日志

步驟三:檢視通路日志

啟用通路日志後,發起請求的Sidecar容器會按照自定義的通路日志格式輸出通路日志。

  1. 在浏覽器位址欄輸入入口網關位址:productpage,請求Productpage應用。
  2. 容器服務管理控制台
  3. 在控制台左側導航欄中,單擊叢集。
  4. 在叢集清單頁面中,單擊目标叢集名稱或者目标叢集右側操作列下的詳情。
  5. 在叢集管理頁左側導航欄中,選擇工作負載 > 無狀态。
  6. 在無狀态頁面頂部設定命名空間為default,然後單擊productpage-v1應用右側操作列下的詳情。
  7. 在應用詳情頁面單擊日志頁簽,設定Container為istio-proxy。

在日志輸出框中可以看到如下日志。

使用阿裡雲服務網格ASM自定義資料面通路日志
使用阿裡雲服務網格ASM自定義資料面通路日志
{
    "method":"GET",
    "x_forwarded_for":null,
    "upstream_host":"172.19.16.90:9080",
    "protocol":"HTTP/1.1",
    "my_custom_key":"jason",
    "authority_for":"addedvalues:9080",
    "response_code":200,
    "start_time":"2021-10-21T11:40:12.055Z",
    "request_id":"5222b7fb-05a6-4fae-8e13-d44525ae3ca0",
    "bytes_sent":883,
    "downstream_remote_address":"172.19.16.11:33752",
    "upstream_transport_failure_reason":null,
    "downstream_local_address":"192.168.237.140:9080",
    "requested_server_name":null,
    "response_flags":"-",
    "duration":4,
    "user_agent":"python-requests/2.18.4",
    "route_name":"default",
    "trace_id":null,
    "istio_policy_status":null,
    "path":"/addedvalues/0",
    "upstream_cluster":"outbound|9080||addedvalues.default.svc.cluster.local",
    "bytes_received":0,
    "upstream_service_time":"3",
    "authority":"addedvalues:9080",
    "upstream_local_address":"172.19.16.11:52430"
}

           

可以看到中包含名為end-user=jason使用者的通路日志,說明自定義日志内容成功。

相關操作

您還可以使用阿裡雲日志服務SLS采集資料平面的AccessLog,檢視報表。具體操作,請參見

使用日志服務采集資料平面入口網關日志