流量捕获

Envoy 目前提供了两个可以捕获流量的实验性扩展:

捕获传输套接字传输配置

Attention

捕获传输套接字是实验性的,正在积极地开发中。目前有一套非常有限的匹配条件、输出配置、输出汇等。随着时间的推移,能力将得到扩展,配置结构也可能发生变化。

捕获器可以在 监听器集群 传输套接字上配置,提供分别在下行和上行L4连接上进行插接的能力。 要配置流量捕获,需要在监听器或集群中添加一个 envoy.transport_sockets.tap 传输套接字 配置。对于纯文本套接字来说,它可能是这样的:

transport_socket:
  name: envoy.transport_sockets.tap
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap
    common_config:
      static_config:
        match_config:
          any_match: true
        output_config:
          sinks:
            - format: PROTO_BINARY
              file_per_tap:
                path_prefix: /some/tap/path
    transport_socket:
      name: envoy.transport_sockets.raw_buffer

TLS 套接字,是这样的:

transport_socket:
  name: envoy.transport_sockets.tap
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap
    common_config:
      static_config:
        match_config:
          any_match: true
        output_config:
          sinks:
            - format: PROTO_BINARY
              file_per_tap:
                path_prefix: /some/tap/path
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config: <TLS context>

其中,TLS 上下文配置分别替换了监听器或集群上现有的 下行上行 TLS 配置。

每个独特的套接字实例都会生成一个以 path_prefix 为前缀的跟踪文件。例如:/some/tap/path_0.pb。

缓冲数据限制

对于缓冲套接字的捕获,Envoy 会限制捕获的主体数据量,以避免出现 OOM 情况。接收和传输数据的默认限制是 1KiB,这可以通过 max_buffered_rx_bytesmax_buffered_tx_bytes 设置进行配置。当缓冲套接字被截断时,跟踪将通过 read_truncatedwrite_truncated 字段以及 truncated 字段显示截断情况。

流式传输

捕获传输套接字支持缓冲和流式传输,由 streaming 设置控制。缓冲时,会发出 SocketBufferedTrace 信息。当进行流式传输时,会发出一系列 SocketStreamedTraceSegment 消息。

更多信息参见 HTTP tap filter streaming 文档,HTTP 过滤器和传输套接字的大部分概念是重复的。

PCAP 传播

生成的跟踪文件可以转换为 libpcap format,格式,可以使用如 Wireshark 和 tap2pcap 这样的工具进行分析,例如:

bazel run @envoy_api_canonical//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