存取記錄

設定

存取日誌設定為 HTTP 連線管理員設定TCP ProxyUDP ProxyThrift Proxy 的一部分。

格式規則

存取日誌格式包含提取相關資料並插入的命令運算子。它們支援兩種格式:「格式字串」「格式字典」。在這兩種情況下,命令運算子都用於提取相關資料,然後將其插入到指定的日誌格式中。一次只能指定一種存取日誌格式。

格式字串

格式字串是使用 format 鍵指定的純字串。它們可能包含命令運算子或其他解譯為純字串的字元。存取日誌格式化程式不會對新行分隔符號做任何假設,因此必須將其指定為格式字串的一部分。請參閱 預設格式 以取得範例。

預設格式字串

如果未指定自訂格式字串,Envoy 會使用下列預設格式

[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"\n

預設 Envoy 存取日誌格式範例

[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"

格式字典

格式字典是指定結構化存取日誌輸出格式的字典,使用 json_formattyped_json_format 鍵指定。這允許以 JSON 等結構化格式輸出日誌。與格式字串類似,會評估命令運算子,並將其值插入格式字典中以建構日誌輸出。

例如,在組態中以 json_format 提供的下列格式

{
  "config": {
    "json_format": {
        "protocol": "%PROTOCOL%",
        "duration": "%DURATION%",
        "my_custom_header": "%REQ(MY_CUSTOM_HEADER)%"
    }
  }
}

下列 JSON 物件將會寫入到日誌檔案

{"protocol": "HTTP/1.1", "duration": "123", "my_custom_header": "value_of_MY_CUSTOM_HEADER"}

這允許您為每個命令運算子指定自訂金鑰。

typed_json_formatjson_format 的不同之處在於,數值會呈現為 JSON 數字、布林值以及適用時的巢狀物件或清單。在此範例中,請求持續時間將會呈現為數字 123

格式字典具有下列限制

  • 字典必須將字串對應到字串(明確地說,是字串對應到命令運算子)。支援巢狀結構。

  • 使用 typed_json_format 時,只有當命令運算子是字典值中出現的唯一字串時,命令運算子才會產生類型化的輸出。例如,"%DURATION%" 將記錄數值持續時間值,但 "%DURATION%.0" 將記錄字串值。

注意

使用 typed_json_format 時,超過 \(2^{53}\) 的整數值會以降低的精確度表示,因為它們必須轉換為浮點數。

命令運算子

命令運算子用於提取將插入到存取日誌中的值。不同類型的存取日誌(例如 HTTP 和 TCP)使用相同的運算子。某些欄位的含義可能略有不同,具體取決於日誌的類型。差異會註明。

請注意,如果未設定值/為空,日誌將會包含 - 字元,或者對於 JSON 日誌,則會包含字串 "-"。對於類型化的 JSON 日誌,未設定的值會表示為 null 值,而空字串會呈現為 ""omit_empty_values 選項可用於完全省略空值。

除非另有說明,否則命令運算子會為類型化的 JSON 日誌產生字串輸出。

支援下列命令運算子

%START_TIME%
HTTP/THRIFT

包括毫秒的請求開始時間。

TCP

包括毫秒的下游連線開始時間。

UDP

包括毫秒的 UDP Proxy 工作階段開始時間。

可以使用 格式字串自訂 START_TIME。除此之外,START_TIME 也接受下列指定符號

指定符號

說明

%s

自 Epoch 以來的秒數

%f%[1-9]f

小數秒位數,預設為 9 位數 (奈秒)

  • %3f 毫秒 (3 位數)

  • %6f 微秒 (6 位數)

  • %9f 奈秒 (9 位數)

格式化 START_TIME 的範例如下

%START_TIME(%Y/%m/%dT%H:%M:%S%z)%

%START_TIME(%s)%

# To include millisecond fraction of the second (.000 ... .999). E.g. 1527590590.528.
%START_TIME(%s.%3f)%

%START_TIME(%s.%6f)%

%START_TIME(%s.%9f)%

在類型化的 JSON 日誌中,START_TIME 一律呈現為字串。

%START_TIME_LOCAL%

START_TIME 相同,但使用當地時區。

%EMIT_TIME%

記錄項目發出的時間,包括毫秒。

可以使用 格式字串自訂 EMIT_TIME。如需其他格式指定符號和範例,請參閱 START_TIME

%EMIT_TIME_LOCAL%

EMIT_TIME 相同,但使用當地時區。

%REQUEST_HEADERS_BYTES%
HTTP

未壓縮的請求標頭位元組。

TCP/UDP

未實作 (0)。

%BYTES_RECEIVED%
HTTP/THRIFT

接收到的主體位元組。

TCP

連線上接收到的下游位元組。

UDP

在 UDP 工作階段中從下游接收到的位元組。

在類型化的 JSON 日誌中呈現數值。

%BYTES_RETRANSMITTED%
HTTP/3 (QUIC)

重新傳輸的主體位元組。

HTTP/1 和 HTTP/2

未實作 (0)。

TCP/UDP

未實作 (0)。

在類型化的 JSON 日誌中呈現數值。

%PACKETS_RETRANSMITTED%
HTTP/3 (QUIC)

重新傳輸的封包數。

HTTP/1 和 HTTP/2

未實作 (0)。

TCP/UDP

未實作 (0)。

在類型化的 JSON 日誌中呈現數值。

%PROTOCOL%
HTTP

協定。目前為 HTTP/1.1 HTTP/2HTTP/3

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中,如果協定不可用(例如,在 TCP 日誌中),PROTOCOL 將會呈現字串 "-"

%UPSTREAM_PROTOCOL%
HTTP

上游協定。目前為 HTTP/1.1 HTTP/2HTTP/3

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中,如果協定不可用(例如,在 TCP 日誌中),UPSTREAM_PROTOCOL 將會呈現字串 "-"

%RESPONSE_CODE%
HTTP

HTTP 回應程式碼。請注意,回應程式碼 '0' 表示伺服器從未傳送回應的開頭。這通常表示(下游)用戶端已中斷連線。

請注意,在 100-continue 回應的情況下,只會記錄最終標頭的回應程式碼。如果 100-continue 後面接著 200,則記錄的回應將為 200。如果 100-continue 導致中斷連線,則會記錄 100。

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%RESPONSE_CODE_DETAILS%
HTTP

HTTP 回應程式碼詳細資訊提供有關回應程式碼的其他資訊,例如誰設定了該回應程式碼(上游或 Envoy)以及原因。

TCP/UDP

未實作 ("-")

%CONNECTION_TERMINATION_DETAILS%
HTTP 和 TCP

連線終止詳細資訊可能會提供有關 Envoy 因 L4 原因而終止連線的其他資訊。

%RESPONSE_HEADERS_BYTES%
HTTP

未壓縮的回應標頭位元組。

TCP/UDP

未實作 (0)。

%RESPONSE_TRAILERS_BYTES%
HTTP

未壓縮的回應尾端位元組。

TCP/UDP

未實作 (0)。

%BYTES_SENT%
HTTP/THRIFT

傳送的主體位元組。對於 WebSocket 連線,它也會包含回應標頭位元組。

TCP

連線上傳送的下游位元組。

UDP

在 UDP 工作階段中傳送到下游的位元組。

%UPSTREAM_REQUEST_ATTEMPT_COUNT%
HTTP

請求嘗試上游的次數。請注意,嘗試計數為 '0' 表示從未嘗試上游請求。

TCP

連線請求嘗試上游的次數。請注意,嘗試計數為 '0' 表示從未嘗試上游連線請求。

UDP

未實作 (0)。

在類型化的 JSON 日誌中呈現數值。

%UPSTREAM_WIRE_BYTES_SENT%
HTTP

HTTP 流向上游傳送的總位元組數。

TCP

TCP 代理向上游傳送的總位元組數。

UDP

UDP 隧道流向上游流傳送的總位元組數。不支援非隧道連線。

%UPSTREAM_WIRE_BYTES_RECEIVED%
HTTP

HTTP 流從上游接收的總位元組數。

TCP

TCP 代理從上游接收的總位元組數。

UDP

UDP 隧道流從上游流接收的總位元組數。不支援非隧道連線。

%UPSTREAM_HEADER_BYTES_SENT%
HTTP

HTTP 流向上游傳送的標頭位元組數。

TCP

未實作 (0)。

UDP

UDP 隧道流向上游流傳送的 HTTP 標頭總位元組數。不支援非隧道連線。

%UPSTREAM_HEADER_BYTES_RECEIVED%
HTTP

HTTP 流從上游接收的標頭位元組數。

TCP

未實作 (0)。

UDP

UDP 隧道流從上游流接收的 HTTP 標頭總位元組數。不支援非隧道連線。

%DOWNSTREAM_WIRE_BYTES_SENT%
HTTP

HTTP 流向下游傳送的總位元組數。

TCP

TCP 代理向下游傳送的總位元組數。

UDP

未實作 (0)。

%DOWNSTREAM_WIRE_BYTES_RECEIVED%
HTTP

HTTP 流從下游接收的總位元組數。Envoy 會高估接收到的 HTTP/1.1 管線化請求的大小,將管線中請求的位元組數加到目前正在處理的請求上。

TCP

TCP 代理從下游接收的總位元組數。

UDP

未實作 (0)。

%DOWNSTREAM_HEADER_BYTES_SENT%
HTTP

HTTP 流向下游傳送的標頭位元組數。

TCP/UDP

未實作 (0)。

%DOWNSTREAM_HEADER_BYTES_RECEIVED%
HTTP

HTTP 流從下游接收的標頭位元組數。

TCP/UDP

未實作 (0)。

在類型化的 JSON 日誌中呈現數值。

%DURATION%
HTTP/THRIFT

從開始時間到最後一個位元組傳出的請求總持續時間 (以毫秒為單位)。

TCP

下游連線的總持續時間 (以毫秒為單位)。

UDP

未實作 (0)。

在類型化的 JSON 日誌中呈現數值。

%COMMON_DURATION(START:END:PRECISION)%
HTTP

特定 `PRECISION` 中 `START` 時間點和 `END` 時間點之間的總持續時間。`START` 和 `END` 時間點由以下值指定 (注意:此處所有值均區分大小寫)

  • DS_RX_BEG:下游請求接收開始的時間點。

  • DS_RX_END:下游請求接收結束的時間點。

  • US_TX_BEG:上游請求傳送開始的時間點。

  • US_TX_END:上游請求傳送結束的時間點。

  • US_RX_BEG:上游回應接收開始的時間點。

  • US_RX_END:上游回應接收結束的時間點。

  • DS_TX_BEG:下游回應傳送開始的時間點。

  • DS_TX_END:下游回應傳送結束的時間點。

  • 動態值:其他值將被視為由命名鍵設定的自訂時間點。

`PRECISION` 由以下值指定 (注意:此處所有值均區分大小寫)

  • ms:毫秒精確度。

  • us:微秒精確度。

  • ns:奈秒精確度。

注意:針對 H/2 和 H/3 協定啟用獨立半關閉行為,可能會產生 *_TX_END 值低於 *_RX_END 值的情況,如果上游對等點在下游對等點之前半關閉其串流時。在這些情況下,COMMON_DURATION 值將變為負數。

TCP/UDP

未實作 ("-")。

%REQUEST_DURATION%
HTTP

從開始時間到從下游接收的請求最後一個位元組的請求總持續時間 (以毫秒為單位)。

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%REQUEST_TX_DURATION%
HTTP

從開始時間到傳送至上游的最後一個位元組的請求總持續時間 (以毫秒為單位)。

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%RESPONSE_DURATION%
HTTP

從開始時間到從上游主機讀取的第一個位元組的請求總持續時間 (以毫秒為單位)。

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%ROUNDTRIP_DURATION%
HTTP/3 (QUIC)

從開始時間到接收到來自下游的最終 ACK 的請求總持續時間 (以毫秒為單位)。

HTTP/1 和 HTTP/2

未實作 ("-")。

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%RESPONSE_TX_DURATION%
HTTP

從上游主機讀取的第一個位元組到向下游傳送的最後一個位元組的請求總持續時間 (以毫秒為單位)。

TCP/UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%DOWNSTREAM_HANDSHAKE_DURATION%
HTTP

未實作 ("-")。

TCP

從連線開始到 TLS 交握完成的總持續時間 (以毫秒為單位)。

UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%UPSTREAM_CONNECTION_POOL_READY_DURATION%
HTTP/TCP

從建立上游請求到連線池準備就緒的總持續時間 (以毫秒為單位)。

UDP

未實作 ("-")。

在類型化的 JSON 日誌中呈現數值。

%RESPONSE_FLAGS% / %RESPONSE_FLAGS_LONG%

關於回應或連線的額外詳細資訊 (如果有的話)。對於 TCP 連線,說明中提及的回應代碼不適用。%RESPONSE_FLAGS% 將輸出短字串。%RESPONSE_FLAGS_LONG% 將輸出 Pascal 大小寫字串。可能的值如下

HTTP 和 TCP

長名稱

短名稱

描述

NoHealthyUpstream

UH

除了 503 回應代碼之外,上游叢集中沒有健康的的上游主機。

UpstreamConnectionFailure

UF

除了 503 回應代碼之外,上游連線失敗。

UpstreamOverflow

UO

除了 503 回應代碼之外,上游溢位 ( 斷路)。

NoRouteFound

NR

除了 404 回應代碼之外,針對給定請求沒有設定路由,或下游連線沒有符合的篩選器鏈。

UpstreamRetryLimitExceeded

URX

因為達到上游重試限制 (HTTP)最大連線嘗試次數 (TCP),所以拒絕請求。

NoClusterFound

NC

找不到上游叢集。

DurationTimeout

DT

當請求或連線超過max_connection_durationmax_downstream_connection_duration時。

僅限 HTTP

長名稱

短名稱

描述

DownstreamConnectionTermination

DC

下游連線終止。

FailedLocalHealthCheck

LH

除了 503 回應代碼之外,本機服務的 健康狀態檢查請求失敗。

UpstreamRequestTimeout

UT

除了 504 回應代碼之外,上游請求逾時。

LocalReset

LR

除了 503 回應代碼之外,連線本機重設。

UpstreamRemoteReset

UR

除了 503 回應代碼之外,上游遠端重設。

UpstreamConnectionTermination

UC

除了 503 回應代碼之外,上游連線終止。

DelayInjected

DI

請求處理延遲了一段時間,此時間透過 錯誤注入 指定。

FaultInjected

FI

請求已透過 錯誤注入 指定的回應代碼中止。

RateLimited

RL

除了 429 回應代碼之外,請求已透過 HTTP 速率限制篩選器 在本機進行速率限制。

UnauthorizedExternalService

UAEX

請求遭外部授權服務拒絕。

RateLimitServiceError

RLSE

因為速率限制服務發生錯誤,所以拒絕請求。

InvalidEnvoyRequestHeaders

IH

除了 400 回應代碼之外,因為請求設定嚴格檢查的標頭的無效值,所以拒絕請求。

StreamIdleTimeout

SI

除了 408 或 504 回應代碼之外,串流閒置逾時。

DownstreamProtocolError

DPE

下游請求發生 HTTP 協定錯誤。

UpstreamProtocolError

UPE

上游回應發生 HTTP 協定錯誤。

UpstreamMaxStreamDurationReached

UMSDR

上游請求已達到最大串流持續時間。

ResponseFromCacheFilter

RFCF

回應來自 Envoy 快取篩選器。

NoFilterConfigFound

NFCF

請求已終止,因為在允許的暖機期限內沒有收到篩選器設定。

OverloadManagerTerminated

OM

Overload Manager 終止了請求。

DnsResolutionFailed

DF

因為 DNS 解析失敗,所以終止請求。

DropOverload

DO

除了 503 回應代碼之外,因為drop_overloads,所以終止請求。

DownstreamRemoteReset

DR

回應詳細資訊為 http2.remote_resethttp2.remote_refuse

UDP

未實作 ("-")。

%ROUTE_NAME%
HTTP/TCP

路由的名稱。

UDP

未實作 ("-")。

%VIRTUAL_CLUSTER_NAME%
HTTP*/gRPC

相符的虛擬叢集名稱 (如果有的話)。

TCP/UDP

未實作 ("-")

%UPSTREAM_HOST%

上游主機的主要位址 (例如,TCP 連線的 ip:port)。

%UPSTREAM_HOST_NAME%

上游主機名稱 (例如,DNS 名稱)。如果沒有可用的 DNS 名稱,將會使用上游主機的主要位址 (例如,TCP 連線的 ip:port)。

%UPSTREAM_CLUSTER%

上游主機所屬的上游叢集。如果提供,將會使用alt_stat_name

%UPSTREAM_CLUSTER_RAW%

上游主機所屬的上游叢集。alt_stat_name 不會修改此值。

%UPSTREAM_LOCAL_ADDRESS%

上游連線的本機位址。如果位址是 IP 位址,則同時包含位址和連接埠。

%UPSTREAM_LOCAL_ADDRESS_WITHOUT_PORT%

上游連線的本機位址,不包含任何連接埠元件。IP 位址是唯一具有連接埠元件的位址類型。

%UPSTREAM_LOCAL_PORT%

上游連線的本機連接埠。IP 位址是唯一具有連接埠元件的位址類型。

%UPSTREAM_REMOTE_ADDRESS%

上游連線的遠端位址。如果位址是 IP 位址,則同時包含位址和連接埠。如果上游主機只有一個位址,且已成功建立連線,則與 UPSTREAM_HOST 值相同。

%UPSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%

上游連線的遠端位址,不包含任何連接埠元件。IP 位址是唯一具有連接埠元件的位址類型。

%UPSTREAM_REMOTE_PORT%

上游連線的遠端連接埠。IP 位址是唯一具有連接埠元件的位址類型。

%UPSTREAM_TRANSPORT_FAILURE_REASON%
HTTP

如果上游連線因傳輸層 Socket (例如 TLS 握手) 失敗,則提供來自傳輸層 Socket 的失敗原因。此欄位的格式取決於設定的上游傳輸層 Socket。常見的 TLS 失敗請參閱 TLS 疑難排解

TCP/UDP

未實作 ("-")

%DOWNSTREAM_TRANSPORT_FAILURE_REASON%
HTTP/TCP

如果下游連線因傳輸層 Socket (例如 TLS 握手) 失敗,則提供來自傳輸層 Socket 的失敗原因。此欄位的格式取決於設定的下游傳輸層 Socket。常見的 TLS 失敗請參閱 TLS 疑難排解。請注意:它僅在監聽器存取設定中有效,而 HTTP 或 TCP 存取日誌會觀察到空值。

UDP

未實作 ("-")

%DOWNSTREAM_REMOTE_ADDRESS%

下游連線的遠端位址。如果該位址是 IP 位址,則會包含位址和埠號。

注意

如果該位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,則它可能不是對等端的實際遠端位址。

%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%

下游連線的遠端位址,不包含任何埠號元件。IP 位址是唯一具有埠號元件的位址類型。

注意

如果該位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,則它可能不是對等端的實際遠端位址。

%DOWNSTREAM_REMOTE_PORT%

下游連線的遠端埠號。IP 位址是唯一具有埠號元件的位址類型。

注意

如果該位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,則它可能不是對等端的實際遠端位址。

%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%

下游連線的直接遠端位址。如果該位址是 IP 位址,則會包含位址和埠號。

注意

即使下游遠端位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,這也永遠是對等端的實際遠端位址。

%DOWNSTREAM_DIRECT_REMOTE_ADDRESS_WITHOUT_PORT%

下游連線的直接遠端位址,不包含任何埠號元件。IP 位址是唯一具有埠號元件的位址類型。

注意

即使下游遠端位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,這也永遠是對等端的實際遠端位址。

%DOWNSTREAM_DIRECT_REMOTE_PORT%

下游連線的直接遠端埠號。IP 位址是唯一具有埠號元件的位址類型。

注意

即使下游遠端位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,這也永遠是對等端的實際遠端位址。

%DOWNSTREAM_LOCAL_ADDRESS%

下游連線的本機位址。如果該位址是 IP 位址,則會包含位址和埠號。

如果原始連線是由 iptables REDIRECT 重新導向的,則這表示使用 SO_ORIGINAL_DST Socket 選項,由 原始目的地過濾器 還原的原始目的地位址。如果原始連線是由 iptables TPROXY 重新導向的,並且監聽器的 transparent 選項設定為 true,則這表示原始目的地位址和埠號。

注意

如果該位址是從 Proxy Protocol 過濾器x-forwarded-for 推斷出來的,則它可能不是對等端的實際遠端位址。

%DOWNSTREAM_LOCAL_ADDRESS_WITHOUT_PORT%

下游連線的本機位址,不包含任何埠號元件。IP 位址是唯一具有埠號元件的位址類型。

%DOWNSTREAM_LOCAL_PORT%

下游連線的本機埠號。IP 位址是唯一具有埠號元件的位址類型。

%CONNECTION_ID%

下游連線的識別碼。它可以用於在多個日誌接收器之間交叉引用 TCP 存取日誌,或交叉引用相同連線的基於計時器的報告。該識別碼在一次執行中具有很高的唯一性,但可能會在多個執行個體之間或重新啟動之間重複。

%UPSTREAM_CONNECTION_ID%

上游連線的識別碼。它可以用於在多個日誌接收器之間交叉引用 TCP 存取日誌,或交叉引用相同連線的基於計時器的報告。該識別碼在一次執行中具有很高的唯一性,但可能會在多個執行個體之間或重新啟動之間重複。

%STREAM_ID%

串流的識別碼 (HTTP 請求、長生命週期的 HTTP2 串流、TCP 連線等)。它可以用於在多個日誌接收器之間交叉引用 TCP 存取日誌,或交叉引用相同連線的基於計時器的報告。與 %CONNECTION_ID% 不同,該識別碼在多個執行個體之間或重新啟動之間應該是唯一的。並且它的值應該與 HTTP 請求的 %REQ(X-REQUEST-ID)% 相同。在大多數情況下,這應該用於取代 %CONNECTION_ID% 和 %REQ(X-REQUEST-ID)%。

%GRPC_STATUS(X)%

gRPC 狀態碼 根據選用參數 X 格式化,它可以是 CAMEL_STRINGSNAKE_STRINGNUMBER。例如,如果 grpc 狀態為 INVALID_ARGUMENT (以數字 3 表示),則格式化程式會為 CAMEL_STRING 傳回 InvalidArgument,為 SNAKE_STRING 傳回 INVALID_ARGUMENT,為 NUMBER 傳回 3。如果未提供 X,則會使用 CAMEL_STRING

%GRPC_STATUS_NUMBER%

gRPC 狀態碼。

%REQ(X?Y):Z%
HTTP

HTTP 請求標頭,其中 X 是主要的 HTTP 標頭,Y 是替代標頭,而 Z 是一個選用參數,表示字串截斷最多 Z 個字元。該值首先從名為 X 的 HTTP 請求標頭中取得,如果未設定,則使用請求標頭 Y。如果不存在任何標頭,則日誌中將使用「-」符號。

TCP/UDP

未實作 ("-")。

%RESP(X?Y):Z%
HTTP

%REQ(X?Y):Z% 相同,但取自 HTTP 回應標頭。

TCP/UDP

未實作 ("-")。

%TRAILER(X?Y):Z%
HTTP

%REQ(X?Y):Z% 相同,但取自 HTTP 回應尾部。

TCP/UDP

未實作 ("-")。

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

動態中繼資料資訊,其中 NAMESPACE 是設定中繼資料時使用的過濾器命名空間,KEY 是命名空間中的選用查找鍵,並可選擇指定以「:」分隔的巢狀鍵,而 Z 是一個選用參數,表示字串截斷最多 Z 個字元。動態中繼資料可由過濾器使用 StreamInfo API:setDynamicMetadata 來設定。資料將以 JSON 字串的形式記錄。例如,對於以下動態中繼資料

com.test.my_filter: {"test_key": "foo", "test_object": {"inner_key": "bar"}}

  • %DYNAMIC_METADATA(com.test.my_filter)% 將記錄:{"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)% 將記錄:bar

  • %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

未實作 ("-")。

UDP

對於 UDP Proxy,當 NAMESPACE 設定為 “udp.proxy.session” 時,選用的 KEY 如下

  • cluster_name:叢集名稱。

  • bytes_sent:在此工作階段中傳送至下游的總位元組數。已棄用,請改用 %BYTES_SENT%。

  • bytes_received:在此工作階段中從下游接收的總位元組數。已棄用,請改用 %BYTES_RECEIVED%。

  • errors_sent:在此工作階段中,將資料包傳送至下游時發生的錯誤數。

  • datagrams_sent:在此工作階段中傳送至下游的資料包數。

  • datagrams_received:在此工作階段中從下游接收的資料包數。

UDP Proxy 的建議工作階段存取日誌格式

[%START_TIME%] %DYNAMIC_METADATA(udp.proxy.session:cluster_name)%
%DYNAMIC_METADATA(udp.proxy.session:bytes_sent)%
%DYNAMIC_METADATA(udp.proxy.session:bytes_received)%
%DYNAMIC_METADATA(udp.proxy.session:errors_sent)%
%DYNAMIC_METADATA(udp.proxy.session:datagrams_sent)%
%DYNAMIC_METADATA(udp.proxy.session:datagrams_received)%\n

當 NAMESPACE 設定為 “udp.proxy.proxy” 時,選用的 KEY 如下

  • bytes_sent:在 UDP Proxy 中傳送至下游的總位元組數。已棄用,請改用 %BYTES_SENT%。

  • bytes_received:在 UDP Proxy 中從下游接收的總位元組數。已棄用,請改用 %BYTES_RECEIVED%。

  • errors_sent:在 UDP Proxy 中,將資料包傳送至下游時發生的錯誤數。

  • errors_received:在 UDP Proxy 中,從下游接收資料包時發生的錯誤數。

  • datagrams_sent:在 UDP Proxy 中傳送至下游的資料包數。

  • datagrams_received:在 UDP Proxy 中從下游接收的資料包數。

  • no_route:在 UDP Proxy 中找不到上游叢集的次數。

  • session_total:在 UDP Proxy 中的工作階段總數。

  • idle_timeout:在 UDP Proxy 中發生工作階段閒置超時的次數。

UDP Proxy 的建議 Proxy 存取日誌格式

[%START_TIME%]
%DYNAMIC_METADATA(udp.proxy.proxy:bytes_sent)%
%DYNAMIC_METADATA(udp.proxy.proxy:bytes_received)%
%DYNAMIC_METADATA(udp.proxy.proxy:errors_sent)%
%DYNAMIC_METADATA(udp.proxy.proxy:errors_received)%
%DYNAMIC_METADATA(udp.proxy.proxy:datagrams_sent)%
%DYNAMIC_METADATA(udp.proxy.proxy:datagrams_received)%
%DYNAMIC_METADATA(udp.proxy.proxy:session_total)%\n
THRIFT

對於 Thrift Proxy,NAMESPACE 應始終設定為 “thrift.proxy”,選用的 KEY 如下

  • method:方法的名稱。

  • cluster_name:叢集名稱。

  • passthrough:請求和回應的直通支援。

  • request:transport_type:請求的傳輸類型。

  • request:protocol_type:請求的協定類型。

  • request:message_type:請求的訊息類型。

  • response:transport_type:回應的傳輸類型。

  • response:protocol_type:回應的協定類型。

  • response:message_type:回應的訊息類型。

  • response:reply_type:回應的回覆類型。

Thrift 代理建議的存取日誌格式

[%START_TIME%] %DYNAMIC_METADATA(thrift.proxy:method)%
%DYNAMIC_METADATA(thrift.proxy:cluster)%
%DYNAMIC_METADATA(thrift.proxy:request:transport_type)%
%DYNAMIC_METADATA(thrift.proxy:request:protocol_type)%
%DYNAMIC_METADATA(thrift.proxy:request:message_type)%
%DYNAMIC_METADATA(thrift.proxy:response:transport_type)%
%DYNAMIC_METADATA(thrift.proxy:response:protocol_type)%
%DYNAMIC_METADATA(thrift.proxy:response:message_type)%
%DYNAMIC_METADATA(thrift.proxy:response:reply_type)%
%BYTES_RECEIVED%
%BYTES_SENT%
%DURATION%
%UPSTREAM_HOST%\n

注意

對於類型化的 JSON 日誌,當引用的鍵為簡單值時,此運算子會呈現帶有字串、數值或布林類型的單一值。如果引用的鍵是結構或列表值,則會呈現 JSON 結構或列表。結構和列表可以巢狀。在任何情況下,都會忽略最大長度。

注意

未來將棄用 DYNAMIC_METADATA 命令運算子,改用 METADATA 運算子。

%CLUSTER_METADATA(NAMESPACE:KEY*):Z%
HTTP

上游叢集 Metadata 資訊,其中 NAMESPACE 是設定 metadata 時使用的篩選器命名空間,KEY 是命名空間中可選的查找鍵,可以指定用 ‘:’ 分隔的巢狀鍵,而 Z 是一個可選參數,表示字串截斷到最多 Z 個字元。資料將以 JSON 字串形式記錄。例如,對於以下動態 metadata

com.test.my_filter: {"test_key": "foo", "test_object": {"inner_key": "bar"}}

  • %CLUSTER_METADATA(com.test.my_filter)% 將記錄:{"test_key": "foo", "test_object": {"inner_key": "bar"}}

  • %CLUSTER_METADATA(com.test.my_filter:test_key)% 將記錄:foo

  • %CLUSTER_METADATA(com.test.my_filter:test_object)% 將記錄:{"inner_key": "bar"}

  • %CLUSTER_METADATA(com.test.my_filter:test_object:inner_key)% 將記錄:bar

  • %CLUSTER_METADATA(com.unknown_filter)% 將記錄:-

  • %CLUSTER_METADATA(com.test.my_filter:unknown_key)% 將記錄:-

  • %CLUSTER_METADATA(com.test.my_filter):25% 將記錄(截斷為 25 個字元):{"test_key": "foo", "test

TCP/UDP/THRIFT

未實作 ("-")。

注意

對於類型化的 JSON 日誌,當引用的鍵為簡單值時,此運算子會呈現帶有字串、數值或布林類型的單一值。如果引用的鍵是結構或列表值,則會呈現 JSON 結構或列表。結構和列表可以巢狀。在任何情況下,都會忽略最大長度。

注意

未來將棄用 CLUSTER_METADATA 命令運算子,改用 METADATA 運算子。

%UPSTREAM_METADATA(NAMESPACE:KEY*):Z%
HTTP/TCP

上游主機 Metadata 資訊,其中 NAMESPACE 是設定 metadata 時使用的篩選器命名空間,KEY 是命名空間中可選的查找鍵,可以指定用 ‘:’ 分隔的巢狀鍵,而 Z 是一個可選參數,表示字串截斷到最多 Z 個字元。資料將以 JSON 字串形式記錄。例如,對於以下上游主機 metadata

com.test.my_filter: {"test_key": "foo", "test_object": {"inner_key": "bar"}}

  • %UPSTREAM_METADATA(com.test.my_filter)% 將記錄:{"test_key": "foo", "test_object": {"inner_key": "bar"}}

  • %UPSTREAM_METADATA(com.test.my_filter:test_key)% 將記錄:foo

  • %UPSTREAM_METADATA(com.test.my_filter:test_object)% 將記錄:{"inner_key": "bar"}

  • %UPSTREAM_METADATA(com.test.my_filter:test_object:inner_key)% 將記錄:bar

  • %UPSTREAM_METADATA(com.unknown_filter)% 將記錄:-

  • %UPSTREAM_METADATA(com.test.my_filter:unknown_key)% 將記錄:-

  • %UPSTREAM_METADATA(com.test.my_filter):25% 將記錄(截斷為 25 個字元):{"test_key": "foo", "test

UDP/THRIFT

未實作 ("-")。

注意

對於類型化的 JSON 日誌,當引用的鍵為簡單值時,此運算子會呈現帶有字串、數值或布林類型的單一值。如果引用的鍵是結構或列表值,則會呈現 JSON 結構或列表。結構和列表可以巢狀。在任何情況下,都會忽略最大長度。

注意

未來將棄用 UPSTREAM_METADATA 命令運算子,改用 METADATA 運算子。

%FILTER_STATE(KEY:F:FIELD?):Z%
HTTP

篩選器狀態 資訊,其中 KEY 是查找篩選器狀態物件所必需的。如果可能,序列化的 proto 將以 JSON 字串形式記錄。如果序列化的 proto 對 Envoy 未知,則將以 protobuf 除錯字串形式記錄。Z 是一個可選參數,表示字串截斷到最多 Z 個字元。F 是一個可選參數,用於指示 FilterState 使用哪種方法進行序列化。如果設定為 ‘PLAIN’,篩選器狀態物件將以非結構化字串形式序列化。如果設定為 ‘TYPED’ 或未提供 F,則篩選器狀態物件將以 JSON 字串形式序列化。如果 F 設定為 ‘FIELD’,則將序列化名稱為 FIELD 的篩選器狀態物件欄位。FIELD 參數應僅與設定為 ‘FIELD’ 的 F 一起使用。

TCP/UDP

與 HTTP 相同,篩選器狀態來自連線,而不是 L7 請求。

注意

對於類型化的 JSON 日誌,當引用的鍵為簡單值時,此運算子會呈現帶有字串、數值或布林類型的單一值。如果引用的鍵是結構或列表值,則會呈現 JSON 結構或列表。結構和列表可以巢狀。在任何情況下,都會忽略最大長度。

%UPSTREAM_FILTER_STATE(KEY:F:FIELD?):Z%
HTTP

從上游元件(如叢集或傳輸套接字擴充功能)擷取篩選器狀態。

篩選器狀態 資訊,其中 KEY 是查找篩選器狀態物件所必需的。如果可能,序列化的 proto 將以 JSON 字串形式記錄。如果序列化的 proto 對 Envoy 未知,則將以 protobuf 除錯字串形式記錄。Z 是一個可選參數,表示字串截斷到最多 Z 個字元。F 是一個可選參數,用於指示 FilterState 使用哪種方法進行序列化。如果設定為 ‘PLAIN’,篩選器狀態物件將以非結構化字串形式序列化。如果設定為 ‘TYPED’ 或未提供 F,則篩選器狀態物件將以 JSON 字串形式序列化。如果 F 設定為 ‘FIELD’,則將序列化名稱為 FIELD 的篩選器狀態物件欄位。FIELD 參數應僅與設定為 ‘FIELD’ 的 F 一起使用。

TCP/UDP

未實作。

注意

此命令運算子僅適用於 upstream_log

%REQUESTED_SERVER_NAME%
HTTP/TCP/THRIFT

為伺服器名稱指示 (SNI) 在 SSL 連線套接字上設定的字串值

UDP

未實作 ("-")。

%DOWNSTREAM_LOCAL_IP_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的本機憑證 SAN 中存在的 IP 位址。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_IP_SAN%
HTTP/TCP/THRIFT

從下游用戶端接收以建立 TLS 連線的對等憑證 SAN 中存在的 IP 位址。

UDP

未實作 ("-")。

%DOWNSTREAM_LOCAL_DNS_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的本機憑證 SAN 中存在的 DNS 名稱。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_DNS_SAN%
HTTP/TCP/THRIFT

從下游用戶端接收以建立 TLS 連線的對等憑證 SAN 中存在的 DNS 名稱。

UDP

未實作 ("-")。

%DOWNSTREAM_LOCAL_URI_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的本機憑證 SAN 中存在的 URI。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_URI_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的對等憑證 SAN 中存在的 URI。

UDP

未實作 ("-")。

%DOWNSTREAM_LOCAL_EMAIL_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的本機憑證 SAN 中存在的電子郵件。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_EMAIL_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的對等憑證 SAN 中存在的電子郵件。

UDP

未實作 ("-")。

%DOWNSTREAM_LOCAL_OTHERNAME_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的本機憑證 SAN 中存在的 OtherNames。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_OTHERNAME_SAN%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的對等憑證 SAN 中存在的 OtherNames。

UDP

未實作 ("-")。

%DOWNSTREAM_LOCAL_SUBJECT%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的本機憑證中存在的主題。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_SUBJECT%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的對等憑證中存在的主題。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_ISSUER%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的對等憑證中存在的簽發者。

UDP

未實作 ("-")。

%DOWNSTREAM_TLS_SESSION_ID%
HTTP/TCP/THRIFT

已建立的下游 TLS 連線的工作階段 ID。

UDP

未實作 (0)。

%DOWNSTREAM_TLS_CIPHER%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的密碼組合的 OpenSSL 名稱。

UDP

未實作 ("-")。

%DOWNSTREAM_TLS_VERSION%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的 TLS 版本(例如,TLSv1.2TLSv1.3)。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_FINGERPRINT_256%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的用戶端憑證的十六進位編碼 SHA256 指紋。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_FINGERPRINT_1%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的用戶端憑證的十六進位編碼 SHA1 指紋。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_SERIAL%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的用戶端憑證的序號。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_CHAIN_FINGERPRINTS_256%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的所有用戶端憑證的逗號分隔十六進位編碼 SHA256 指紋。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_CHAIN_FINGERPRINTS_1%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的所有用戶端憑證的逗號分隔十六進位編碼 SHA1 指紋。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_CHAIN_SERIALS%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的所有用戶端憑證的逗號分隔序號。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_CERT%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的 URL 編碼 PEM 格式的用戶端憑證。

UDP

未實作 ("-")。

%DOWNSTREAM_PEER_CERT_V_START%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的用戶端憑證的有效起始日期。

UDP

未實作 ("-")。

可以使用 格式字串 自訂 DOWNSTREAM_PEER_CERT_V_START。有關其他格式規範和範例,請參閱 START_TIME

%DOWNSTREAM_PEER_CERT_V_END%
HTTP/TCP/THRIFT

用於建立下游 TLS 連線的用戶端憑證的有效結束日期。

UDP

未實作 ("-")。

可以使用 格式字串 自訂 DOWNSTREAM_PEER_CERT_V_END。有關其他格式規範和範例,請參閱 START_TIME

%UPSTREAM_PEER_SUBJECT%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的對等憑證中存在的主題。

UDP

未實作 ("-")。

%UPSTREAM_PEER_ISSUER%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的對等憑證中存在的簽發者。

UDP

未實作 ("-")。

%UPSTREAM_TLS_SESSION_ID%
HTTP/TCP/THRIFT

已建立的上游 TLS 連線的工作階段 ID。

UDP

未實作 (0)。

%UPSTREAM_TLS_CIPHER%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的密碼組合的 OpenSSL 名稱。

UDP

未實作 ("-")。

%UPSTREAM_TLS_VERSION%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的 TLS 版本(例如,TLSv1.2TLSv1.3)。

UDP

未實作 ("-")。

%UPSTREAM_PEER_CERT%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的 URL 編碼 PEM 格式的伺服器憑證。

UDP

未實作 ("-")。

%UPSTREAM_PEER_CERT_V_START%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的上游伺服器憑證的有效起始日期。

UDP

未實作 ("-")。

可以使用 格式字串 自訂 UPSTREAM_PEER_CERT_V_START。有關其他格式規範和範例,請參閱 START_TIME

%UPSTREAM_PEER_CERT_V_END%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的上游伺服器憑證的有效結束日期。

UDP

未實作 ("-")。

可以使用 格式字串 自訂 UPSTREAM_PEER_CERT_V_END。有關其他格式規範和範例,請參閱 START_TIME

%UPSTREAM_PEER_URI_SAN%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的對等憑證的 SAN 中存在的 URI。

UDP

未實作 ("-")。

%UPSTREAM_PEER_DNS_SAN%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的對等憑證的 SAN 中存在的 DNS 名稱。

UDP

未實作 ("-")。

%UPSTREAM_PEER_IP_SAN%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的對等憑證的 SAN 中存在的 IP 位址。

UDP

未實作 ("-")。

%UPSTREAM_LOCAL_URI_SAN%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的本地憑證的 SAN 中存在的 URI。

UDP

未實作 ("-")。

%UPSTREAM_LOCAL_DNS_SAN%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的本地憑證的 SAN 中存在的 DNS 名稱。

UDP

未實作 ("-")。

%UPSTREAM_LOCAL_IP_SAN%
HTTP/TCP/THRIFT

用於建立上游 TLS 連線的本地憑證的 SAN 中存在的 IP 位址。

UDP

未實作 ("-")。

%HOSTNAME%

系統主機名稱。

%LOCAL_REPLY_BODY%

Envoy 拒絕的請求的回應主體文字。

%FILTER_CHAIN_NAME%

下游連線的網路篩選器鏈名稱

%ACCESS_LOG_TYPE%

存取日誌的類型,指示記錄存取日誌的時間。如果使用此替換字串且為不支援的日誌(從以下列表中),則該值將為空字串。

  • TcpUpstreamConnected - 當 TCP Proxy 篩選器已成功建立上游連線時。

  • TcpPeriodic - 在任何 TCP Proxy 篩選器的定期日誌記錄上。

  • TcpConnectionEnd - 當 TCP 連線在 TCP Proxy 篩選器上結束時。

  • DownstreamStart - 當 HTTP 連線管理員篩選器收到新的 HTTP 請求時。

  • DownstreamTunnelSuccessfullyEstablished - 當 HTTP 連線管理員傳送回應標頭

    指示 HTTP 通道成功時。

  • DownstreamPeriodic - 在任何 HTTP 連線管理員的定期日誌記錄上。

  • DownstreamEnd - 當 HTTP 資料流在 HTTP 連線管理員篩選器上結束時。

  • UpstreamPoolReady - 當 HTTP 路由器篩選器收到新的 HTTP 請求時。

  • UpstreamPeriodic - 在任何 HTTP 路由器篩選器的定期日誌記錄上。

  • UpstreamEnd - 當 HTTP 請求在 HTTP 路由器篩選器上完成時。

  • UdpTunnelUpstreamConnected - 當 UDP Proxy 篩選器已成功建立上游連線時。

    注意:這僅與透過 HTTP 的 UDP 通道相關。

  • UdpPeriodic - 在任何 UDP Proxy 篩選器的定期日誌記錄上。

  • UdpSessionEnd - 當 UDP 會話在 UDP Proxy 篩選器上結束時。

%UNIQUE_ID%

動態產生的唯一識別碼 (UUID)。

%ENVIRONMENT(X):Z%

環境變數 X 的環境值。如果沒有有效的環境變數 X,將使用「-」符號。 Z 是一個可選參數,表示字串截斷到最多 Z 個字元長度。

%TRACE_ID%
HTTP

請求的追蹤 ID。 如果請求沒有追蹤 ID,則這將為空字串。

TCP/UDP

未實作 ("-")。