gRPC 访问日志(proto)

Envoy 访问日志描述了在固定时间段内与 Envoy 的传入交互,通常涵盖单个请求/响应交换(例如 HTTP)、流(例如通过 HTTP/gRPC)或代理连接(例如 TCP)。访问日志包含在协议特定 protobuf 消息中定义的字段。

除明确声明外,所有字段均描述 Envoy 与已连接客户端之间的 *下游* 交互。描述 *上游* 交互的字段将明确在其名称中包含 upstream

data.accesslog.v3.TCPAccessLogEntry

[data.accesslog.v3.TCPAccessLogEntry proto]

{
  "common_properties": {...},
  "connection_properties": {...}
}
common_properties

(data.accesslog.v3.AccessLogCommon) 所有 Envoy 访问日志共享的通用属性。

connection_properties

(data.accesslog.v3.ConnectionProperties) TCP 连接的属性。

data.accesslog.v3.HTTPAccessLogEntry

[data.accesslog.v3.HTTPAccessLogEntry proto]

{
  "common_properties": {...},
  "protocol_version": ...,
  "request": {...},
  "response": {...}
}
common_properties

(data.accesslog.v3.AccessLogCommon) 所有 Envoy 访问日志共享的通用属性。

protocol_version

(data.accesslog.v3.HTTPAccessLogEntry.HTTPVersion)

request

(data.accesslog.v3.HTTPRequestProperties) 传入 HTTP 请求的描述。

response

(data.accesslog.v3.HTTPResponseProperties) 传出 HTTP 响应的描述。

Enum data.accesslog.v3.HTTPAccessLogEntry.HTTPVersion

[data.accesslog.v3.HTTPAccessLogEntry.HTTPVersion proto]

HTTP 版本

PROTOCOL_UNSPECIFIED

(默认)

HTTP10

HTTP11

HTTP2

HTTP3

data.accesslog.v3.ConnectionProperties

[data.accesslog.v3.ConnectionProperties proto]

定义连接的字段

{
  "received_bytes": ...,
  "sent_bytes": ...
}
received_bytes

(uint64) 从下游接收到的字节数。

sent_bytes

(uint64) 发送到下游的字节数。

data.accesslog.v3.AccessLogCommon

[data.accesslog.v3.AccessLogCommon proto]

定义所有 Envoy 访问日志共享的字段。

{
  "downstream_remote_address": {...},
  "downstream_local_address": {...},
  "tls_properties": {...},
  "start_time": {...},
  "time_to_last_rx_byte": {...},
  "time_to_first_upstream_tx_byte": {...},
  "time_to_last_upstream_tx_byte": {...},
  "time_to_first_upstream_rx_byte": {...},
  "time_to_last_upstream_rx_byte": {...},
  "time_to_first_downstream_tx_byte": {...},
  "time_to_last_downstream_tx_byte": {...},
  "upstream_remote_address": {...},
  "upstream_local_address": {...},
  "upstream_cluster": ...,
  "response_flags": {...},
  "metadata": {...},
  "upstream_transport_failure_reason": ...,
  "route_name": ...,
  "downstream_direct_remote_address": {...},
  "filter_state_objects": {...},
  "custom_tags": {...},
  "duration": {...},
  "upstream_request_attempt_count": ...,
  "connection_termination_details": ...,
  "stream_id": ...,
  "intermediate_log_entry": ...,
  "downstream_transport_failure_reason": ...,
  "downstream_wire_bytes_sent": ...,
  "downstream_wire_bytes_received": ...,
  "upstream_wire_bytes_sent": ...,
  "upstream_wire_bytes_received": ...,
  "access_log_type": ...
}
downstream_remote_address

(config.core.v3.Address) 此字段是接收来自用户的请求的远程/源地址。注意:这可能不是物理对等体。例如,如果远程地址是从例如 x-forwarder-for 标头、代理协议等推断出来的。

downstream_local_address

(config.core.v3.Address) 此字段是接收来自用户的请求的本地/目标地址。

tls_properties

(data.accesslog.v3.TLSProperties) 如果连接是安全的,则此字段将包含 TLS 属性。

start_time

(Timestamp) Envoy 开始服务此请求的时间。这实际上是接收第一个下游字节的时间。

time_to_last_rx_byte

