packetbeat监控thrift
因为thrift本身没有较好的access log特性,所以调研了一些监控响应时间的方案。
thrift-tool 已不维护了
tcpdump/wireshark 过于原始,而且wireshark需要2.0以上才支持直接thrift协议,源码安装过程很痛苦
packetbeat搭配es + kibana 初步跑通
安装过程参考 Step 1: Install Packetbeat
packetbeat的抓包有2种模式,pcap 和 af_packet,详细的说明参考
性能说明参考
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模式更好,主要原因
避免了cgo调用的开销,golang调用c语言库
避免了 socket_packet 模式 ‘SOCK_PACKET’ and ‘PF_PACKET’
使用了PFPACKET的 packet_mmap
注意的是,在某些情况下,如果要抓所有经过网卡的包,需要开启混淆模式
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
Comments