Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1730362
  • 博文数量: 150
  • 博客积分: 660
  • 博客等级: 上士
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 11:39
文章分类

全部博文(150)

文章存档

2019年(4)

2018年(36)

2017年(53)

2016年(7)

2015年(3)

2014年(3)

2013年(27)

2012年(2)

2011年(1)

2006年(1)

2005年(13)

分类: 系统运维

2017-05-04 16:20:02

zabbix监控tomcat出现"Connection refused to host: 127.0.0.1"的故障解决

故障现象

描述

某个通过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码,确认一致,排除配置和代码的可能。

感觉网络还是需要确认

对比故障故障tomcat的网络监听

故障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导致的呢?

为了确认,用关键字"zabbix jmx 127.0.0.1"google了一把

第一条就是!

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

致谢与参考

阅读(13471) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~