一、现 状
对于Zabbix通过JMX来监控tomcat,网络上有很多文章,但大都是相同或类似的,且都是没有设置防火墙的,所以就安装而言百度就行。现在为了服务的安全,是必须开启防火墙的。于是出现了一系列的问题。
二、当前环境
1、Zabbix_server的Zabbix版本是3.0.4,系统是Centos7.0,使用YUM安装。
Centos7.0 YUM安装地址:http://blog.csdn.net/reblue520/article/details/52136850
2、Zabbix-server的zabbix_server.conf配置文件
LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid DBName=zabbix DBUser=zabbix DBPassword=zabbix JavaGateway=127.0.0.1 # gateway地址 JavaGatewayPort=10052 # 监听端口 StartJavaPollers=5 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log Timeout=30 AlertScriptsPath=/etc/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts LogSlowQueries=3000
3、zabbix_java_gateway.conf配置文件
LISTEN_IP="0.0.0.0" LISTEN_PORT=10052 PID_FILE="/var/run/zabbix/zabbix_java.pid" START_POLLERS=5 TIMEOUT=3
4、zabbix被监控端catalina.sh添加的内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.13" # tomcat服务器IP
5、防火墙策略添加
Zabbix_server端 firewall-cmd --zone=public --add-port=10052/tcp --permanent 被监控端 iptables -I INPUT 4 -m state --state NEW -m tcp -p tcp --dport 12345 -j ACCEPT
注:Zabbix_server和Zabbix_java_gateway可在不同服务器安装。
三、分析问题
1、当所有配置完成,Zabbix显示不通,如下图
Zabbix_server日志显示
2、我以为配置有问题,于是就修改配置,修改了几次还是不行,让我意识到可能不是配置的问题,既然不是配置问题,那最大的可能就是防火墙,关闭防火墙进行测试。让我惊喜的是居然真的通了
。被监控端的防火墙端口开了,为什么不通呢,难道还有一个端口没有开吗?于是重新开启防火墙,查看端口,如下
3、真的有端口被调用了,而且是动态的,当重启tomcat后端口又被改变,所以说,开启端口这种方法是行不通的,还有就是开放多端口,将一系列端口开放,但端口多了,容易出现问题,和开不开防火墙差不多。那么到底如何呢,只能是将另一端口固定调用。怎么做呢,方法如下:
4、修改tomcat/bin/catalina.sh添加的内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12345 #将端口这条去掉, -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.13" # tomcat服务器IP
注:必须去的,如果不去掉,将会导致不成功!
5、在tomcat/conf/server.xml添加以下内容
<Server port="9005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346" /> # 添加最后一条
6、添加被监控端防火墙策略
iptables -I INPUT 4 -m state --state NEW -m tcp -p tcp --dport 12346 -j ACCEPT
7、下载catalina-jmx-remote.jar将此文件放到tomcat/lib目录下
http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.37/bin/extras/catalina-jmx-remote.jar
8、成功,重启服务
转载于:https://blog.51cto.com/erguang/1857861