捕获 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。