1、Zabbix Java Gateway 介绍
Zabbix 不支持直接监控JAVA应用
如果要监控JAVA程序比如Tomcat等,需要使用 Java gateway 做为代理,才能从JAVA应用中获取数据
Zabbix Java gateway 能过监听10052/tcp 端口实现监控JAVA应用
![图片[1]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-391.png)
Zabbix 监控JVM流程
- zabbix-server 通知 zabbix-Java-Gateway需要获取监控主机的哪些监控项
- Zabbix-Java-Gateway 通过 JMX 协议请求采集 Java进程数据
- Java程序通过 JMX 协议返回数据给 zabbix-Java-Gateway
- zabbix-Java-Gateway 最终返回数据给 zabbix-server
- zabbix-server 将采集的JAVA 数据存储至数据库,然后进行 Web 展示
Zabbix Java Gateway 架构
![图片[2]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-392.png)
2、监控 Java 应用 Tomcat 服务
2.1、部署 tomcat 服务并开启 JMX 功能
安装 tomcat
参考安装脚本
开启 JMX 监控
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等。
tomcat 开启远程 JMX 环境配置
vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA__OPTS
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Djava.rmi.server.hostname=<JAVA主机IP> #是tomcat主机的IP地址,不是zabbix服务器地址
-Dcom.sun.management.jmxremote.port=XXXXX #默认启动的JMX端口号
-Dcom.sun.management.jmxremote.authenticate=false #不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false" #不使用ssl认证
# Tomcat 开启 JMX 功能
[root@tomcat01 ~]# vim /usr/local/tomcat/bin/catalina.sh
# -----------------------------------------------------------------------------
# 添加下一行
CATALINA_OPTS="$CATALINA__OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.11"
# OS specific support. $var _must_ be set to either true or false.
# 查看端口12345是否打开
![图片[3]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-393.png)
使用 java 客户端获取 JMX 信息
cmdline-jmxclient-0.10.3.jar 是一个开源jar包,在zabbix 中常用于测试的一个工具,可以用来测试 jmx是否配置正确。在监控方面后还可以对Tomcat各种属性进行监控。下面使用java客户端cmdline-jmxclient进行测试。
# 测试能否获取到java当前线程数和最大线程数
root@zabbix-server:~# ll cmdline-jmxclient-0.10.3.jar
-rw-r--r-- 1 root root 20124 Sep 19 09:34 cmdline-jmxclient-0.10.3.jar
root@zabbix-server:~# apt install -y openjdk-8-jdk
root@zabbix-server:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.1.11:12345 'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
01/24/2023 01:03:12 +0000 org.archive.jmx.Client currentThreadCount: 10
root@zabbix-server:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.1.11:12345 'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads
01/24/2023 01:03:26 +0000 org.archive.jmx.Client maxThreads: 200
2.2、部署 Java gateway 服务器
Java gateway 是一个独立于zabbix server和 zabbix agent的组件,默认使用端口10052/tcp,所以java gateway可以是单独的一台服务器,但是也可以和zabbix server或者zabbix agent 共用一台服务器。
Java gatway 可以用两种方法安装
- 包安装
- 编译安装
包安装 Java gateway
https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb
root@zabbix-server:~# apt install -y zabbix-java-gateway
root@zabbix-server:~# vim /etc/zabbix/zabbix_java_gateway.conf
# uncomment to enable remote monitoring of the standard JMX objects on the Zabbix Java Gateway itself
JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.registry.ssl=false"
# Ubuntu安装后会自动启动服务并打开监听10052/tcp端口
![图片[4]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-394.png)
![图片[5]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-395.png)
编译安装 Java gateway
编译安装使用的是zabbix agent,zabbix server 是同一个源码包,只需指定相关的编译选项即可
[root@zabbix-agent ~]# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.30.tar.gz
[root@zabbix-agent ~]# tar xvf zabbix-5.0.30.tar.gz
[root@zabbix-agent ~]# cd zabbix-5.0.30/
[root@zabbix-agent zabbix-5.0.30]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@zabbix-agent zabbix-5.0.30]# make && make install
[root@zabbix-agent zabbix-5.0.30]# cd /apps/zabbix_java_gateway/sbin/zabbix_java/
[root@zabbix-agent zabbix_java]# ll
total 12
drwxr-xr-x 2 root root 44 Jan 24 09:17 bin
drwxr-xr-x 2 root root 176 Jan 24 09:17 lib
-rw-r--r-- 1 root root 1382 Jan 24 09:17 settings.sh
-rwxr-xr-x 1 root root 545 Jan 24 09:17 shutdown.sh
-rwxr-xr-x 1 root root 1913 Jan 24 09:17 startup.sh
[root@zabbix-agent zabbix_java]# ./startup.sh
![图片[6]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-396.png)
2.3、配置 Zabbix Server 支持 Java gateway
root@zabbix-server:~# vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.1.121 #指向JAVA gateway主机
StartJavaPollers=10 #指定开启的进程数,默认为0,即不开启,所以必须修改此行
JavaGatewayPort=10052 #指定端口,此为默认值,可不修改
# 查看进程
root@zabbix-server:~# ps -ef|grep java
zabbix 124976 1 0 01:07 ? 00:00:01 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-5.0.30.jar -Dzabbix.pidFile=/run/zabbix/zabbix_java_gateway.pid -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root 125989 120320 0 01:24 pts/1 00:00:00 grep --color=auto java
root@zabbix-server:~# systemctl restart zabbix-server.service
root@zabbix-server:~# ps -ef|grep java
zabbix 124976 1 0 01:07 ? 00:00:01 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-5.0.30.jar -Dzabbix.pidFile=/run/zabbix/zabbix_java_gateway.pid -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
zabbix 126070 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000034 sec, idle 5 sec]
zabbix 126071 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000029 sec, idle 5 sec]
zabbix 126072 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000024 sec, idle 5 sec]
zabbix 126075 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.001590 sec, idle 5 sec]
zabbix 126076 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000043 sec, idle 5 sec]
zabbix 126077 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #6 [got 0 values in 0.000467 sec, idle 5 sec]
zabbix 126078 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #7 [got 0 values in 0.001576 sec, idle 5 sec]
zabbix 126079 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #8 [got 0 values in 0.000040 sec, idle 5 sec]
zabbix 126080 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #9 [got 0 values in 0.001660 sec, idle 5 sec]
zabbix 126083 126048 0 01:24 ? 00:00:00 /usr/sbin/zabbix_server: java poller #10 [got 0 values in 0.000233 sec, idle 5 sec]
root 126125 120320 0 01:24 pts/1 00:00:00 grep --color=auto java
使用系统内置模板监控 tomcat 主机
![图片[7]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-397.png)
![图片[8]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-398.png)
查看到 JMX 数据
![图片[9]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2023/01/image-399.png)