Thrift协议分析器
项目描述
目录
tl;dr
thrift-tools是一个库和一组工具,用于检查Apache Thrift流量。
安装
您可以通过pip安装thrift-tools
$ pip install thrift-tools
或从源代码运行它(如果您已安装依赖项,请参阅以下内容)
$ git clone ... $ cd thrift-tools $ sudo FROM_SOURCE=1 bin/thrift-tool --iface=eth0 --port 9091 dump --show-all --pretty ... $ FROM_SOURCE=1 bin/thrift-tool --port 9090 \ --pcap-file thrift_tools/tests/resources/calc-service-binary.pcap \ dump --show-all --pretty --color \ --idl-file=thrift_tools/tests/resources/tutorial.thrift
工具
thrift-tool可以在交互模式下用于分析实时thrift消息
$ sudo thrift-tool --iface eth0 --port 9091 dump --show-all --pretty [00:39:42:850848] 10.1.8.7:49858 -> 10.1.2.20:3636: method=dosomething, type=call, seqid=1120 header: () fields: [ ( 'struct', 1, [ ('string', 1, 'something to do'), ('i32', 3, 0), ( 'struct', 9, [ ('i32', 3, 2), ('i32', 14, 0), ('i32', 16, 0), ('i32', 18, 25)])])] ------>[00:39:42:856204] 10.1.2.20:3636 -> 10.1.8.7:49858: method=dosomething, type=reply, seqid=1120 header: () fields: [ ( 'struct', 0, [ ('string', 1, 'did something'), ('string', 2, 'did something else'), ('string', 3, 'did some other thing'), ('string', 4, 'did the last thing'), ('i32', 6, 3), ('i32', 7, 11), ('i32', 8, 0), ('i32', 9, 0), ('list', 10, [0]), ...
或者,可以检查离线pcap文件
$ sudo thrift-tool --port 9091 --pcap-file /path/to/myservice.pcap dump ...
请注意,您仍然需要设置正确的端口。
如果您正在使用Finagle,可以尝试以下内容
$ sudo thrift-tool --iface eth0 --port 9091 dump --show-all --pretty --finagle-thrift ...
JSON输出可用于通过jq轻松过滤和查询。例如,您可以通过以下方式列出调用方法“search”的所有IP
$ sudo thrift-tool --port 3030 dump --unpaired --json | jq 'select(.method == "search" and .type == "call") | .src' "10.1.18.5:48534" "10.1.60.2:52008" "10.1.10.27:49856" "10.1.23.24:48116" "10.1.26.7:60462" "10.1.11.10:41895" "10.1.15.13:35285" "10.1.7.17:39759" "10.1.1.19:35481" ...
通过“stats”命令可以汇总每个方法的延迟统计信息
$ sudo thrift-tool --port 6666 stats --count 100 method count avg min max p90 p95 p99 p999 -------- ------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- search2 61 0.00860996 0.00636292 0.0188479 0.010778 0.015192 0.0174422 0.0187074 doc 39 0.00134846 0.00099802 0.00274897 0.00177183 0.00199242 0.00256242 0.00273031 287 unmatched calls
您也可以指定.thrift文件以获得更友好的输出
$ sudo thrift-tool --port 9091 dump --show-all --pretty --color --idl-file /path/to/myidl.thrift ...
要列出所有可用选项
$ thrift-tool --help
请注意,对于吞吐量高的服务器(即:每秒> couple Ks数据包),thrift-tools可能难以跟上,因为消息开始检测有点昂贵(并且您只能用Python达到如此之快)。在这种情况下,您最好保存pcap文件(例如:通过tcpdump),然后进行后处理,即。
$ tcpdump -nn -t port 3030 -w dump.pcap $ sudo thrift-tool --port 3030 --pcap-file dump.pcap stats --count 40000 method count avg min max p90 p95 p99 p999 -------- ------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- resize 40000 0.00850996 0.00336091 0.0101364 0.008071 0.009132 0.009890 0.01005665
库
要从另一个(Python)应用程序使用thrift-tools,您可以通过以下方式导入它
from thrift_tools.message_sniffer import MessageSnifferOptions, MessageSniffer options = MessageSnifferOptions( iface='eth0', port='3636', ip=None, # include msgs from all IPs pcap_file=None, # don't read from a pcap file, live sniff protocol=None, # auto detect protocol finagle_thrift=False, # apache thrift (not twitter's finagle) read_values=True, # read the values of each msg/struct max_queued=20000, # decent sized queue max_message_size=2000, # 2k messages to keep mem usage frugal debug=False # don't print parsing errors, etc ) def printer(timestamp, src, dst, msg): print '%s %s %s %s' % (timestamp, src, dst, msg) message_sniffer = MessageSniffer(options, printer) # loop forever message_sniffer.join()
或者如果您想使用pcap文件
options = MessageSnifferOptions( iface='eth0', port='3636', ip=None, pcap_file="/tmp/myservice.pcap", protocol=None, finagle_thrift=False, read_values=True, max_queued=20000, max_message_size=2000, debug=False ) ...
如果您想筛选特定IP的消息
options = MessageSnifferOptions( iface='eth0', port='3636', ip=['172.16.24.3', '172.16.24.4'], # ignores everyone else pcap_file="/tmp/myservice.pcap", protocol=None, finagle_thrift=False, read_values=True, max_queued=20000, max_message_size=2000, debug=False ) ...
请参阅examples/以获取更多使用此库的方法!
测试
要运行测试
$ python setup.py nosetests
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
thrift-tools-0.0.7.tar.gz (33.9 kB 查看哈希值)
构建分发
thrift_tools-0.0.7-py3-none-any.whl (37.6 kB 查看哈希值)
关闭
thrift-tools-0.0.7.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f53ced7ddb89e0a7a212d3e09ec82af1cb2a71949af227cbc5ab63e34045a2f9 |
|
MD5 | dba4eb5338cc6441bc9fb083eca93ea0 |
|
BLAKE2b-256 | e4785e5b5395118445495452f4598470886a7b5fd0a6ace02b4d88e7707a8ec4 |
关闭
thrift_tools-0.0.7-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fef676951d202c406665d75d257ae54d9639fca675b340d3e708a5025f732e9e |
|
MD5 | ba6473fccf55b234468142d374027a74 |
|
BLAKE2b-256 | e75591f6d77876335eb220143d185b6dfda066de99653faddc186c4d59ca4ff0 |