(Duration) 接收第一个下游字节和接收最后一个下游字节之间的时间间隔(即接收请求所需的时间)。

time_to_first_upstream_tx_byte

(Duration) 接收第一个下游字节和发送第一个上游字节之间的时间间隔。由于过滤器,time_to_last_rx_byte 和此值之间可能存在相当大的差异。此外,关于未考虑内核套接字缓冲区时间等的相同注意事项适用于 time_to_last_downstream_tx_byte

time_to_last_upstream_tx_byte

(Duration) 接收第一个下游字节和发送最后一个上游字节之间的时间间隔。由于过滤器,time_to_last_rx_byte 和此值之间可能存在相当大的差异。此外,关于未考虑内核套接字缓冲区时间等的相同注意事项适用于 time_to_last_downstream_tx_byte

time_to_first_upstream_rx_byte

(Duration) 接收第一个下游字节和接收第一个上游字节之间的时间间隔(即开始接收响应所需的时间)。

time_to_last_upstream_rx_byte

(Duration) 接收第一个下游字节和接收最后一个上游字节之间的时间间隔(即接收完整响应所需的时间)。

time_to_first_downstream_tx_byte

(Duration) 接收第一个下游字节和发送第一个下游字节之间的时间间隔。由于过滤器,time_to_first_upstream_rx_byte 和此字段之间可能存在相当大的差异。此外,关于未考虑内核套接字缓冲区时间等的相同注意事项适用于 time_to_last_downstream_tx_byte

time_to_last_downstream_tx_byte

(Duration) 接收第一个下游字节和发送最后一个下游字节之间的时间间隔。根据协议、缓冲、窗口、过滤器等,time_to_last_upstream_rx_byte 和此字段之间可能存在相当大的差异。还要注意,这是一个近似时间。在当前实现中,它不包括内核套接字缓冲区时间。在当前实现中,它也不包括 HTTP/2 编解码器内部的发送窗口缓冲。将来可能会进行工作以使此持续时间更准确。

upstream_remote_address

(config.core.v3.Address) 处理此交换的上游远程/目标地址。这并不包括重试。

upstream_local_address

(config.core.v3.Address) 处理此交换的上游本地/源地址。这并不包括重试。

upstream_cluster

(string) upstream_remote_address 所属的上游集群。

response_flags

(data.accesslog.v3.ResponseFlags) 指示请求/响应处理期间发生的事件的标志。

metadata

(config.core.v3.Metadata) 在请求处理期间遇到的所有元数据,包括端点选择。

这可用于将附加到用于处理此请求的各种配置的 ID 与访问日志条目关联起来。例如,从具有某些 ID 的更高级别转发规则创建的路由可以在此字段中放置该 ID,并在以后交叉引用。它还可以用于确定是否使用了金丝雀端点。

upstream_transport_failure_reason

(string) 如果上游连接因传输套接字(例如 TLS 握手)而失败,则提供传输套接字的失败原因。此字段的格式取决于配置的上游传输套接字。常见的 TLS 故障在 TLS 故障排除 中。

route_name

(string) 路由的名称

downstream_direct_remote_address

(config.core.v3.Address) 此字段是接收来自用户的请求的下游直接远程地址。注意:这始终是物理对等体,即使远程地址是从例如 x-forwarder-for 标头、代理协议等推断出来的。

filter_state_objects

(repeated map<string, Any>) 流信息中已配置为记录的过滤器状态的映射。如果过滤器状态序列化为除 google.protobuf.Any 之外的任何消息,它将被打包到 google.protobuf.Any 中。

custom_tags

(repeated map<string, string>) 自定义标签列表,这些标签使用其他信息来注释日志。要配置此值,用户应配置 custom_tags

duration

(Duration) 对于 HTTP:从开始时间到最后一个字节输出的请求的总持续时间(毫秒)。对于 TCP:下游连接的总持续时间(毫秒)。这是请求的总持续时间(即,当请求的 ActiveStream 被销毁时),可能比 time_to_last_downstream_tx_byte 更长。

upstream_request_attempt_count

(uint32) 对于 HTTP:请求在上游尝试的次数。请注意,如果请求从未在上游尝试过,则该字段将被省略。对于 TCP:连接请求在上游尝试的次数。请注意,如果连接请求从未在上游尝试过,则该字段将被省略。

