zabbix 监控 java 类服务不是直接监控的,因为 zabbix 是基于 c 语言开发的,因此 zabbix 和 java 是不能直接通信的,开发者在二者中间添加一个中间层代理,即 java gateway。当 zabbix server 想要获取 java 数据时,并不直连 tomcat ,而是把请求转发给 java gateway,由于 java gateway 是由 java 语言开发的程序,能够兼容 zabbix server 发送的请求,把请求转换为 java 命令后,再到 tomcat上获取数据。而 tomcat 把本地数据采集后发送给 java gateway,由java gateway转发给zabbix server。

zabbix 监控 tomcat,首先安装 tomcat,然后配置 java gateway,最后再添加监控项

部署 tomcat

安装 JDK

(1)下载 JDK

前往 oracle 官网 https://www.oracle.com/technetwork/java/javase/downloads/index.html 下载 JDK ,这里下载的版本是 jdk-8u201-linux-x64.tar.gz

[root@app-tomcat ~]# tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local/
[root@app-tomcat ~]# ln -sv /usr/local/jdk1.8.0_201 /usr/local/jdk 
[root@app-tomcat ~]# chown -R root.root /usr/local/jdk

(2)设置 java 环境变量

[root@app-tomcat ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$PATH
[root@app-tomcat ~]# source /etc/profile.d/java.sh

(3)查看 JDK 是否安装成功

[root@app-tomcat ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

安装 tomcat

(1)下载 tomcat

前往 tomcat 官网 https://tomcat.apache.org/ 下载二进制安装包,这里下载的是 apache-tomcat-9.0.14.tar.gz

[root@app-tomcat ~]# tar xf apache-tomcat-9.0.14.tar.gz -C /usr/local/
[root@app-tomcat ~]# ln -sv /usr/local/apache-tomcat-9.0.14 /usr/local/tomcat

(2)创建 tomcat 环境变量文件 setenv.sh(catalina.sh 启动文件会调用 setenv.sh),并在 CATALINA_OPTS 添加监控参数 (本机 ip 为 192.168.10.103)

[root@app-tomcat ~]# vim /usr/local/tomcat/bin/setenv.sh
JAVA_HOME=/usr/local/jdk
JRE_HOME=$JAVA_HOME/jre
CATALINA_HOME=/usr/local/tomcat
CATALINA_BASE=$CATALINA_HOME
CATALINA_PID="$CATALINA_BASE/run/tomcat.pid"
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.10.103"
[root@app-tomcat ~]# chmod +x /usr/local/tomcat/bin/setenv.sh

(3)添加 tomcat 用户并创建 PID 存放目录

[root@app-tomcat ~]# groupadd -r -g 808 tomcat 
[root@app-tomcat ~]# useradd -r -u 808 -g 808 -s /sbin/nologin -c "Tomcat Server" tomcat
[root@app-tomcat ~]# mkdir /usr/local/tomcat/run
[root@app-tomcat ~]# chown -R tomcat.tomcat /usr/local/tomcat/

(4)创建 tomcat 启动文件

[root@app-tomcat ~]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target 

[Service]
Type=forking
PIDFile=/usr/local/tomcat/run/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

(5)启动 tomcat

[root@app-tomcat ~]# systemctl daemon-reload 
[root@app-tomcat ~]# systemctl enable tomcat.service 
[root@app-tomcat ~]# systemctl start tomcat.service

查看 8080,8005,8009 以及 12345 端口是否在监听状态,在的话则 tomcat 启动成功

(6)使用 JDK 自带的 jconsole 工具来查看 监控状态,在宿主机 Windows 上安装 jdk-8u201-windows-x64.exe,安装好后 jconsole 的路径为

C:\Program Files\Java\jdk1.8.0_201\bin\jconsole.exe,打开连接上即可查看状态

zabbix监控Java服务 zabbix监控java程序_java

zabbix监控Java服务 zabbix监控java程序_java_02

安装 zabbix agent

(1)创建 zabbix 用户

[root@app-tomcat ~]# groupadd -r -g 151 zabbix
[root@app-tomcat ~]# useradd -r -u 151 -g 151 -s /sbin/nologin  -c "Zabbix Monitoring" zabbix

(2)编译安装 zabbix agent

去 zabbix 官网 https://www.zabbix.com/download_sources 下载 zabbix 源码包 ,这里下载的是 zabbix-4.0.3.tar.gz ,编译选项只需要启用 --enable-agent 选项即可

[root@app-tomcat ~]# tar xf zabbix-4.0.3.tar.gz -C /usr/local/src/ 
[root@app-tomcat ~]# cd /usr/local/src/zabbix-4.0.3/
[root@app-tomcat zabbix-4.0.3]# ./configure --prefix=/usr/local/zabbix --enable-agent
[root@app-tomcat zabbix-4.0.3]# make && make install

(3)修改 zabbix agent 的配置文件,zabbix server 地址为 192.168.10.101,Hostname 设置为 192.168.10.103(本机 ip)

[root@app-tomcat ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/usr/local/zabbix/run/zabbix_agentd.pid
LogType=file
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=100
DebugLevel=3
EnableRemoteCommands=0
Server=192.168.10.101
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.10.101
Hostname=192.168.10.103
Timeout=15
AllowRoot=0
User=zabbix
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
UnsafeUserParameters=1

(4)创建日志文件和 pid 文件存放目录

[root@app-tomcat ~]# mkdir -pv /var/log/zabbix /usr/local/zabbix/run
[root@app-tomcat ~]# chown -R zabbix.zabbix /var/log/zabbix /usr/local/zabbix

(5)准备启动文件

[root@app-tomcat ~]# cp /usr/local/src/zabbix-4.0.3/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@app-tomcat ~]# sed -i 's@BASEDIR=.*@BASEDIR=/usr/local/zabbix@' /etc/init.d/zabbix_agentd
[root@app-tomcat ~]# sed -i 's@PIDFILE=.*@PIDFILE=/usr/local/zabbix/run/zabbix_agentd.pid@' /etc/init.d/zabbix_agentd

(6)启动 zabbix agent

[root@app-tomcat ~]# ln -sv /usr/local/zabbix/bin/* /usr/bin/
[root@app-tomcat ~]# chkconfig --add zabbix_agentd
[root@app-tomcat ~]# chkconfig zabbix_agentd on
[root@app-tomcat ~]# /etc/init.d/zabbix_agentd start

查看 10050 端口是否处于监听状态,如在则表示 zabbix agent 已然启动

zabbix server 配置 java gateway

监控 java 类服务,编译安装 zabbix server 时需要启动 --enable java 选项,如果是 rpm 包安装,则需要额外安装 zabbix-java-gateway 程序包,这里是编译安装的 zabbix server,编译时已经启用了该选项

(1)修改 java gateway 配置文件

[root@zabbix-server ~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh 
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/usr/local/zabbix/run/zabbix_java.pid"
START_POLLERS=20
TIMEOUT=15

(2)配置 zabbix server 调用 java gateway ,然后重启 zabbix server

[root@zabbix-server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
JavaGateway=192.168.10.101
JavaGatewayPort=10052
StartJavaPollers=20

(3)创建 java gateway 启动文件

[root@zabbix-server ~]# vim /usr/lib/systemd/system/zabbix_java_gateway.service
[Unit]
Description=Zabbix Java Gateway
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/zabbix/run/zabbix_java.pid
ExecStart=/usr/local/zabbix/sbin/zabbix_java/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/zabbix/sbin/zabbix_java/shutdown.sh
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target

(4)启动 java gateway

[root@zabbix-server ~]# systemctl daemon-reload 
[root@zabbix-server ~]# systemctl enable zabbix_java_gateway.service 
[root@zabbix-server ~]# systemctl start zabbix_java_gateway.service

查看 10052 端口是否处于监听状态,如在则表示 java gateway已然启动

在 zabbix 上添加主机

打开 zabbix web 控制台,配置→主机→添加主机,如下操作

zabbix监控Java服务 zabbix监控java程序_Zabbix_03

主机创建好后,由于没有监控选项,因此 ZBX 和 JXM 图标还是显示灰色

zabbix监控Java服务 zabbix监控java程序_Zabbix_04

可以通过添加模板来添加监控选项

zabbix监控Java服务 zabbix监控java程序_vim_05

更新完后,过一会儿刷新页面, app-tomcat 主机 ZBX 和 JMX 便会变绿

zabbix监控Java服务 zabbix监控java程序_java_06

下面是采集到 app-tomcat 主机的数据绘成的图形

zabbix监控Java服务 zabbix监控java程序_vim_07

zabbix监控Java服务 zabbix监控java程序_java_08

如果没有图形,可以用如下命令来测试是否能获取数据

获取 zabbix agent 的数据

[root@zabbix-server ~]# zabbix_get -s 192.168.10.103 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000

获取 JMX 的数据,需要下载 cmdline-jmxclient-0.10.3.jar,下载地址 http://crawler.archive.org/cmdline-jmxclient/downloads.html

[root@zabbix-server ~]# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.10.103:12345 java.lang:type=Memory NonHeapMemoryUsage
02/22/2019 16:30:40 +0800 org.archive.jmx.Client NonHeapMemoryUsage: 
committed: 34865152
init: 2555904
max: -1
used: 33140504

测试有数据则表示成功