fggweert 发表于 2015-5-22 08:59:54

mongodb监控工具mongosniff

介绍

mongosniff提供了对数据库实时活动的低级别操作跟踪和嗅探视图。可以将mongosniff认为是专为MongoDB定制的,类似于tcpdump用于TCP/IP网络流量分析。mongosniff常用于驱动开发。

注意:mongosniff需要libpcap,并且只对类Unix系统可用。

相对于mongosniff,Wireshark,一个流行的网络嗅探工具,可用于侦测和解析MongoDB线协议。

用法

下面的命令连接到运行在localhost的27017和27018上的mongod或mongos:   


1
mongosniff --source NET lo 27017 27018





下面的命令只记录运行在localhost的27018上的mongod或mongos的无效的BSON对象,用于驱动开发和问题跟踪:   


1
mongosniff --objcheck --source NET lo 27018





实践

1
2
# mongosniff --help   
mongosniff: error while loading shared libraries: libpcap.so.0.9: cannot open shared object file: No such file or directory






1
2
# which mongosniff   
/usr/bin/mongosniff






1
2
3
4
5
6
7
8
9
10
# ldd /usr/bin/mongosniff   
      linux-vdso.so.1 =>(0x00007fffe2d7a000)   
      libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003558e00000)   
      librt.so.1 => /lib64/librt.so.1 (0x0000003559200000)   
      libpcap.so.0.9 => not found   
      libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003559e00000)   
      libm.so.6 => /lib64/libm.so.6 (0x0000003559600000)   
      libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000355a600000)   
      libc.so.6 => /lib64/libc.so.6 (0x0000003558a00000)   
      /lib64/ld-linux-x86-64.so.2 (0x0000003558200000)





可以看出libpcap.so.0.9 => not found并没有找到。


1
2
3
4
# cd /usr/lib64   
# ls -al | grep libpcap   
lrwxrwxrwx.1 root root      16 Feb 26 17:28 libpcap.so.1 -> libpcap.so.1.4.0   
-rwxr-xr-x   1 root root260880 Nov 222013 libpcap.so.1.4.0





添加软连接。


1
# ln -s /usr/lib64/libpcap.so.1.4.0 /usr/lib64/libpcap.so.0.9





再次查看帮助。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# mongosniff --help   
Usage: mongosniff [--help] [--forward host:port] [--source (NET <interface> | (FILE | DIAGLOG) <filename>)] [<port0> <port1> ... ]   
--forward       Forward all parsed request messages to mongod instance at   
                specified host:port   
--source      Source of traffic to sniff, either a network interface or a   
                file containing previously captured packets in pcap format,   
                or a file containing output from mongod's --diaglog option.   
                If no source is specified, mongosniff will attempt to sniff   
                from one of the machine's network interfaces.   
--objcheck      Log hex representation of invalid BSON objects and nothing   
                else.Spurious messages about invalid objects may result   
                when there are dropped tcp packets.   
<port0>...      These parameters are used to filter sniffing.By default,   
                only port 27017 is sniffed.   
--help          Print this help message.





抓包:


1
# /usr/bin/mongosniff --source NET bond0 > /var/log/currentOp/sniff.log





下面是sniff.log中的部分内容:


1
2
10.10.0.1:55553-->> 10.10.0.2:27017 MyTest.Pro1042 bytesid:41d99   269721   
      query: { $query: { id: { $in: [ 380, 383 ] }, Availability.Status: { $lt: 5 }, $or: [ { id: { $lt: 331 } }, { id: { $gt: 200, $lt: 400 } }, { id: { $gt: 600, $lt: 800 } } ] }, $orderby: { Availability.Status: 1 } }ntoreturn: 0 ntoskip: 0 hasfields SlaveOk



页: [1]
查看完整版本: mongodb监控工具mongosniff