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