2.2:基于 Java Gateway 监控 Tomcat
Zabbix要想获取javaVM、Java程序相关的一些指标数据,需要通过JavaGateway。
JavaGateway可以单独部署在一台服务器上,也可以和zabbix-server部署在同一台服务器。
获取java相关监控数据是通过JMX进行的,并不通过zabbix-agent。
拓扑图
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/
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,进行连接。
连接成功后,会看到指定javaVM的运行状态。
能通过jconsole获取到数据,就说明tomcat的JMX接口可以正常访问了。
2.2.3:Zabbix Server 添加被监控 Tomcat 主机
2.2.3.1:添加主机
配置-主机-创建主机:
填写主机信息,添加JMX接口:
关联模板。
使用zabbix自带的tomcat JMX监控模板。
2.2.3.2:验证监控数据
最新数据:
图形: