流量採集
Envoy 目前提供兩個可以採集流量的實驗性擴展
HTTP tap 過濾器。請參閱連結的過濾器文件以取得更多資訊。
Tap 傳輸層 Socket 擴展,可以攔截流量並寫入 protobuf 追蹤檔。本文的其餘部分描述 tap 傳輸層 socket 的組態。
Tap 傳輸層 Socket 組態
注意
tap 傳輸層 socket 是實驗性的,目前正在積極開發中。目前只有非常有限的匹配條件、輸出組態、輸出接收器等。功能將隨著時間推移而擴展,組態結構也可能會發生變化。
可以在監聽器和叢集傳輸層 socket 上組態流量採集,從而能夠分別介入下游和上游 L4 連線。
若要組態流量採集,請將 envoy.transport_sockets.tap
傳輸層 socket 組態新增至監聽器或叢集。對於純文字 socket,它可能如下所示
29 transport_socket:
30 name: envoy.transport_sockets.tap
31 typed_config:
32 "@type": type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap
33 common_config:
34 static_config:
35 match:
36 any_match: true
37 output_config:
38 sinks:
39 - format: PROTO_BINARY
40 file_per_tap:
41 path_prefix: /some/tap/path
42 transport_socket:
43 name: envoy.transport_sockets.raw_buffer
44 typed_config:
45 "@type": type.googleapis.com/envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer
對於 TLS socket,它將會是
44 transport_socket:
45 name: envoy.transport_sockets.tap
46 typed_config:
47 "@type": type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap
48 common_config:
49 static_config:
50 match:
51 any_match: true
52 output_config:
53 sinks:
54 - format: PROTO_BINARY
55 file_per_tap:
56 path_prefix: /some/tap/path
57 transport_socket:
58 name: envoy.transport_sockets.tls
59 typed_config:
60 "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
其中 TLS 環境組態會取代監聽器或叢集上的任何現有 downstream 或 upstream TLS 組態。
每個唯一的 socket 實例都會產生一個以 path_prefix
為字首的追蹤檔。例如,/some/tap/path_0.pb
。
緩衝資料限制
對於緩衝 socket 採集,Envoy 會限制採集的本文資料量,以避免發生 OOM 狀況。接收和傳輸資料的預設限制都是 1KiB。這可以透過 max_buffered_rx_bytes 和 max_buffered_tx_bytes 設定來組態。當緩衝 socket 採集被截斷時,追蹤會透過 read_truncated 和 write_truncated 欄位以及本文的 truncated 欄位來指示截斷。
串流
tap 傳輸層 socket 支援緩衝和串流,由 streaming 設定控制。當緩衝時,會發出 SocketBufferedTrace 訊息。當串流時,會發出一系列 SocketStreamedTraceSegment。
請參閱 HTTP tap 過濾器串流文件以取得更多資訊。大多數概念在 HTTP 過濾器和傳輸層 socket 之間重疊。
PCAP 產生
產生的追蹤檔可以轉換為 libpcap 格式,適合使用 Wireshark 等工具進行分析,使用 tap2pcap
公用程式,例如
bazel run @envoy_api//tools:tap2pcap /some/tap/path_0.pb path_0.pcap
tshark -r path_0.pcap -d "tcp.port==10000,http2" -P
1 0.000000 127.0.0.1 → 127.0.0.1 HTTP2 157 Magic, SETTINGS, WINDOW_UPDATE, HEADERS
2 0.013713 127.0.0.1 → 127.0.0.1 HTTP2 91 SETTINGS, SETTINGS, WINDOW_UPDATE
3 0.013820 127.0.0.1 → 127.0.0.1 HTTP2 63 SETTINGS
4 0.128649 127.0.0.1 → 127.0.0.1 HTTP2 5586 HEADERS
5 0.130006 127.0.0.1 → 127.0.0.1 HTTP2 7573 DATA
6 0.131044 127.0.0.1 → 127.0.0.1 HTTP2 3152 DATA, DATA