一、监控原理:
Java虚拟机(JVM)具有内置的插装,使您能够使用JMX监视和管理它。
您还可以使用JMX监视工具化的应用程序。
当Zabbix-Server需要知道java应用程序的某项性能的时候,会启动自身的一个Zabbix-JavaPollers进程去连接Zabbix-JavaGateway请求数据
而ZabbixJavagateway收到请求后使用"JMXmanagementAPI"去查询特定的应用程序,而前提是应用程序这端在开启时需要"-Dcom.sun.management.jmxremote"参数来开启JMX远程查询就行。
Java程序会启动自身的一个简单的小程序端口12345向Zabbix-JavaGateway提供请求数据。
从上面的原理图中可以看出,配置Zabbix监控Java应用程序的关键点在于:
配置Zabbix-JavaGateway、让Zabbix-Server能够连接Zabbix-JavaGateway、Tomcat开启JVM远程监控功能等。
二、tomcat监控配置
1.tomcat服务配置
1.使用jps命令,查看java相关的进程资源
[root@tomcat-10 ~]#jps -lvm
4292 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/opt/tomcat-1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/tomcat8/endorsed -Dcatalina.base=/opt/tomcat-1 -Dcatalina.home=/opt/tomcat8 -Djava.io.tmpdir=/opt/tomcat-1/temp
3739 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/opt/tomcat-2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/opt/tomcat8/endorsed -Dcatalina.base=/opt/tomcat-2 -Dcatalina.home=/opt/tomcat8 -Djava.io.tmpdir=/opt/tomcat-2/temp
4716 sun.tools.jps.Jps -lvm -Denv.class.path=.:/opt/jdk8/lib:/opt/jdk8/jre/lib:/opt/jdk8/lib/tools.jar -Dapplication.home=/opt/jdk1.8.0_221 -Xms8m
2.修改tomcat配置文件,添加jmx监控参数
[root@tomcat-10 ~]#vim /opt/tomcat8/bin/catalina.sh
100 CATALINA_OPTS="$CATALINA_OPTS
101 -Dcom.sun.management.jmxremote
102 -Djava.rmi.server.hostname=10.0.0.10
103 -Dcom.sun.management.jmxremote.port=12345
104 -Dcom.sun.management.jmxremote.ssl=false
105 -Dcom.sun.management.jmxremote.authenticate=false"
指定主机名或IP,是否开启远程管理,是否启动ssl,是否启用认证。
3. 目前只能实现监控一个实例,采用将war包放到webapp目录下的方式启动tomcat,再监控tomcat
[root@tomcat-10 ~]#bash /opt/tomcat8/bin/startup.sh
2.zabbix-server设置
zabbix想要监控tomcat,需要借助于zabbix-java-gateway工具
[root@zabbix-server-71 ~]#yum install zabbix-java-gateway -y
修改如下两个配置文件
[root@zabbix-server-71 ~]#grep -E '^[a-Z]' /etc/zabbix/zabbix_java_gateway.conf
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5
[root@zabbix-server-71 ~]#grep -E '^[a-Z]' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=linux0224
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
AlertScriptsPath=/usr/lib/zabbix/alertscripts
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
重启,检查
[root@zabbix-server-71 ~]#systemctl start zabbix-java-gateway.service
[root@zabbix-server-71 ~]#systemctl restart zabbix-server.service
[root@zabbix-server-71 ~]#ps -ef|grep java
zabbix 7259 1 3 22:29 ? 00:00:00 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-1.2.9.jar:lib/logback-core-1.2.9.jar:lib/slf4j-api-1.7.32.jar:bin/zabbix-java-gateway-4.0.42.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.startPollers=5 -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
zabbix 7329 7297 0 22:29 ? 00:00:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000102 sec, idle 5 sec]
zabbix 7331 7297 0 22:29 ? 00:00:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000051 sec, idle 5 sec]
zabbix 7332 7297 0 22:29 ? 00:00:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000065 sec, idle 5 sec]
zabbix 7333 7297 0 22:29 ? 00:00:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000045 sec, idle 5 sec]
zabbix 7334 7297 0 22:29 ? 00:00:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000050 sec, idle 5 sec]
[root@zabbix-server-71 ~]#netstat -tunlp|grep java
tcp6 0 0 :::10052 :::* LISTEN 7259/java
3.页面添加监控
关联tomcat模板
监控jmx了
Java 管理扩展( JMX ) 是一种Java技术,它提供用于管理和监视应用程序、系统对象、设备(例如打印机)和面向服务的网络的工具。
4.手动采集tomcat实例运行数据
1. tomcat环境
[root@tomcat-10 ~]#/opt/tomcat8/bin/version.sh
Using CATALINA_BASE: /opt/tomcat8
Using CATALINA_HOME: /opt/tomcat8
Using CATALINA_TMPDIR: /opt/tomcat8/temp
Using JRE_HOME: /opt/jdk8
Using CLASSPATH: /opt/tomcat8/bin/bootstrap.jar:/opt/tomcat8/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.27
Server built: Sep 28 2015 08:17:25 UTC
Server number: 8.0.27.0
OS Name: Linux
OS Version: 3.10.0-862.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_221-b11
JVM Vendor: Oracle Corporation
2. 下载jmx远程监控jar包
[root@tomcat-10 ~]#ls /opt/tomcat8/lib/
wget -O /opt/tomcat8/lib/catalina-jmx-remote.jar http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/extras/catalina-jmx-remote.jar
3.抓取tomcat数据测试
(1)下载cmdline-jmxclient-0.10.3.jar文件,下载地址
wget http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar
(2)本地执行如下命令查看tomcat的堆内存信息
[root@tomcat-10 /opt]#java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Memory HeapMemoryUsage
07/17/2022 22:54:05 +0800 org.archive.jmx.Client HeapMemoryUsage:
committed: 394264576
init: 62914560
max: 880279552
used: 172865216
java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 java.lang:type=Threading TotalStartedThreadCount
[root@tomcat-10 /opt]#java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:12345 Catalina:type=Server serverInfo
07/17/2022 23:13:17 +0800 org.archive.jmx.Client serverInfo: Apache Tomcat/8.0.27