因为thrift本身没有较好的access log特性,所以调研了一些监控响应时间的方案。

  • thrift-tool 已不维护了

  • tcpdump/wireshark 过于原始,而且wireshark需要2.0以上才支持直接thrift协议,源码安装过程很痛苦

  • packetbeat搭配es + kibana 初步跑通

安装过程参考 Step 1: Install Packetbeat

packetbeat的抓包有2种模式,pcap 和 af_packet,详细的说明参考

Set traffic capturing options

性能说明参考

Performance difference between af_packet/libpcap?

packetbeat使用了gopacket,相关文档参考 https://godoc.org/github.com/google/gopacket gopacket支持4重sniff模式:

  • pcap

  • pfring

  • afpacket

  • tcpassembly

packetbeat用了其中两种pcap和afpacket,其中pcap是对libpcap的golang封装,afpacket是使用linux系统的AF_PACKET功能实现内存直接读取,参考http://lxr.free-electrons.com/source/Documentation/networking/packet_mmap.txt【该链接在源码有说明https://github.com/elastic/beats/blob/master/vendor/github.com/tsg/gopacket/afpacket/afpacket.go】

在linux系统环境,afpacket比pcap模式更好,主要原因

注意的是,在某些情况下,如果要抓所有经过网卡的包,需要开启混淆模式

ifconfig eth0 promisc # 关闭混淆模式 ifconfig eth0 -promisc

链接 Packet occasionally hung when using sniffer type af_packet

对于thrift协议抓包的配置选项参考 Capture Thrift traffic | Packetbeat Reference [6.3] | Elastic

packetbeat支持很多协议,包括mysql,redis等,我只用thrift,thrift协议本身的说明参考这里 apache/thrift

选项的一些说明:

  • protocol type 有binary和compact两种

  • transport type 有socket和framed两种

如果有更多问题,可以直接去官方论文里提问 Packetbeat


original refer