部署在数据平面(即加入网格的Kubernetes集群)的Envoy Proxy可以输出所有访问日志,ASM支持自定义Envoy Proxy输出的访问日志内容。本文介绍如何自定义Envoy Proxy输出的访问日志内容。
前提条件
步骤一:启用访问日志
-
在左侧导航栏,选择 服务网格 > 网格管理 。
-
在 网格管理 页面,找到待配置的实例,单击实例的名称或在 操作 列中单击 管理 。
-
在网格信息页面单击 功能设置 。
-
在 功能设置更新 面板选中 启用访问日志 ,然后单击 确定 。
启用访问日志(默认是开启状态),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)%"
步骤二:自定义数据面访问日志内容
-
在左侧导航栏,选择 服务网格 > 网格管理 。
-
在 网格管理 页面,找到待配置的实例,单击实例的名称或在 操作 列中单击 管理 。
-
在网格信息页面单击 启用访问日志 右侧的 自定义访问日志格式 。
-
在 自定义访问日志格式 对话框中设置 变量名称 为my_custom_key, 变量值 为%REQ(end-user)%,然后单击 确认 。
本文以获取Bookinfo示例中HTTP请求的Header字段end-user为例
步骤三:查看访问日志
启用访问日志后,发起请求的Sidecar容器会按照自定义的访问日志格式输出访问日志。
-
在浏览器地址栏输入 入口网关地址:productpage ,请求Productpage应用。
-
在控制台左侧导航栏中,单击 集群 。
-
在 集群列表 页面中,单击目标集群名称或者目标集群右侧 操作 列下的 详情 。
-
在集群管理页左侧导航栏中,选择 工作负载 > 无状态 。
-
在 无状态 页面顶部设置 命名空间 为default,然后单击productpage-v1应用右侧 操作 列下的 详情 。
-
在应用详情页面单击 日志 页签,设置 Container 为istio-proxy。
在日志输出框中可以看到如下日志。
{
"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,查看报表。具体操作,请参见使用日志服务采集数据平面入口网关日志。