部署在数据平面(即加入网格的Kubernetes集群)的Envoy Proxy可以输出所有访问日志。ASM支持自定义Envoy Proxy输出的访问日志内容。本文介绍如何自定义Envoy Proxy输出的访问日志内容。
前提条件
步骤一:启用访问日志
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在基本信息页面右上角,单击功能设置。
- 在功能设置更新面板,选中开启访问日志并将其打印到容器标准输出,然后单击确定。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)%"
步骤二:自定义数据面访问日志内容
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在基本信息页面,单击开启访问日志并将其打印到容器标准输出右侧的自定义访问日志格式。
- 在自定义访问日志格式对话框下方,新增自定义访问日志格式,设置变量名称为my_custom_key,变量值为%REQ(end-user)%,然后单击确认。本文以获取Bookinfo示例中HTTP请求的Header字段end-user为例。如下图所示,自定义访问日志格式时,您可以选择ASM提供的可选字段,也可以新增自定义字段。选中目标字段后,将按照自定义的访问日志格式输出访问日志。
步骤三:查看访问日志
启用访问日志后,发起请求的Sidecar容器将按照自定义的访问日志格式输出访问日志。
- 在浏览器地址栏输入入口网关地址:productpage,访问Productpage应用。
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
- 在无状态页面顶部,设置命名空间为default,然后在productpage-v1应用右侧,单击操作列下的详情。
- 在应用详情页面,单击日志页签,设置Container为istio-proxy。在日志输出框中可以看到如下日志。日志中包含名为jason的end-user,表明自定义日志内容成功。
请求耗时相关字段说明
在服务网格ASM中,“上游(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访问日志或网关日志中,该字段表示从下游请求接收完毕,到上游响应读取完毕的时间。该时间包含当前Envoy处理本请求花费的时间,以及将请求传输给上游所消耗的时间。该时间可以用来表示当前节点本地消耗的时间以及调用上游消耗的时间。通过计算,您还可以得到以下时间:
|
upstream_response_time(gateway) |
说明 对于带有Body(Content-Length > 0)的HTTP请求,Envoy是边接收边发给上游(而非全部接受后发送)。如果下游的读取速度缓慢,将会增加上游的读取时间,以及上游发送给它的上游的时间(上游为边读边发送的方式)。
相关操作
您还可以使用日志服务采集数据平面的AccessLog。具体操作,请参见使用日志服务采集数据平面入口网关日志。