Zabbix監控JMX協議

    JMX 全稱是Java Management Extensions,即Java管理擴展。Java程序會開放一些端口,用來獲取運行情況。
    從JAVA 5開始,JDK提供了一些JVM檢測的API,這就是有名的java.lang.management 包,包裏提供了下面9個MXBean:      java

ClassLoadingMXBean 用於 Java 虛擬機的類加載系統的管理接口。  
CompilationMXBean 用於 Java 虛擬機的編譯系統的管理接口。 
GarbageCollectorMXBean 用於 Java 虛擬機的垃圾回收的管理接口。 
MemoryManagerMXBean 內存管理器的管理接口。 
MemoryMXBean Java 虛擬機的內存系統的管理接口。 
MemoryPoolMXBean 內存池的管理接口。 
OperatingSystemMXBean 用於操做系統的管理接口。Java 虛擬機在此操做系統上運行。 
RuntimeMXBean Java 虛擬機的運行時系統的管理接口。 
ThreadMXBean Java 虛擬機線程系統的管理接口。
     在Zabbix 1.8之前,只能使用Zapcat來監控JMX,並須要修改源代碼來支持,很是麻煩。另外一種方法是使用jmx-cmd-client,它的做用是從命令行去獲取JMX信息,能夠在它的上層包裝一個程序,用來獲取JMX數據。
     從Zabbix2.0開始,內置了監控JMX的功能,叫作"Zabbix Java Gateway ",在Zabbix Server和Zabbix Proxy上會啓動名爲"Zabbix Java Gateway "的進程,當須要獲取JMX數據時,Zabbix Server會"問 "JMX Gateway,而後JMX Gateway 根據JMX管理API去查詢須要的數據。在使用時,Java程序不須要在代碼中新增任何東西,只須要在啓動時加上一些JVM參數,使得它能夠支持使用監控端口監控JMX。
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端口,具體的jar依據狀況各自不一樣,ssl=false說明它不須要身份驗證。

    下面介紹監控JMX原理,配置。

1    工做原理:
     
     zabbixserver想知道一臺主機上的特定的JMX值時,它向ZabbixJavagateway詢問,而ZabbixJavagateway使用「JMXmanagementAPI」去查詢特定的應用程序,而前提是應用程序這端在開啓時須要「-Dcom.sun.management.jmxremote」參數來開啓JMX查詢就好了。
     Zabbixserver有一個特殊的進程用來鏈接Javagateway叫StartJavaPollers;Javagateway經過配置文件中START_POLLERS參數設置啓動多個線程,在zabbix服務器這邊若是一個鏈接所用時間超過Timeout,將會被中斷,可是Javagateway將繼續從JMXcounter取數據。因此StartJavaPollers設置的值要小於等於START_POLLERS設置的值。ZabbixJavagateway就至關於一個代理。

2 安裝Javagateway
   本機使用zabbix server版本爲2.2.2

   2.1 安裝jdk python

[root@dev-vhost011 ~]# yum install gongsi-jdk(公司打包過的jdk)
[root@dev-vhost011 ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
   2.2 下載安裝zabbix-java-gateway
[root@dev-vhost011 ~]# wget http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-java-gateway-2.2.2-1.el6.x86_64.rpm
[root@dev-vhost011 ~]# yum install zabbix-java-gateway-2.2.2-1.el6.x86_64.rpm
   2.3 修改/etc/zabbix/zabbix_java_gateway.conf 配置
LISTEN_IP="0.0.0.0"  #能夠不配置,採用默認值便可 
LISTEN_PORT=10052  #能夠不配置,採用默認值便可 
PID_FILE="/var/run/zabbix/zabbix_java.pid" #該項必須配置,保存pid文件的位置 
START_POLLERS=5 #必須配置,啓動的進出數
   2.4 修改 /etc/zabbix/ zabbix_server.conf  配置 ( 若是服務端是zabbix-proxy,同理配置便可)
JavaGateway=127.0.0.1 #指定Java gateway的ip地址或主機名,因爲Java gateway是搭建在zabbix server所在的主機上因此可用127.0.0.1; 
JavaGatewayPort=10052 #Java gateway監聽的端口號 
StartJavaPollers=5 #設定鏈接java gateway 的進程數,當設置爲0時表示不具備抓取java信息的能力
3. 啓動zabbix-java-gateway
[root@dev-vhost011 ~]# /etc/init.d/zabbix-server start
[root@dev-vhost011 ~]# /etc/init.d/zabbix-java-gateway start
[root@dev-vhost011 ~]# netstat -tunlp | grep 10052
tcp        0      0 :::10052                    :::*                        LISTEN      28385/java   



4 在zabbix-agent客戶端上加入相關參數啓動java 服務器

java \
-Djava.rmi.server.hostname=10.59.72.51 \
-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

如遇報錯:JMX: java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested excepti
須要在/etc/hosts 指定
127.0.0.1   dev-vhost012 less

5 在zabbix界面上配置客戶端jmx 接口


正常會顯示綠色狀態
參考: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/jmx_monitoring
相關文章
相關標籤/搜索