捕获 Thrift 流量
编辑捕获 Thrift 流量编辑
Apache Thrift 是一种通信协议和 RPC 框架,最初由 Facebook 创建。它有时用于 微服务 架构,因为它与更明显的 HTTP/RESTful API 选择相比,提供更好的性能,同时仍然支持各种编程语言和框架。
Packetbeat 基于流量副本工作,这意味着您可以获得性能管理功能,而无需以任何方式修改您的服务,也无需任何延迟开销。Packetbeat 从网络中捕获交易并将其索引到 Elasticsearch 中,以便可以分析和搜索它们。
Packetbeat 索引每个 Thrift-RPC 调用的方法、参数、返回值和异常。您可以根据这些字段中的任何一个进行搜索并创建统计信息。Packetbeat 会自动填充 status
列,其中包含 OK
或 Error
,因此可以轻松找到有问题的 RPC 调用。如果交易返回异常,则会将其置于 Error
状态。
Packetbeat 还索引 event.duration
字段,因此您可以获得性能分析并找到缓慢的 RPC 调用。
这是一个示例性能仪表板
Thrift 支持多种 传输和协议类型。目前 Packetbeat 支持默认的 TSocket
传输以及 TFramed
传输。从协议的角度来看,Packetbeat 目前仅支持默认的 TBinary
协议。
Packetbeat 还有一些配置选项,使您可以获得可见性、磁盘使用量和数据保护之间的平衡。例如,您可以选择对所有字符串进行混淆或存储请求而不存储响应,同时仍然捕获每个 RPC 调用的响应时间。您还可以选择将字符串和列表的大小限制为给定数量的元素,因此您可以微调要存储在 Elasticsearch 中的数据量。
Thrift 协议有一些特定的配置选项。以下是在 packetbeat.yml
配置文件中为 Thrift 协议提供的示例配置部分
packetbeat.protocols: - type: thrift transport_type: socket protocol_type: binary idl_files: ["tutorial.thrift", "shared.thrift"] string_max_size: 200 collection_max_size: 20 capture_reply: true obfuscate_strings: true drop_after_n_struct_fields: 100
向 Packetbeat 提供 Thrift IDL 文件是可选的。二进制 Thrift 消息包含调用的方法名称和足够的结构信息,以便在不需要 IDL 文件的情况下解码消息。但是,如果提供 IDL 文件,Packetbeat 还可以解析服务名称、参数和异常名称。
配置选项编辑
另请参阅 通用协议选项.
transport_type
编辑
Thrift 传输类型。目前此选项接受 socket
(用于 TSocket,它是默认的 Thrift 传输)和 framed
(用于 TFramed Thrift 传输)的值。默认值为 socket
。
protocol_type
编辑
Thrift 协议类型。目前唯一接受的值是 binary
(用于 TBinary 协议,它是默认的 Thrift 协议)。
idl_files
编辑
Packetbeat 正在监控的服务的 Thrift 接口描述语言 (IDL) 文件。提供 IDL 文件是可选的,因为 Thrift 消息包含足够的信息,以便在没有 IDL 文件的情况下进行解码。但是,提供 IDL 使 Packetbeat 可以包含参数和异常名称。
string_max_size
编辑
参数或返回值中字符串的最大长度。如果字符串超过此值,则会自动将其截断到此长度。Packetbeat 在字符串末尾添加点以标记它被截断。默认值为 200。
collection_max_size
编辑
Thrift 列表、集合、映射或结构中的最大元素数。如果集合中的元素数超过此值,则 Packetbeat 只会捕获指定的元素数。Packetbeat 会在集合末尾添加一个虚拟的最后一个元素 ...
以标记它被截断。默认值为 15。
capture_reply
编辑
如果将此选项设置为 false,Packetbeat 会从回复中解码方法名称,并简单地跳过响应消息的其余部分。此设置在性能、磁盘使用量或数据保留方面可能很有用。默认值为 true。
obfuscate_strings
编辑
如果将此选项设置为 true,Packetbeat 会将方法参数、返回值或异常结构中找到的所有字符串替换为 "*"
字符串。
drop_after_n_struct_fields
编辑
在 Packetbeat 忽略整个交易之前,结构可以拥有的最大字段数。这是一种内存保护机制(这样 Packetbeat 的内存不会无限增长),因此您通常会将其设置为相对较高的值。默认值为 500。