Zabbix提供了JMX监控,它通过JMX API获取JVM信息,从而提供监控数据。本文讲述使用JMX监控Tomcat的JVM信息。
Zabbix Server通过Zabbix Java gateway收集JMX监控数据,因此首先需要安装Zabbix-Java-gateway,同时修改Zabbix Server的配置。
可以在其他主机安装Zabbix-Java-gateway,只需要修改Zabbix-server配置文件,指定Zabbix-Java-gateway的地址和端口,这里就在部署Zabbix Server的主机上部署Zabbix-Java-gateway。
# yum install zabbix-java-gateway
配置文件是 /etc/zabbix/zabbix_java_gateway.conf
文件,文本采取默认配置,配置项详细信息可以参考下图或者参考 官方Zabbix-java-gateway配置项 。
# systemctl start zabbix-java-gateway
需要在zabbix server配置文件中增加zabbix-java-gateway相关配置
# vim /etc/zabbix/zabbix_server.conf
修改配置信息
# zabbix-java-gateway地址 JavaGateway=192.168.152.140 # zabbix-java-gateway端口 JavaGatewayPort=10052 StartJavaPollers=5
重启Zabbix server
# systemctl restart zabbix-server
本文是采用docker部署tomcat,因此本文中是修改tomcat的 catalina.sh 脚本,主要是添加以下几个jvm启动参数
-Dcom.sun.management.jmxremote # java应用ip地址(docker部署 使用宿主机ip) -Djava.rmi.server.hostname=192.168.152.142 # jmx端口 -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.rmi.port=12345 # 不开启认证 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
在tomcat catalina.sh脚本则可以在文件前面添加
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote" JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.152.142" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
重新启动tomcat容器,暴露JMX 12345端口,并挂载数据卷(主要是配置tomcat的catalina.sh),这里可以先启动一个tomcat容器,将容器中的catalina.sh docker cp到宿主机上再做修改
# docker rm -f tomcat # docker run --name tomcat -p 8080:8080 -p 12345:12345 -v /data/zabbix/catalina.sh:/usr/local/tomcat/bin/catalina.sh -dit tomcat:jdk8-adoptopenjdk-hotspot
启动后可以通过jconsole工具测试一下能不能监控tomcat容器
服务启动后,需要在zabbix界面为Server-A主机上增加JMX监控。
点击【配置】-【主机】-选择【Server-A】
增加JMX配置
配置项 | 值 |
---|---|
IP地址 | 192.168.152.142 |
端口 | 12345 |
实际上Zabbix 4.4自带了两个JMX模板 Template App Apache Tomcat JMX 和 Template App Generic Java JMX 模板一个可以监控Tomcat应用、一个可以监控普通Java应用。读者可以直接为被监控主机增加链接上述两个模板,也可以快速进行监控。
本文采用自定义的方式创建JMX监控模板
创建模板过程就不贴出来了,不清楚如何创建自定义模板的读者可以参考之前的文章如何创建自定义模板。这里创建了一个群组 Java Server Group 和自定义模板 Custom JMX Template
JMX监控项的 键值 格式为 jmx[object_name,attribute_name]
,其中 object_name 是MBean的ObjectName, attribute_name 为需要读取的属性值。如何确定需要监控的数据可以参考。
官方对键值的说明:
读者可以查看 JMX监控项的官方文档
配置项 | 值 |
---|---|
* 名称 | 堆内内存监控项 |
类型 | JMX agent代理程序 |
* 键值 | jmx["java.lang:type=Memory","HeapMemoryUsage.used"] |
* JMX 端点 | service:jmx:rmi:///jndi/rmi://{HOST.CONN} :{HOST.PORT}/jmxrmi |
单位 | B |
其他配置项 | 根据需要配置 |
配置项 | 值 |
---|---|
* 名称 | JVM线程总数监控 |
类型 | JMX agent代理程序 |
* 键值 | jmx["java.lang:type=Threading","ThreadCount"] |
* JMX 端点 | service:jmx:rmi:///jndi/rmi://{HOST.CONN} :{HOST.PORT}/jmxrmi |
其他配置项 | 根据需要配置 |
配置项 | 值 |
---|---|
* 名称 | Tomcat请求总数监控 |
类型 | JMX agent代理程序 |
* 键值 | jmx["Catalina:type=GlobalRequestProcessor,name="http-nio-8080"",requestCount] |
* JMX 端点 | service:jmx:rmi:///jndi/rmi://{HOST.CONN} :{HOST.PORT}/jmxrmi |
其他配置项 | 根据需要配置 |
其中/"http-nio-8080/" 是使用tomcat的默认端口8080,如果修改了端口这里也要做对应调整。作为模板配置可以把这个参数在模板中配置成 自定义宏 ,在主机中可以修改宏的值。
配置项 | 值 |
---|---|
* 名称 | Tomcat每分钟请求监控 |
类型 | JMX agent代理程序 |
* 键值 | change("jmx["Catalina:type=GlobalRequestProcessor,name=/"http-nio-8080/"",requestCount]") |
* JMX 端点 | service:jmx:rmi:///jndi/rmi://{HOST.CONN} :{HOST.PORT}/jmxrmi |
其他配置项 | 根据需要配置 |
配置项 | 值 |
---|---|
* 名称 | JVM老年代已使用内存监控 |
类型 | JMX agent代理程序 |
* 键值 | jmx["java.lang:type=MemoryPool,name=Tenured Gen", "Usage.used"] |
* JMX 端点 | service:jmx:rmi:///jndi/rmi://{HOST.CONN} :{HOST.PORT}/jmxrmi |
其他配置项 | 根据需要配置 |
配置项 | 值 |
---|---|
* 名称 | JVM老年代已使用内存监控 |
类型 | JMX agent代理程序 |
* 键值 | jmx["java.lang:type=MemoryPool,name=Tenured Gen", "Usage.committed"] |
* JMX 端点 | service:jmx:rmi:///jndi/rmi://{HOST.CONN} :{HOST.PORT}/jmxrmi |
其他配置项 | 根据需要配置 |
配置项 | 值 |
---|---|
* 名称 | JVM老年代已使用内存监控 |
类型 | 可计算的 |
* 键值 | jmx.old |
* 公式 | 100 * (last("jmx[/"java.lang:type=MemoryPool,name=Tenured Gen/", /"Usage.used/"]")) / last("jmx[/"java.lang:type=MemoryPool,name=Tenured Gen/", /"Usage.committed/"]") |
* 信息类型 | 浮点数 |
单位 | % |
其他配置项 | 根据需要配置 |
创建图形的步骤本文就忽略了,添加图形步骤可以参考 Zabbix-(三)监控主机CPU、磁盘、内存并创建监控图形
jmx监控项格式: jmx[object_name,attribute_name]
使用jconsole连接到JVM,选择MBean
找到需要监控的MBean,查看Bean信息和它的属性信息
!
结合上面的步骤,那么zabbix监控项就可以填写为