Zabbix配置JMX监控的一点记录

前言

本文主要是记录一下配置zabbix中JMX监控的时候遇到的一点小问题。

问题出现了

zabbix界面显示连不上被监控机器的JMX端口,一直提示connection timeout。可是防火墙已经改好了,zabbix界面配置也已经就绪。于是开始从请求的连接细节中思考是否出了问题,最后终于找到了问题的根源。

在防火墙下的RMI

RMI服务端会在本地打开一个服务端口(一般是1099)进行监听请求。如果有请求到来,RMI其实是会打开另一个端口来处理请求并发送响应。默认情况下,是打开端口0来处理。

zabbix如何监控JMX

zabbix首先通过tcp端口(默认是10052,可配置)连接到java-gateway,然后java-gateway会尝试连接远端的jmx端口(默认是12345,可通过-Dcom.sun.management.jmxremote.port 配置),最后远端会让java-gateway用另外一个随机端口来获取RMI信息。

问题根源

RMI服务端随机打开的响应端口会被防火墙屏蔽掉,导致java-gateway根本获取不到JMX的信息。而且防火墙是无法针对这个设置的,因为端口是随机的。

问题解决了

通过设置下面两个JVM参数即可解决。
-Djava.rmi.server.hostname=$REMOTE_HOST_IP_ADDR
-Dcom.sun.management.jmxremote.rmi.port=12346
($REMOTE_HOST_IP_ADDR是指RMI的主机名或者IP,12346是RMI的响应端口)

主要是第二个参数,指定了RMI的响应端口。当远端需要应答java-gateway的JMX请求的时候,不会再随机开辟一个端口,而是告诉java-gateway直接连接这个端口即可。为了方便,可以将这个RMI端口设置和jmxremote的端口相同,那么就可少打开一个端口,也减少了维护防火墙规则的成本。

参考

https://www.zabbix.org/wiki/ConfigureJMX

您的支持将鼓励我继续创作!
0%