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 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 控制台,配置→主機→添加主機,如下操作
主機創建好后,由於沒有監控選項,因此 ZBX 和 JXM 圖標還是顯示灰色
可以通過添加模板來添加監控選項
更新完后,過一會兒刷新頁面, app-tomcat 主機 ZBX 和 JMX 便會變綠
下面是采集到 app-tomcat 主機的數據繪成的圖形
如果沒有圖形,可以用如下命令來測試是否能獲取數據
獲取 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
測試有數據則表示成功