2.2:基于 Java Gateway 监控 Tomcat

Zabbix要想获取javaVM、Java程序相关的一些指标数据,需要通过JavaGateway。

JavaGateway可以单独部署在一台服务器上,也可以和zabbix-server部署在同一台服务器。

获取java相关监控数据是通过JMX进行的,并不通过zabbix-agent。

拓扑图

zabbix 于java接口api zabbix java gateway_java gateway

Zabbix Server:192.168.1.101

Java Gateway:192.168.1.103

Tomcat:192.168.1.111,部署tomcat-8.0.38,并开启JMX远程监控(以支持远程获取指标数据)。

2.2.1:node103 部署 Java Gateway

2.2.1.1:apt 安装 Java Gateway

下载并安装zabbix官方apt源。

root@node103:~# wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3+bionic_all.deb  

root@node103:~# dpkg -i zabbix-release_4.0-3+bionic_all.deb

root@node103:~# apt update

安装java gateway:

root@node103:~# apt install zabbix-java-gateway
2.2.1.2:配置并启动 Java Gateway

编辑java gateway的配置文件/etc/zabbix/zabbix_java_gateway.conf

默认就监听在所有IP上,不需要更改也可以直接使用。

root@node103:~# grep '^[a-Z]' /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"
START_POLLERS=5
TIMEOUT=3

启动javagateway,并设为开机启动。

root@node103:~# systemctl restart zabbix-java-gateway && systemctl enable zabbix-java-gateway

验证监听端口:

root@node103:~# ss -tnlp | grep 10052

验证进程:

root@node103:~# ps -ef | grep zabbix 
zabbix     5017      1  1 17:27 ?        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-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-4.0.29.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java_gateway.pid -Dzabbix.listenIP=0.0.0.0 -Dzabbix.listenPort=10052 -Dzabbix.startPollers=5 -Dzabbix.timeout=10 -Dsun.rmi.transport.tcp.responseTimeout=10000 com.zabbix.gateway.JavaGateway
2.2.1.3:配置 Zabbix Server 调用 Java Gateway

需要为zabbix server配置java gateway的地址和监听端口,以使server可以从java gateway获取监控数据。

从刚才配置java gateway也看到了,配置中只有监听地址,而没有指定server端,也就可以理解为,java gateway只能被动监听,等待server来获取监控数据。

将java poller的启动个数设置为10个,即有10个进程从java gateway获取数据。

root@node101:~# vim /etc/zabbix/zabbix_server.conf 
JavaGateway=192.168.1.103
JavaGatewayPort=10052
StartJavaPollers=10

更改完成后重启zabbix-server:

root@node101:~# systemctl restart zabbix-server

验证 java poller 的个数,与配置一致。

root@node101:~# ps -ef | grep -v grep | grep "java poller" -c
10

2.2.2:准备被监控 Tomcat 主机

2.2.2.1:准备 JDK 环境

采用tar包解压的方式安装。

解压jdk程序包,并创建软链接。

root@node111:~# cd /usr/local/src
root@node111:/usr/local/src# tar xf jdk-8u212-linux-x64.tar.gz 

root@node111:~# ln -sv /usr/local/src/jdk1.8.0_212/ /usr/local/jdk

设置java环境变量:

root@node111:~# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export TOMCAT_HOME=/apps/tomcat
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

root@node111:~# source /etc/profile

验证java版本:

root@node111:~# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
2.2.2.2:安装 Tomcat

采用tar包解压方式进行安装。

解压tomcat程序tar包,创建软链接。

root@node111:~# mkdir /apps
root@node111:~# cp /usr/local/src/apache-tomcat-8.0.38.tar.gz /apps/

root@node111:~# cd /apps
root@node111:/apps# tar xf apache-tomcat-8.0.38.tar.gz 

root@node111:/apps# ln -sv apache-tomcat-8.0.38 tomcat
2.2.2.3:准备测试程序

使用tomcat官方提供的sample.war作为测试程序。

root@node111:~# mkdir /apps/tomcat/webapps/sample
root@node111:~# cp /root/sample.war /apps/tomcat/webapps/sample/

root@node111:~# cd /apps/tomcat/webapps/sample/
root@node111:/apps/tomcat/webapps/sample# jar xf sample.war

启动tomcat,测试sample程序。

root@node111:~# catalina.sh start
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.

浏览器访问http://192.168.1.111:8080/sample/

zabbix 于java接口api zabbix java gateway_zabbix_02

2.2.2.4:Tomcat 开启 JMX 远程监控

要远程获取tomcat的java运行状态,需要编辑catalina.sh启动脚本,添加JMX相关参数。

与JMX监控的相关参数如下:

参数


说明

Dcom.sun.management.jmxremote

JMX 远程监控开关

Djava.rmi.server.hostname=

IP/hostname

需要监控的java服务的地址

Dcom.sun.management.jmxremote.port=

PORT

JMX监听端口

Dcom.sun.management.jmxremote.ssl=

true/false

是否使用SSL

Dcom.sun.management.jmxremote.authenticate=

true/false

是否使用密码验证

编辑catalina.sh,按需配置JMX相关参数。

开启JMX,配置需要监听的java为本机地址;端口为12345,不适用SLL通信和密码认证。

root@node111:~# vim /apps/tomcat/bin/catalina.sh 
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.1.111
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"

配置完成后重启tomcat。

root@node111:~# catalina.sh stop                 
root@node111:~# catalina.sh start

验证JMX监听端口:

root@node111:~# ss -tnlp | grep 12345             
LISTEN  0        50                           *:12345                  *:*       users:(("java",pid=4079,fd=20))
2.2.2.5:使用 jconsole 验证 JMX 的连接

PC机安装windows版的jdk,在bin下会有jconsole.exe应用程序,可用于连接JMX,验证是否可以获取到指标数据。

打开jconsole,选择远程进程,输入IP:PORT,进行连接。

zabbix 于java接口api zabbix java gateway_tomcat_03

连接成功后,会看到指定javaVM的运行状态。

zabbix 于java接口api zabbix java gateway_zabbix_04


能通过jconsole获取到数据,就说明tomcat的JMX接口可以正常访问了。

2.2.3:Zabbix Server 添加被监控 Tomcat 主机

2.2.3.1:添加主机

配置-主机-创建主机:

zabbix 于java接口api zabbix java gateway_java_05

填写主机信息,添加JMX接口:

zabbix 于java接口api zabbix java gateway_tomcat_06

关联模板。

使用zabbix自带的tomcat JMX监控模板。

zabbix 于java接口api zabbix java gateway_java_07

2.2.3.2:验证监控数据

最新数据:

zabbix 于java接口api zabbix java gateway_java gateway_08

图形:

zabbix 于java接口api zabbix java gateway_java_09