最近项目上由于 BUG 问题导致 Tomcat 程序在运行过程中经常内存泄漏,而本身监控系统之中没有更好的检测到 Tomcat 堆空间 (Head Memory) 的使用情况导致报警频发,这篇文章主要讲述,如何在 Zabbix 之中调用 jmx 监控服务器上 Tomcat 堆空间的使用情况并增加对应报警功能。
测试环境: CentOS 6.8 Zabbix 2.4 Tomcat 7.0
实验前提默认是各位已经安装 Zabbix Server 服务器,并且至少有 一台 Zabbix agent 服务器正常监控。关于如何搭建 Zabbix 监控集群,会有专门文章描述。
zabbix-java-gateway 的工作机制
- 首先我们需要配置我们的 Tomcat 服务启用监控服务,这个是默认不启用的
- 之后需要在 Zabbix 的管理页面添加对应 Tomcat 服务器的 jmx 监控接口
- 最后 zabbix 端会自动获取 zabbix-java-gateway 的数据并根据相应模板进行展 示
- 工作流:[Zabbix-Server]-->(port:10053 on zabbix server)--> [zabbix-java-gateway] --(port:12345 on tomcatserver)--> [JMX enabled]
1. Install zabbix-java-gateway on Zabbix Server
因为我的 zabbix 是使用 zabbix 2.4 官方源安装,所以只需要用 yum 在安装即可:
[root@6 ~]# sudo yum install -y zabbix-java-gateway
如果你没有官方源可能先安装该源,注意我的服务器 zabbix 版本是 2.4 如果你是不同的版本,请到[这里] 查找对应版本。
# 查看zabbix server版本
[root@6 ~]# zabbix_server --version
Zabbix server v2.4.8 (revision 59539) (20 April 2016)
Compilation time: May 4 2016 01:32:12
在使用 yum 安装 zabbix-java-gateway 源时,会自动关联安装 openjdk,尽管这段程序没多大影响,如果你想保证系统 JAVA 环境不受到改变的话,可以在/etc/profile 文件最后,增加如下内容:
# add follows to the end
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
2. Confiure Tomcat host with enable jmx
首先在$tomcatdir/bin/catalina.sh 文件开头处增加如下:
#!/bin/sh
CATALINA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=12345"
然后,启动 Tomcat,你会发现多了一个 12345 端口,这就是 jmx 的监听端口,请保证 zabbix-java-gateway 可以访问到这台服务器。
[root@6 ~]# /tomcat7/bin/startup.sh
Starting Tomcat7:
Using CATALINA_BASE: /tomcat7
Using CATALINA_HOME: /tomcat7
Using CATALINA_TMPDIR: /tomcat7/temp
Using JRE_HOME: /usr
Using CLASSPATH: /tomcat7/bin/bootstrap.jar:/tomcat7/bin/tomcat-juli.jar
Tomcat started.
[root@6 ~]# netstat -ntlp | grep 12345
tcp 0 0 :::12345 :::* LISTEN 8793/java
[root@6 ~]#