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數據。
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.rpm2.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