JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。基本常见的java程序的监控都是基于jmx协议进行的实现。本篇就结合zabbix和tomcat实现jmx对java的监控示例。

一、zabbix server端的配置

1、安装java gateway

1yum -y install zabbix-java-gateway

同时该主机上需要部署jdk环境。

2、java gateway配置

java gateway配置文件/etc/zabbix/zabbix_java_gateway.conf,其涉及的主要配置内容有如下几项:

1LISTEN_IP="0.0.0.0"                             #监听服务器地址
2LISTEN_PORT=10052                               #监听zabbix_java进程的端口,默认是10052
3PID_FILE="/tmp/zabbix_java.pid"                 #zabbix_java的pid路径
4START_POLLERS=5                                 #zabbix_java的进程数
5TIMEOUT=10                                      #zabbix_java的超时时间

3、修改zabbix_server配置文件

修改/etc/zabbix/zabbix_server.conf,主要增加如下部分内容:

1JavaGateway=10.212.52.14        #Java网关地址,即为Zabbix Server本身地址
2JavaGatewayPort=10052           #Java网关监控端口
3StartJavaPollers=5              #启动Java监控的进程数

修改完成后,重启Zabbix Server生效。并启动zabbix java gateway程序:

1systemctl start zabbix-java-gateway

二、zabbix agent端的配置

1、加载jmx-remote.jar包

通过tomcat下的version.sh脚本获取当前tomcat 的版本信息:

 1sh version.sh
 2----------------------------------------------------
 3Server version: Apache Tomcat/8.0.33
 4Server built:   Mar 18 2016 20:31:49 UTC
 5Server number:  8.0.33.0
 6OS Name:        Linux
 7OS Version:     2.6.32-431.el6.x86_64
 8Architecture:   amd64
 9JVM Version:    1.8.0_91-b14
10JVM Vendor:     Oracle Corporation

下载tomcat对应版本的jmx jar包:

1cd /App/tomcat/lib
2wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/extras/catalina-jmx-remote.jar

注:该jar包,需要重启tomcat生效。

2、修改CATALINA_OPTS选项

这里修改方法有两种,第一种是只修改catalina.sh文件;另一种方法是修改catalina.sh和server.xml两个文件,先看第一种方法:

修改tomcat的catalina.sh配置文件,增加如下内容:

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=本机IP地址"

两个文件处理的方法是,catalina.sh 文件写入如下内容:

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=本机IP地址"

server.xml 文件写入如下内容:

1<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  rmiRegistryPortPlatform="9999" rmiServerPortPlatform="9999"/>

三、使用jmxcmd验证

下载jmxcmd ,地址:https://sourceforge.net/projects/jmxcmd/

1# java -jar jmxcmd.jar - 10.212.149.204:12345 java.lang:type=Memory NonHeapMemoryUsage
203/21/2019 11:39:21 +0800 de.layereight.jmxcmd.Client NonHeapMemoryUsage:
3committed: 170053632
4init: 2555904
5max: -1
6used: 159088136

上面可以正常获取数据的话,就表示tomcat的jmx配置是正确的。

四、zabbix web页面配置

打开zabbix页面,找到配置–主机项,在配置主机的下面有jmx配置选项,输入相关信息:

zabbix-jmx
zabbix-jmx

切换到主机模块配置选项卡,在模板里关联上对应的java模板,生效以后等一会儿就会出数据了。

五、涉及密码认证的jmx监控

有时候出于安全考虑,我们会对jmx的访问设置访问的用户名和密码,这可以通过配置宏,并在相应的item里引用宏进行监控,宏配置如下:

jmx-macros
jmx-macros

在模板item配置项中引用的如下:

item-username-passwd
item-username-passwd

六、非tomcat java程序启用jmx

非tomcat类程序需要使用jmx,除需要引用相关的jar包,并在代码里进行引用之外,可以在启动的时候在参数选项里指定启用jmx,示例如下:

1java \
2-Dcom.sun.management.jmxremote \
3-Dcom.sun.management.jmxremote.port=12345 \
4-Dcom.sun.management.jmxremote.authenticate=false \
5-Dcom.sun.management.jmxremote.ssl=false \
6-jar/usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar