zabbix 监控 Java 应用 Tomcat 服务

1、Zabbix Java Gateway 介绍

Zabbix 不支持直接监控JAVA应用

如果要监控JAVA程序比如Tomcat等,需要使用 Java gateway 做为代理,才能从JAVA应用中获取数据

Zabbix Java gateway 能过监听10052/tcp 端口实现监控JAVA应用

图片[1]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页

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 服务-李佳程的个人主页

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 服务-李佳程的个人主页

使用 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 服务-李佳程的个人主页
图片[5]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页

编译安装 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 服务-李佳程的个人主页

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 服务-李佳程的个人主页
图片[8]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页

查看到 JMX 数据

图片[9]-zabbix 监控 Java 应用 Tomcat 服务-李佳程的个人主页

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享