1. 程式人生 > >Zabbix通過JMX監控Java應用

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所示。

wKioL1kL7ebQRxmvAAArQa1kKwI260.jpg

圖 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所示。

         wKioL1kL7fnQp-uUAAD005Jz7RI710.jpg