流量捕获¶
Envoy 目前提供了两个可以捕获流量的实验性扩展:
HTTP 捕获过滤器。更多信息参见过滤器文档。
捕获传输套接字拓展 可以拦截流量并写入 protobuf 跟踪文件。本文档的其余部分将介绍捕获传输套接字的配置。
捕获传输套接字传输配置¶
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_bytes 和 max_buffered_tx_bytes 设置进行配置。当缓冲套接字被截断时,跟踪将通过 read_truncated 和 write_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