connection_termination_details

(string) 连接终止详细信息可能提供有关 Envoy 由于 L4 原因而终止连接的更多信息。

stream_id

(string) 用于日志记录和跟踪的流(TCP 连接、长期 HTTP2 流、HTTP 请求)的可选唯一 ID。这可以是任何格式的字符串,可用于识别一个流。

intermediate_log_entry

(bool) 如果此日志条目是流完成或中间日志条目后刷新的最终日志条目,则在流期间定期刷新。 每个长期运行的流(TCP 连接、长期运行的 HTTP2 流)可能有多个中间日志条目,只有一个最终日志条目。 并且如果需要,可以在日志条目中添加唯一 ID 或标识符 stream_id 来关联所有这些中间日志条目和最终日志条目。

注意

此字段已弃用,取而代之的是 access_log_type,以便更好地指示访问日志记录类型的类型。

downstream_transport_failure_reason

(string) 如果侦听器中的下游连接由于传输套接字(例如 TLS 握手)而失败,则提供来自传输套接字的失败原因。 此字段的格式取决于配置的下游传输套接字。 常见的 TLS 故障在 TLS 故障排除 中。

downstream_wire_bytes_sent

(uint64) 对于 HTTP:通过 http 流发送到下游的总字节数。 对于 TCP:通过 tcp 代理发送到下游的总字节数。

downstream_wire_bytes_received

(uint64) 对于 HTTP:通过 http 流从下游接收的总字节数。 Envoy 通过将管道中请求的字节数加到当前正在处理的请求来统计接收到的 HTTP/1.1 管道请求的大小。 对于 TCP:通过 tcp 代理从下游接收的总字节数。

upstream_wire_bytes_sent

(uint64) 对于 HTTP:通过 http 流发送到上游的总字节数。 此值在上游重试期间累积。 对于 TCP:通过 tcp 代理发送到上游的总字节数。

upstream_wire_bytes_received

(uint64) 对于 HTTP:通过 http 流从上游接收的总字节数。 对于 TCP:通过 tcp 代理发送到上游的总字节数。

access_log_type

(data.accesslog.v3.AccessLogType) 访问日志的类型,指示何时记录日志。 有关可用值的更多信息,请参见 ACCESS_LOG_TYPE。 如果访问日志是由与支持值之一不对应的流记录的,则默认值为 NotSet。 有关访问日志的行为方式以及何时记录访问日志的更多信息,请参考 访问日志记录

data.accesslog.v3.ResponseFlags

[data.accesslog.v3.ResponseFlags proto]

指示在请求/响应处理期间发生的标志。

{
  "failed_local_healthcheck": ...,
  "no_healthy_upstream": ...,
  "upstream_request_timeout": ...,
  "local_reset": ...,
  "upstream_remote_reset": ...,
  "upstream_connection_failure": ...,
  "upstream_connection_termination": ...,
  "upstream_overflow": ...,
  "no_route_found": ...,
  "delay_injected": ...,
  "fault_injected": ...,
  "rate_limited": ...,
  "unauthorized_details": {...},
  "rate_limit_service_error": ...,
  "downstream_connection_termination": ...,
  "upstream_retry_limit_exceeded": ...,
  "stream_idle_timeout": ...,
  "invalid_envoy_request_headers": ...,
  "downstream_protocol_error": ...,
  "upstream_max_stream_duration_reached": ...,
  "response_from_cache_filter": ...,
  "no_filter_config_found": ...,
  "duration_timeout": ...,
  "upstream_protocol_error": ...,
  "no_cluster_found": ...,
  "overload_manager": ...,
  "dns_resolution_failure": ...,
  "downstream_remote_reset": ...
}
failed_local_healthcheck

(bool) 指示本地服务器运行状况检查失败。

no_healthy_upstream

(bool) 指示没有健康的上游。

upstream_request_timeout

(bool) 指示存在上游请求超时。

local_reset

(bool) 指示在流上发送了本地编解码器级别重置。

upstream_remote_reset

(bool) 指示在流上接收到远程编解码器级别重置。

upstream_connection_failure

(bool) 指示连接池由于初始连接失败而进行了本地重置。

upstream_connection_termination

(bool) 指示流由于上游连接终止而重置。

