部署在数据平面(即加入网格的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. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格信息页面单击启用访问日志右侧的自定义访问日志格式
  5. 自定义访问日志格式对话框中设置变量名称为my_custom_key,变量值为%REQ(end-user)%,然后单击确认
    本文以获取Bookinfo示例中HTTP请求的Header字段end-user为例

步骤三:查看访问日志

启用访问日志后,发起请求的Sidecar容器会按照自定义的访问日志格式输出访问日志。

  1. 在浏览器地址栏输入入口网关地址:productpage,请求Productpage应用。
  2. 登录容器服务管理控制台
  3. 在控制台左侧导航栏中,单击集群
  4. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  5. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
  6. 无状态页面顶部设置命名空间为default,然后单击productpage-v1应用右侧操作列下的详情
  7. 在应用详情页面单击日志页签,设置Container为istio-proxy。
    在日志输出框中可以看到如下日志。日志

    可以看到日志中包含名为jason的end-user,说明自定义日志内容成功。

相关操作

您还可以使用日志服务采集数据平面的AccessLog。具体操作,请参见使用日志服务采集数据平面入口网关日志