捕获 Thrift 流量编辑

Apache Thrift 是一种通信协议和 RPC 框架,最初由 Facebook 创建。它有时用于 微服务 架构,因为它与更明显的 HTTP/RESTful API 选择相比,提供更好的性能,同时仍然支持各种编程语言和框架。

Packetbeat 基于流量副本工作,这意味着您可以获得性能管理功能,而无需以任何方式修改您的服务,也无需任何延迟开销。Packetbeat 从网络中捕获交易并将其索引到 Elasticsearch 中,以便可以分析和搜索它们。

Packetbeat 索引每个 Thrift-RPC 调用的方法、参数、返回值和异常。您可以根据这些字段中的任何一个进行搜索并创建统计信息。Packetbeat 会自动填充 status 列,其中包含 OKError,因此可以轻松找到有问题的 RPC 调用。如果交易返回异常,则会将其置于 Error 状态。

Packetbeat 还索引 event.duration 字段,因此您可以获得性能分析并找到缓慢的 RPC 调用。

这是一个示例性能仪表板

Thrift-RPC dashboard

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。