全部博文(150)
分类: 系统运维
2017-05-04 16:20:02
描述
某个通过jmx监控的tomcat突然采集不到数据,非常奇怪!因为其他tomcat都好好的。 于是先检查zabbix_server.log发现如下错误提示:
{"response":"failed","error":"java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: \n\tjava.net.ConnectException: Connection refused (Connection refused)"}
初步分析
日志里面连接127.0.0.1被拒接,实际上减产zabbix内配置的ip是10.0.x.x,根本不是127.0.0.1! 而且本机其他tomcat的监控配置的ip都是一模一样的10.0.x.x都可以正常获取数据,所以基本排除了ip配置错误的可能。
先抓包看看有没有新发现
14:15:23.813599 IP 10.0.1.21.52018 > 10.0.1.2.35029: Flags [P.], seq 16:241, ack 72, win 114, options [nop,nop,TS val 1187352905 ecr 1080255901], length 225 0x0000: 4500 0115 b888 4000 4006 6b44 0a00 0115 E.....@.@.kD.... 0x0010: 0a00 0102 cb32 88d5 40b7 29d1 cb06 c15b .....2..@.)....[ 0x0020: 8018 0072 1458 0000 0101 080a 46c5 9149 ...r.X......F..I 0x0030: 4063 659d 51ac ed00 0577 0f01 b0de 5ddd @ce.Q....w....]. 0x0040: 0000 015b cc31 2f2b 8cd2 7372 002e 6a61 ...[.1/+..sr..ja 0x0050: 7661 782e 6d61 6e61 6765 6d65 6e74 2e72 vax.management.r 0x0060: 656d 6f74 652e 726d 692e 524d 4953 6572 emote.rmi.RMISer 0x0070: 7665 7249 6d70 6c5f 5374 7562 0000 0000 verImpl_Stub.... 0x0080: 0000 0002 0200 0070 7872 001a 6a61 7661 .......pxr..java 0x0090: 2e72 6d69 2e73 6572 7665 722e 5265 6d6f .rmi.server.Remo 0x00a0: 7465 5374 7562 e9fe dcc9 8be1 651a 0200 teStub......e... 0x00b0: 0070 7872 001c 6a61 7661 2e72 6d69 2e73 .pxr..java.rmi.s 0x00c0: 6572 7665 722e 5265 6d6f 7465 4f62 6a65 erver.RemoteObje 0x00d0: 6374 d361 b491 0c61 331e 0300 0070 7870 ct.a...a3....pxp 0x00e0: 7732 000a 556e 6963 6173 7452 6566 0009 w2..UnicastRef.. 0x00f0: 3132 372e 302e 302e 3100 00d7 7d5b 1a9d 127.0.0.1...}[.. 0x0100: 530b aa35 bab0 de5d dd00 0001 5bcc 312f S..5...]....[.1/ 0x0110: 2b80 0101 78 +...x
果然有料
抓包发现的该tomcat的jmx返回给zabbix-java-gateway的数据包里面有“UnicastRef..127.0.0.1 ”字样
14:14:28.086601 IP 10.0.1.23.52018 > 10.0.1.2.35622: Flags [P.], seq 16:241, ack 72, win 227, options [nop,nop,TS val 1124559044 ecr 1080200175], length 225 0x0000: 4500 0115 3e7b 4000 4006 e54f 0a00 0117 E...>{@.@..O.... 0x0010: 0a00 0102 cb32 8b26 66da 56c9 6880 ce04 .....2.&f.V.h... 0x0020: 8018 00e3 1e4e 0000 0101 080a 4307 68c4 .....N......C.h. 0x0030: 4062 8bef 51ac ed00 0577 0f01 4794 88c8 @b..Q....w..G... 0x0040: 0000 015b cccf 59be 4b10 7372 002e 6a61 ...[..Y.K.sr..ja 0x0050: 7661 782e 6d61 6e61 6765 6d65 6e74 2e72 vax.management.r 0x0060: 656d 6f74 652e 726d 692e 524d 4953 6572 emote.rmi.RMISer 0x0070: 7665 7249 6d70 6c5f 5374 7562 0000 0000 verImpl_Stub.... 0x0080: 0000 0002 0200 0070 7872 001a 6a61 7661 .......pxr..java 0x0090: 2e72 6d69 2e73 6572 7665 722e 5265 6d6f .rmi.server.Remo 0x00a0: 7465 5374 7562 e9fe dcc9 8be1 651a 0200 teStub......e... 0x00b0: 0070 7872 001c 6a61 7661 2e72 6d69 2e73 .pxr..java.rmi.s 0x00c0: 6572 7665 722e 5265 6d6f 7465 4f62 6a65 erver.RemoteObje 0x00d0: 6374 d361 b491 0c61 331e 0300 0070 7870 ct.a...a3....pxp 0x00e0: 7732 000a 556e 6963 6173 7452 6566 0009 w2..UnicastRef.. 0x00f0: 3130 2e30 2e31 2e32 3300 0085 7ece aadd 10.0.1.23...~... 0x0100: 5f44 ea91 6647 9488 c800 0001 5bcc cf59 _D..fG......[..Y 0x0110: be80 0101 78 ....x
故障初步定位
通过对比正常主机返回的数据是本机的ip而不是127的ip判断, 应该属于故障tomcat本身的设置或者代码方面的问题。 之所以排除网络的可能是因为本机上其他tomcat的监控室正常的。
排除代码和配置
通过对比故障和正常tomcat的配置文件及war的md5码,确认一致,排除配置和代码的可能。
感觉网络还是需要确认
故障tomat的监听
[root@web01 bin]# lsof -p 20911 |grep LISTEN java 20911 tomcat 16u IPv4 511652279 0t0 TCP *:55165 (LISTEN) java 20911 tomcat 17u IPv4 511652280 0t0 TCP *:52018 (LISTEN) java 20911 tomcat 18u IPv4 511652281 0t0 TCP *:53596 (LISTEN) java 20911 tomcat 37u IPv4 511652282 0t0 TCP *:51018 (LISTEN) java 20911 tomcat 67u IPv4 511651274 0t0 TCP localhost:53018 (LISTEN)
正常tomcat监听
java 24715 tomcat 16u IPv4 293717104 0t0 TCP *:34174 (LISTEN) java 24715 tomcat 17u IPv4 293717105 0t0 TCP *:52018 (LISTEN) java 24715 tomcat 18u IPv4 293717106 0t0 TCP *:36197 (LISTEN) java 24715 tomcat 37u IPv4 293717107 0t0 TCP *:51018 (LISTEN) java 24715 tomcat 38u IPv4 293713856 0t0 TCP localhost:53018 (LISTEN)
对比分析
发现两个tomcat都监听了localhost,也就是127.0.0.1,是不是有的tomcat 返回的是本机ip,有的却返回了localhost的ip导致的呢?
第一条就是!
ConfigureJMX - Zabbix.org 翻译此页 2016年4月19日 - How Zabbix monitors JMX? Zabbix connects to Java ... ConnectException: Connection refused to host: 127.0.0.1; nested exception is: java.net.
tomcat启动时增加参数 -Djava.rmi.server.hostname=$REMOTE_HOST_IP_ADDR 即可解决该故障
#!/usr/bin/env bash ZBXGET="/usr/bin/zabbix_get" if [ $# != 5 ] then echo "Usage: $0" exit; fi QUERY="{\"request\": \"java gateway jmx\",\"conn\": \"$3\",\"port\": $4,\"keys\": [\"$5\"]}" $ZBXGET -s $1 -p $2 -k "$QUERY"
修改tomcat的启动文件,添加-Djava.rmi.server.hostname=web01
[root@web01 ~]# vi /etc/init.d/tomcat-xxxx export CATALINA_OPTS="-Dcom.sun.management.jmxremote \ -Djava.rmi.server.hostname=web01 \ -Dcom.sun.management.jmxremote.port=52018 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false"
重启tomcat
[root@web01 ~]# systemctl daemon-reload [root@web01 ~]# systemctl restart tomcat-xxxx
测试OK
[root@ops01 ~]# ./zabbix_get_jmx 127.0.0.1 10052 web01 52018 'jmx[\"java.lang:type=Memory\",HeapMemoryUsage.max]' {"data":[{"value":"1013448704"}],"response":"success"}
抓包观察OK
15:13:20.219330 IP 10.0.1.21.52018 > 10.0.1.2.48027: Flags [P.], seq 16:237, ack 72, win 114, options [nop,nop,TS val 1190829298 ecr 1083732308], length 221 0x0000: 4500 0111 acc2 4000 4006 770e 0a00 0115 E.....@.@.w..... 0x0010: 0a00 0102 cb32 bb9b 1e00 305e 18d6 66fb .....2....0^..f. 0x0020: 8018 0072 0e70 0000 0101 080a 46fa 9cf2 ...r.p......F... 0x0030: 4098 7154 51ac ed00 0577 0f01 e4ad b8e9 @.qTQ....w...... 0x0040: 0000 015b d24b 0070 81c7 7372 002e 6a61 ...[.K.p..sr..ja 0x0050: 7661 782e 6d61 6e61 6765 6d65 6e74 2e72 vax.management.r 0x0060: 656d 6f74 652e 726d 692e 524d 4953 6572 emote.rmi.RMISer 0x0070: 7665 7249 6d70 6c5f 5374 7562 0000 0000 verImpl_Stub.... 0x0080: 0000 0002 0200 0070 7872 001a 6a61 7661 .......pxr..java 0x0090: 2e72 6d69 2e73 6572 7665 722e 5265 6d6f .rmi.server.Remo 0x00a0: 7465 5374 7562 e9fe dcc9 8be1 651a 0200 teStub......e... 0x00b0: 0070 7872 001c 6a61 7661 2e72 6d69 2e73 .pxr..java.rmi.s 0x00c0: 6572 7665 722e 5265 6d6f 7465 4f62 6a65 erver.RemoteObje 0x00d0: 6374 d361 b491 0c61 331e 0300 0070 7870 ct.a...a3....pxp 0x00e0: 772e 000a 556e 6963 6173 7452 6566 0005 w...UnicastRef.. 0x00f0: 7765 6230 3100 00ea d5a7 39b1 1943 203b web01.....9..C.; 0x0100: 44e4 adb8 e900 0001 5bd2 4b00 7080 0101 D.......[.K.p... 0x0110: 78 x