流量採集

Envoy 目前提供兩個可以採集流量的實驗性擴展

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 環境組態會取代監聽器或叢集上的任何現有 downstreamupstream TLS 組態。

每個唯一的 socket 實例都會產生一個以 path_prefix 為字首的追蹤檔。例如,/some/tap/path_0.pb

緩衝資料限制

對於緩衝 socket 採集,Envoy 會限制採集的本文資料量,以避免發生 OOM 狀況。接收和傳輸資料的預設限制都是 1KiB。這可以透過 max_buffered_rx_bytesmax_buffered_tx_bytes 設定來組態。當緩衝 socket 採集被截斷時,追蹤會透過 read_truncatedwrite_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