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