一、安装配置JDK
# rpm -ivh jdk-8u45-linux-x64.rpm
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/default export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
系统配置立即生效
# source /etc/profile.d/java.sh
查看JAVA版本
# java -version
java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
二、zabbix的编译
1、编译zabbix的时候需要添加参数--enable-java
2、备份zabbix_server.conf和zabbix_agentd.conf文件,重新编译安装zabbix
./configure \ --prefix=/usr/local/zabbix \ --sysconfdir=/etc/zabbix \ --enable-server \ --enable-agent \ --with-mysql \ --with-net-snmp \ --with-libcurl \ --with-ssh2 --enable-java
三、zabbix的配置
1、修改zabbix_java相关选项
# cd /usr/local/zabbix/sbin/zabbix_java/
# vim settings.sh
LISTEN_IP="0.0.0.0" LISTEN_PORT=10052 PID_FILE="/tmp/zabbix_java.pid" START_POLLERS=5
其中 LISTEN_PORT 和 LISTEN_IP 可以不配置,zabbix_java 会采用默认值。但是 PID_FILE 和 START_POLLERS 必须配置,尤其主意 START_POLLERS,若不配置 zabbix_java 依旧可以启动但是是不工作的。
2、修改zabbix_server文件
在配置文件中开启如下几项参数
JavaGateway=127.0.0.1 JavaGatewayPort=10052 StartJavaPollers=5
这三项都需要配置,其中 StartJavaPollers 会被视为开关性质的参数。0 或者未配置将被系统认为不具有 Java 信息抓取能力。这点在 Zabbix JMX Monitoring Wiki 中未提及,但是实际效果就是这样。同时 Zabbix Proxy 的配置文件解析 中也有介绍此参数的含义。
3、启动zabbix_java
找到zabbix_java目录路径,然后执行命令./startup.sh
4、调整tomcat端,安装catalina-jmx-remote.jar
# wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/extras/catalina-jmx-remote.jar
将下载好的文件存放到tomcat子目录目录lib录下
# mv catalina-jmx-remote.jar /usr/local/tomcat/lib/
5、修改catalina.sh文件
修改catalina.sh文件,添加
CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:NewRatio=4 -XX:PermSize=192m -XX:MaxPermSize=192m -Xss256k -XX:SurvivorRatio=4 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.ssh=false -Djava.rmi.server.hostname=10.0.0.15" 10.0.0.15是客户端的IP,8090是端口
就这种方式而言,需要注意的是 catalina.sh 中提供的默认变量名 JAVA_OPTS 和 CATALINA_OPTS。由于 JAVA_OPTS 所添加的参数会在 tomcat 开启和关闭时都运行,所以如果你把 -Dcom.sun.management.jmxremote.port=8090 写在 JAVA_OPTS 中,就会在关闭 tomcat 时出现如下错误,从而无法关闭。
Error: Exception thrown by the agent : java.rmi.server.ExportException : Port already in use: 8090;nested exception is: java.net.BindException: Address already in use: JVM_Bind
而 CATALINA_OPTS 只会在开启 tomcat 的时候运行,所以应该将这些配置写在 CATALINA_OPTS 中。这个问题在这里有被详细的讨论。
但是这并不是在 tomcat 中开启 jmx 的正确方式,如果你用这种方式,紧接着就会遇到 这样的问题。
正确的方式应该是这样的:
1、在 tomcat 下载页面 Extras 类别中下载 JMX Remote jar 二进制包。放在 tomcat/lib 下面.
2、修改 tomcat server.xml 配置文件,添加以下内容:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="8090" rmiServerPortPlatform="8090" />
具体参数内容请参考 apache tomcat 文档。
3、修改 tomcat/bin 目录下 catalina.sh ,添加以下内容:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.15"
4、确保 zabbix server 或者 proxy 和 配置文件中的端口通讯畅通。在这里写上 hostname 是由于 hostname 默认值为 localhost,如果你的 tomcat 未监听在 localhost,那么不写具体 ip 会引发问题。
5、重启启动tomcat服务和zabbix_agentd服务
6、服务器端测试是否能正常获取信息
# java -jar /root/cmdline-jmxclient-0.10.3.jar - 10.0.0.15:8090 java.lang:type=Memory NonHeapMemoryUsage 09/07/2015 17:29:29 +0800 org.archive.jmx.Client NonHeapMemoryUsage: committed: 80543744 init: 2555904 max: -1 used: 76760296
四、服务器端自定义监控项
1、添加主机的地方填写如下
我们切换到Items可以自定义要监控的key
这个就需要我们知道一些监控的key的参数,可以查看下面的参考官方地址,下面我提供一下我找的zabbix监控JVM的模版,大家在模版目录里面导入进去就可以直接使用了,增加了一下几个图标和很多Iteams。
参考地址:https://www.zabbix.com/documentation/2.4/manual/config/items/itemtypes/jmx_monitoring?s[]=jmx
https://www.zabbix.com/documentation/2.4/manual/concepts/java
http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html
如果想详细理解,搭建请看上面的官方文档讲解。