upstream_overflow

(bool) 指示流由于资源溢出而重置。

no_route_found

(bool) 指示为请求未找到路由。

delay_injected

(bool) 指示请求在代理之前已延迟。

fault_injected

(bool) 指示请求已使用注入的错误代码中止。

rate_limited

(bool) 指示请求在本地受到速率限制。

unauthorized_details

(data.accesslog.v3.ResponseFlags.Unauthorized) 指示请求是否被认为是未经授权的以及原因。

rate_limit_service_error

(bool) 指示请求被拒绝,因为速率限制服务中存在错误。

downstream_connection_termination

(bool) 指示流由于下游连接终止而重置。

upstream_retry_limit_exceeded

(bool) 指示上游重试限制已超过,导致下游错误。

stream_idle_timeout

(bool) 指示流空闲超时已达到,导致下游 408。

invalid_envoy_request_headers

(bool) 指示请求被拒绝,因为 envoy 请求标头未通过严格验证。

downstream_protocol_error

(bool) 指示下游请求中存在 HTTP 协议错误。

upstream_max_stream_duration_reached

(bool) 指示上游请求已达到最大流持续时间。

response_from_cache_filter

(bool) 指示响应来自缓存过滤器。

no_filter_config_found

(bool) 指示过滤器配置不可用。

duration_timeout

(bool) 指示请求或连接超过了下游连接持续时间。

upstream_protocol_error

(bool) 指示上游响应中存在 HTTP 协议错误。

no_cluster_found

(bool) 指示为请求未找到集群。

overload_manager

(bool) 指示过载管理器终止了请求。

dns_resolution_failure

(bool) 指示 DNS 解析失败。

downstream_remote_reset

(bool) 指示在下游流上接收到下游远程编解码器级别重置

data.accesslog.v3.ResponseFlags.Unauthorized

[data.accesslog.v3.ResponseFlags.Unauthorized proto]

{
  "reason": ...
}
reason

(data.accesslog.v3.ResponseFlags.Unauthorized.Reason)

Enum data.accesslog.v3.ResponseFlags.Unauthorized.Reason

[data.accesslog.v3.ResponseFlags.Unauthorized.Reason proto]

请求未经授权的原因

REASON_UNSPECIFIED

(默认)

EXTERNAL_SERVICE

⁣请求被外部授权服务拒绝。

data.accesslog.v3.TLSProperties

[data.accesslog.v3.TLSProperties proto]

协商的 TLS 连接的属性。

{
  "tls_version": ...,
  "tls_cipher_suite": {...},
  "tls_sni_hostname": ...,
  "local_certificate_properties": {...},
  "peer_certificate_properties": {...},
  "tls_session_id": ...,
  "ja3_fingerprint": ...
}
tls_version

(data.accesslog.v3.TLSProperties.TLSVersion) 协商的 TLS 版本。

tls_cipher_suite

(UInt32Value) 握手期间协商的 TLS 密码套件。 该值是 IANA TLS 密码套件注册表定义的四位十六进制代码(例如 009C 对应于 TLS_RSA_WITH_AES_128_GCM_SHA256)。

此处以整数表示。

tls_sni_hostname

(string) 握手中的 SNI 主机名。

local_certificate_properties

(data.accesslog.v3.TLSProperties.CertificateProperties) 用于协商 TLS 的本地证书的属性。

peer_certificate_properties

(data.accesslog.v3.TLSProperties.CertificateProperties) 用于协商 TLS 的对等证书的属性。

tls_session_id

(string) TLS 会话 ID。

ja3_fingerprint

(string) 当启用 JA3 指纹识别时,JA3 指纹。

data.accesslog.v3.TLSProperties.CertificateProperties

[data.accesslog.v3.TLSProperties.CertificateProperties proto]

{
  "subject_alt_name": [],
  "subject": ...,
  "issuer": ...
}
subject_alt_name

(repeated data.accesslog.v3.TLSProperties.CertificateProperties.SubjectAltName) 证书中存在的 SAN。

subject

(string) 证书的主题字段。

issuer

(string) 证书的发行人字段。

data.accesslog.v3.TLSProperties.CertificateProperties.SubjectAltName

[data.accesslog.v3.TLSProperties.CertificateProperties.SubjectAltName proto]

{
  "uri": ...
}
uri

