跳至主要内容

安裝 JMX 管理 Tomcat 9 並透過 Zabbix 4 監控

· 閱讀時間約 4 分鐘
HK Chen
Cloud Engineer

最近因為某些事情要嘗試利用 Zabbix 去監控多個硬體和虛擬機,並針對監控的內容抓取寫進資料庫的資料來做一些像是 Line 的訊息推撥,而當中也想到 Zabbix 也可以使用 zabbix-java-gateway 去監控像 tomcat 這樣的資源,所以就來安裝玩看看,以下的步驟會分為 zabbix server 端和 tomcat client 的方式。

注意事項

裡面有些相關的 port 防火牆有設定的話記得要開啟。

Zabbix Server 設置

環境需求

  • CentOS 7
  • OpenJDK 1.8.0_191

事前已準備 (略過安裝流程)

  • zabbix 4.0.3

安裝 zabbix-java-gateway

方法 1: Package Download Install

  1. 前往官方 下載 source 包
  2. 安裝 (使用編譯安裝編譯時要加上 --enable-java)
tar -xzvf zabbix-4.0.3.tar.gz
cd zabbix-4.0.3
./configure --prefix=/usr/local/zabbix_java_gateway --enable-java
make
make install

方法 2: YUM Install

yum install zabbix-java-gateway-4.0.3-1.el7.x86_64.rpm

文件配置

  1. 修改 zabbix_java_gateway.conf 設定
vim /etc/zabbix/zabbix_java_gateway.conf
  1. 使用設定檔內以下幾個基本參數
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5
  1. 重啟 zabbix-java-gateway
systemctl restart zabbix-java-gateway
  1. 修改 zabbix_server.conf 設定
vim /etc/zabbix/zabbix_server.conf
  1. 修改設定內參數,而最重要的 StartJavaPollers 探測器一定要打開並且不要使用預設值 0,這邊範例使用 5,不然 Zabbix Server 的網頁會因為你沒打開他不會去要東西而不會亮綠燈,這也是我搞了好久才發現的...
JavaGateway=172.16.7.14 # your zabbix server IP
LISTEN_PORT=10052 # default setting port
StartJavaPollers=5 # default is zero
  1. 重啟 zabbix-server
systemctl restart zabbix-server

Tomcat Client 設置

環境需求

  • CentOS 7
  • OpenJDK 1.8.0_191

事前已準備 (略過安裝流程)

  • Tomcat 9
  • zabbix agent

重要事項

網路資源較少提到其實要先下載兩個 jar 檔來讓 zabbix-java-gateway 來呼叫從而利用 jar 檔中的 method 來取得需要監控的項目:

  1. catalina-jmx-remote.jar 點我下載,這個要去官網對應的 tomcat 版本的底下的 bin 拉下來在丟到你的 tomcat lib path,他的檔案透過網頁方式去搜尋到對應的版本然後選擇 bin/extras 後才會看到

  2. cmdline-jmxclient-0.10.3.jar 點我下載,目前已經有 0.10.4 version,多了一個 attributes command

  3. 將上述兩包 jar 檔放入 tomcat lib

文件配置

  1. 修改 tomcatcatalina.sh 設定上加上 JMX 的參數在 CATALINA_OPTS,我將讓 zabbix-java-gateway 可監聽的 port 設為 12346
# add JMX param
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12346
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=172.16.4.182" # your tomcat server IP
  1. 重啟 tomcat
./shutdown.sh
./startup.sh

Zabbix Server Web 配置

步驟 1: 創建 Host

login admin > Configuration > Hosts > Create host

創建 Host

步驟 2: 配置 Host 設定

Host nametomcat IP, Visible name 為要在列表顯示的名稱,Groups 我是先選 Zabbix servers,而主要是要加入 JMX interfaces, IP 一樣為 tomcat IPport 為剛剛所設在 catalina.sh 裡的 12346,最後按下 update

配置 Host

步驟 3: 添加 Templates

跳到上面的 Templates,並在 Linked templates 加入 Template App Apache Tomcat JMX 以及 Template App Generic Java JMX,然後按下 update

添加 Templates

步驟 4: 驗證連接

回到 Hosts 頁面觀看列表,可以發現 Tomcat9JMX 亮起了綠燈

驗證連接

步驟 5: 查看監控項目

點進 Tomcat9Application,我們可以看一下基本 JMX 到底可以監聽哪些事情,例如 Memory ...等等,當然要看更細項的東西可以點選最右邊的 items

監控項目 1

監控項目 2

未來計畫

之後會動手實際放一包有和 DB 連結的 war,來利用 zabbix 監控整個專案的使用 DB 的情況再來撰寫一篇做記錄。

總結

透過這次的設置,我們成功建立了:

  • Zabbix Java Gateway 的完整配置
  • Tomcat JMX 監控的啟用
  • Web 界面 的監控項目查看

這個設置讓我們能夠即時監控 Tomcat 的各種效能指標,包括記憶體使用量、執行緒狀態、以及應用程式的運行狀況。