访问日志

    访问日志格式字符串包含了命令操作符以及其他文本。访问日志的格式化过程并不会对换行符做出什么假设,所以应该将其设置为格式字符串的组成部分。请参阅示例的缺省格式。要注意的是,访问日志会在未设置、或者空值的位置加入一个字符:“-”。

    不同类型的访问日志(例如 HTTP 和 TCP)共用同样的格式字符串。不同类型的日志中,某些字段可能会有不同的含义。

    下面是支持的命令:

    • %START_TIME%

      • HTTP

        Request 的开始时间,精确到毫秒。

      • TCP

        下游连接的开始时间,精确到毫秒。

        可以用对 START_TIME 进行定制,例如:

    • %BYTES_RECEIVED%

      • HTTP

        收到的 Body 字节数。

      • TCP

        下游连接上收到的字节数。

    • %PROTOCOL%

      • HTTP

        协议。目前取值为 HTTP/1.1HTTP/2

      • TCP

        未实现 (“-“)。

    • %RESPONSE_CODE%

      • HTTP

        HTTP 响应码。注意如果响应码为 0,说明服务器从未发送过响应,这一般是说明(下游)客户端断开了。

      • TCP

        未实现 (“-“)。

      • HTTP

        发送出去的 Body 字节数。

      • TCP

        在连接中向下游发送的字节数。

    • %DURATION%

      • TCP

        下游连接的持续时间。

    • %RESPONSE_FLAGS%

      关于响应或连接的附加细节。这里描述的响应码是不适用于 TCP 连接的。可能的取值包括:

      • HTTP 和 TCP

        • UH:503 响应码的补充信息,上游集群中没有健康的上游主机。
        • UF:503 响应码的补充信息,上游连接失败。
        • UO:503 响应码的补充信息,上游溢出(熔断状态)。
        • NR:404 响应码的补充信息,给定请求没有。
      • HTTP 专用

        • LH:503 响应码的补充信息,本地服务健康检查失败。
        • UT:504 响应码的补充信息,上游请求超时。
        • LR:503 响应码的补充信息,连接在本地被复位。
        • UR:503 响应码的补充信息,上游复位连接。
        • UC:503 响应码的补充信息,上游链接终止。
        • DI:该请求受功能影响,延迟指定时间。
        • FI:这一请求受错误注入功能影响,返回了指定的状态码。
        • RL:429 响应码的补充信息,的配置限制了这一请求。
    • %UPSTREAM_HOST%

      上游主机的 URL(对 TCP 链接来说就是:tcp://ip:port

    • %UPSTREAM_CLUSTER%

      上游主机所属的上游集群。

    • %UPSTREAM_LOCAL_ADDRESS%

      上游连接的本地地址,如果是 Ip 地址,那么其中会包含地址和端口。

    • %DOWNSTREAM_REMOTE_ADDRESS%

      下游连接的远程地址,如果是 Ip 地址,那么其中会包含地址和端口。

    • %DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%

      下游连接的远程地址,如果是 Ip 地址,那么其中不会包含地址和端口。

    • %DOWNSTREAM_LOCAL_ADDRESS_WITHOUT_PORT%

      %DOWNSTREAM_LOCAL_ADDRESS% 类似,但是不包含端口部分。

    • %REQ(X?Y):Z%

      • HTTP

        一个 HTTP 请求 Header,X 是主要 HTTP 头,Y 是备选 Header,Z 是一个可选的参数,表示截取的字符串的长度。这个值来源于 HTTP Header,首先读取 X,如果 X 没有设置,则读取 Y。如果两个 Header 都没有,在日志中就会写入“-”

      • TCP

        未实现 (“-“)。

    • %RESP(X?Y):Z%

      • HTTP

        %REQ(X?Y):Z% 类似,只不过值来自于响应而非请求。

      • TCP

        未实现 (“-“)。

    • %TRAILER(X?Y):Z%

      • HTTP

        %REQ(X?Y):Z% 类似,只不过值来自于响应尾部。

      • TCP

        未实现 (“-“)。

    • %DYNAMIC_METADATA(NAMESPACE:KEY):Z%*

      • HTTP

        动态元数据信息,NAMESPACE 就是设置用于过滤命名空间的参数,KEY 是一个可选参数,用于在命名空间内查询指定的键,可以用 : 来表达嵌套关系,Z 是一个可选的参数,表示截断字符串的长度。动态元数据可以使用 进行设置:setDynamicMetadata。这个数据以 JSON 形式进行记录,例如下面的动态元数据:com.test.my_filter: {"test_key": "foo", "test_object": {"inner_key": "bar"}}

        • 会记录:{"test_key": "foo", "test_object": {"inner_key": "bar"}}
        • %DYNAMIC_METADATA(com.test.my_filter:test_key)% 会记录:"foo"
        • %DYNAMIC_METADATA(com.test.my_filter:test_object)% 会记录: {"inner_key": "bar"}
        • `%DYNAMIC_METADATA(com.test.my_filter:test_object:inner_key)% 会记录:
        • %DYNAMIC_METADATA(com.unknown_filter)% 会记录: -
        • %DYNAMIC_METADATA(com.test.my_filter:unknown_key)% 会记录: -
        • %DYNAMIC_METADATA(com.test.my_filter):25% 会记录(截取到 25 个字符): {“test_key”: “foo”, “test`
      • TCP

        未实现 (“-“)。

    缺省的访问日志格式示例:

    1. [2016-04-15T20:17:00.310Z] "POST /api/v1/locations HTTP/2" 204 - 154 0 226 100 "10.0.35.28" "nsq2http" "cc21d9b0-cf5c-432b-8c7e-98aeb7988cd2" "locations" "tcp://10.0.2.1:80"