(string)

Enum data.accesslog.v3.TLSProperties.TLSVersion

[data.accesslog.v3.TLSProperties.TLSVersion proto]

VERSION_UNSPECIFIED

(默认)

TLSv1

TLSv1_1

TLSv1_2

TLSv1_3

data.accesslog.v3.HTTPRequestProperties

[data.accesslog.v3.HTTPRequestProperties proto]

{
  "request_method": ...,
  "scheme": ...,
  "authority": ...,
  "port": {...},
  "path": ...,
  "user_agent": ...,
  "referer": ...,
  "forwarded_for": ...,
  "request_id": ...,
  "original_path": ...,
  "request_headers_bytes": ...,
  "request_body_bytes": ...,
  "request_headers": {...},
  "upstream_header_bytes_sent": ...,
  "downstream_header_bytes_received": ...
}
request_method

(config.core.v3.RequestMethod) 请求方法(RFC 7231/2616)。

scheme

(字符串) 进入请求 URI 的方案部分。

authority

(字符串) HTTP/2 :authority 或 HTTP/1.1 Host 头部值。

port

(UInt32Value) 进入请求 URI 的端口(目前未被使用,因为端口已组合到 authority 中)。

path

(字符串) 进入请求 URI 的路径部分。

user_agent

(字符串) User-Agent 请求头的值。

referer

(字符串) Referer 请求头的值。

forwarded_for

(字符串) X-Forwarded-For 请求头的值。

request_id

(字符串) X-Request-Id 请求头的值。

此头部由 Envoy 用于唯一标识请求。它将为所有外部请求和尚未具有请求 ID 的内部请求生成。

original_path

(字符串) X-Envoy-Original-Path 请求头的值。

request_headers_bytes

(uint64) HTTP 请求头的字节大小。

此值从 OSI 第 7 层的角度捕获,即它不包括来自其他网络层框架或编码的开销。

request_body_bytes

(uint64) HTTP 请求正文的字节大小。

此值从 OSI 第 7 层的角度捕获,即它不包括来自其他网络层框架或编码的开销。

request_headers

(重复 map<字符串, 字符串>) 配置为记录的额外头部的映射。

upstream_header_bytes_sent

(uint64) 通过 http 流发送到上游的头部的字节数,包括协议开销。

此值在上游重试期间累加。

downstream_header_bytes_received

(uint64) 通过 http 流从下游接收的头部的字节数,包括协议开销。

data.accesslog.v3.HTTPResponseProperties

[data.accesslog.v3.HTTPResponseProperties proto]

{
  "response_code": {...},
  "response_headers_bytes": ...,
  "response_body_bytes": ...,
  "response_headers": {...},
  "response_trailers": {...},
  "response_code_details": ...,
  "upstream_header_bytes_received": ...,
  "downstream_header_bytes_sent": ...
}
response_code

(UInt32Value) Envoy 返回的 HTTP 响应代码。

response_headers_bytes

(uint64) HTTP 响应头的字节大小。

此值从 OSI 第 7 层的角度捕获,即它不包括协议开销或来自其他网络层框架或编码的开销。

response_body_bytes

(uint64) HTTP 响应正文的字节大小。

此值从 OSI 第 7 层的角度捕获,即它不包括来自其他网络层框架或编码的开销。

response_headers

(重复 map<字符串, 字符串>) 配置为记录的额外头部的映射。

response_trailers

(重复 map<字符串, 字符串>) 配置为记录的尾部的映射。

response_code_details

(字符串) HTTP 响应代码详细信息。

upstream_header_bytes_received

(uint64) 通过 http 流从上游接收的头部的字节数,包括协议开销。

downstream_header_bytes_sent

(uint64) 通过 http 流发送到下游的头部的字节数,包括协议开销。

Enum data.accesslog.v3.AccessLogType

[data.accesslog.v3.AccessLogType proto]

NotSet

(默认)

TcpUpstreamConnected

TcpPeriodic

TcpConnectionEnd

DownstreamStart

DownstreamPeriodic

DownstreamEnd

UpstreamPoolReady

UpstreamPeriodic

UpstreamEnd

DownstreamTunnelSuccessfullyEstablished

UdpTunnelUpstreamConnected

UdpPeriodic

UdpSessionEnd