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
相关文章
相关标签/搜索