一. 在tomcat的catalina.sh文件中,添加配置
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false #是否使用SSL。
-Dcom.sun.management.jmxremote.authenticate=false #是否开启认证。
-Djava.rmi.server.hostname=192.168.58.130" #Tomcat所在服务器IP。
不在catalina.sh中配置 -Dcom.sun.management.jmxremote.port=12345,因为如果配置这个参数,在tomcat重启后,除了12345端口被监听外,还会随机监听一个端口,就会造成防火墙(firewalld)无法准确的开放这个随机端口而使得jmx监控失效
二. 将对应tomcat版本的catalina-jmx-remote.jar放到tomcat下的lib文件夹下后
因为我的tomcat是8.5.31版本,所以catalina-jmx-remote.jar的下载地址:http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.31/bin/extras/,其他版本的tomcat请下载对应的catalina-jmx-remote.jar
三. 在tomcat的server.xml文件中,添加配置后,重启tomcat
在server.xml的shutdown中配置jmx监听端口,就可以避免第一步中出现的随机端口的问题
四.配置防火墙(firewalld),开放12345端口
firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --reload
五.安装zabbix-java-gateway后,并启动
我的zabbix是按照官网的提供的步骤通过rpm,yum install安装的server,具体可以查看https://www.zabbix.com/download
因为默认没有安装zabbix-java-gateway,所以需要额外安装
yum list zabbix*
yum install zabbix-java-gateway.x86_64
安装完成后,/etc/zabbix/zabbix_java_gateway.conf配置文件中的参数可以直接默认使用,然后启动zabbix-java-gateway
systemctl start zabbix-java-gateway
六. 修改zabbix-server的配置文件zabbix_server.conf,并重启zabbix-server
配置文件的路径是/etc/zabbix
JavaGateway=127.0.0.1 #默认为空,而且因为server和java-gateway在同一台,所以配置为127.0.0.1
JavaGatewayPort=10052 #默认已经为10052,所以不用配置
StartJavaPollers=5 #默认为0,修改成5
七. zabbix web端配置
zabbix自带的tomcat监控模块的监控项的键值和实际的tomcat不匹配所以需要修改,否则会报became not supported错误
jmx["Catalina:type=GlobalRequestProcessor,name=http-8080",bytesReceived]修改为
jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",bytesReceived]
这个name可以查看tomcat的catalina.out日志文件中得到,8080、8443、8009其他监控项键值修改同理
jmx["Catalina:type=Manager,path=/,host=localhost",activeSessions]"修改为
jmx["Catalina:type=Manager,context=/jenkins,host=localhost",maxActive] 将path修改为context,监控的是webapps下的jenkins项目
如果这些name值不知道,或者还需要监控其他的zabbix自带的tomcat监控模块默认没有的项,可以在windows下使用jdk自带的jconsole.exe来查看
在需要的监控的主机中配置jmx接口,关联tomcat监控模块
八.可能遇到的问题
1. 由于防火墙的关系,所以需要开放端口,如果在tomcat的catalina.sh中配置了12345端口,启动tomcat后jmx会监听两个端口,一个是12345,另外一个是随机生成的,就会造成端口开放无法完全,具体解决方法查看上面的第一到第三步
2. zabbix-server日志中报监控项 jmx["Catalina:type=GlobalRequestProcessor,name=http-8080",bytesReceived]" became not supported: Catalina:type=GlobalRequestProcessor,name=http-8080 一系列 became not supported的错误,具体解决方法查看上面的第七