存取記錄
設定
存取日誌設定為 HTTP 連線管理員設定、TCP Proxy、UDP Proxy 或 Thrift 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_format
或 typed_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_format
與 json_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/2 或 HTTP/3。
- TCP/UDP
未實作 ("-")。
在類型化的 JSON 日誌中,如果協定不可用(例如,在 TCP 日誌中),PROTOCOL 將會呈現字串
"-"
。- %UPSTREAM_PROTOCOL%
- HTTP
上游協定。目前為 HTTP/1.1 HTTP/2 或 HTTP/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_duration或max_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 |
回應詳細資訊為 |
- 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_STRING
、SNAKE_STRING
和NUMBER
。例如,如果 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.2
、TLSv1.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.2
、TLSv1.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
未實作 ("-")。