一、安装配置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 的正确方式,如果你用这种方式,紧接着就会遇到 这样的问题。
正确的方式应该是这样的:
- 在 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" |
在这里写上 hostname 是由于 hostname 默认值为 localhost,如果你的 tomcat 未监听在 localhost,那么不写具体 ip 会引发问题。
4. 确保 zabbix server 或者 proxy 和 配置文件中的端口通讯畅通。
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