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