Zabbix通過JMX監控Java應用
Zabbix通過JMX(Java Management Extensions)可以對Java Application進行監控,Zabbix利用原生的Zabbix Java gateway,一個Java守護程序監控JMX應用。當Zabbix想要知道某個JMX counter當前的資料時,它只去詢問ZabbixJava gateway,而gateway會去查詢需要的資料,所有這些查詢都是通過JMX管理API完成的。
使用時,一個Java應用不需要額外安裝任何其他的軟體,也不需要實現或擴充套件新的程式碼來處理Zabbix的查詢,僅僅需要在Java 應用的配置檔案中設定一些引數,支援遠端JMX的監控。
這些引數主要有:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<你要設定的埠號>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
例如:
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar/usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar
上面的配置定義了Java程式使用12345埠監聽來自本地的JMX的連線,並不需要身份驗證和加密。如果你想從其他主機訪問,需要配置 -Djava.rmi.server.hostname 引數。
在實際環境中從安全的角度考慮,需要設定身份驗證和加密。具體設定步驟如下:
1、 啟用身份驗證並指定一個包含密碼的檔案。
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=/etc/java-6-penjdk/management/jmxremote.password
jmxremote.password檔案內容:
monitorRole <monitor-password-here>
controlRole <control-password-here>
2、 指定使用者的配置檔案。
-Dcom.sun.management.jmxremote.access.file=/etc/java-6-penjdk/management/jmxremote.access
jmxremote.access檔案內容:
monitorRole readonly
controlRole readwrite
3、 啟用SSL。
-Dcom.sun.management.jmxremote.ssl=true
繫結下面的引數:
-Djavax.net.ssl.keyStore=<你的keyStore >
-Djavax.net.ssl.keyStorePassword=<你的 keyStorePassword >
-Djavax.net.ssl.trustStore=<你的trustStore >
-Djavax.net.ssl.trustStorePassword=<你的trustStorePassword >
-Dcom.sun.management.jmxremote.ssl.need.client.auth=true
完整的例子如下:
java \
-Djava.rmi.server.hostname=192.168.3.14 \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=/etc/java-6-openjdk/management/jmxremote.password\
-Dcom.sun.management.jmxremote.access.file=/etc/java-6-openjdk/management/jmxremote.access\
-Dcom.sun.management.jmxremote.ssl=true \
-Djavax.net.ssl.keyStore=<你的KeyStore> \
-Djavax.net.ssl.keyStorePassword=<你的KeyStorePassword> \
-Djavax.net.ssl.trustStore=<你的trustStore > \
-Djavax.net.ssl.trustStorePassword=<你的trustStorePassword > \
-Dcom.sun.management.jmxremote.ssl.need.client.auth=true \
-jar/usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar
-D引數需要寫到你的應用或應用伺服器的啟動檔案中,在完成上述的各項配置後,你的啟動檔案中將包含一些敏感的內容(keyStore和trustStore密碼),因此需要保護好你的啟動檔案。
為了在Zabbix server使用JMX agent,還需要在Zabbix server中安裝Java gateway。
# yum install zabbix-java-gateway
# systemctl enablezabbix-java-gateway
# systemctl start zabbix-java-gateway
如果你是編譯原始碼安裝的Zabbix server,一定要使用 --enable-java選項。
在zabbix_server.conf檔案中進行配置。
# vi zabbix_server.conf
Java gateway = 127.0.0.1
Java Gateway Port = 10052
Start Java pollers = 5
不要忘記修改zabbix_server.conf檔案後要重啟Zabbixserver服務。
# systemctl restart zabbix-server
下面我們就可以配置一個JMX agent監控項,步驟如下:
1、 在Configuration --> Host頁面中,單擊Name列中的主機名稱,例如Zabbix server,在主機配置頁面Host標籤下新增JMX介面配置,如下圖3-10所示。
圖 3-10
2、 單擊Update按鈕儲存主機的配置。
3、 建立一個新的監控項。
-
Name中填寫監控項名稱。
-
Type中選擇JMX agent。
-
Key中填寫你要監控的專案,格式為jmx[<object name>,<attribute name>]。例如:
jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
-
Host interface中選擇JMX介面。
-
安裝JMX控制檯後為了安全,通常我們會設定一個登入控制檯的使用者名稱和密碼,Zabbix中支援這種方式,在User name和Password中填寫就可以了。
-
Type of information選擇Numeric(unsigned)。
-
Data type中選擇Decimal。
-
Unit中設定單位,如:B。
-
其他引數可以保持不變,單擊Add按鈕儲存。
如下圖3-11所示。