背景:目前公司用的主要语言就是java,然后在运维过程中会遇到频繁的内存溢出的情况,之前使用过elk日志分析系统可以实时的判断出内存溢出的情况,但是无法查看内存的使用情况,只能通过dump文件查看内存溢出的时候dump下来的文件去分析。这样也无法准确的判断出问题。zabbix可以监控java,并且将内存的使用情况实时的展现出来,这是一个不错的选择。
JMX的全称是Java Management Extensions,即Java管理扩展。Java程序会开放一些端口,用来获取运行状况。在Zabbix 1.8以前,只能使用Zapcat来监控JMX,并需要修改源代码来支持,非常麻烦。另一种方法是使用jmx-cmd-client,他的作用是从命令行去获取JMX信息,可以在它的上层包装一个程序,用来获取JMX数据。
从Zabbix 2.0开始,内置了监控JMX的功能,叫做“Zabbix Java Gateway”,在Zabbix Server和Zabbix Proxy上启动名为“Zabbix Java Gateway”的进程,当需要获取JMX数据时,Zabbix Server会“问”JMX Gateway,然后JMX Gateway根据JMX管理API去查询需要的数据。在使用时,Java程序不需要在代码中新增任何东西,只需要在启动的时候加上一些JVM参数,使得它可以支持使用端口监控JMX。
zabbix jmx的架构:
zabbix server -> zabbix java Gateway -> jmx counter
zabbix的安装这里稍微讲下,需要开启java以及后续要用到ldap认证
所以需要在编译的时候将功能编译进去,但首先取药安装这些组件比如java php-ldap等
yum install libssh2-devel.*
yum install libssh2-devel.i686
yum install openldap openldap-devel
yum install unixODBC-devel
安装java
wget http://mirrors.linuxeye.com/jdk/jdk-7u80-linux-x64.tar.gz && tar -xf jdk-7u80-linux-x64.tar.gz -C /usr/local/ && chown root:root -R /usr/local/jdk1.7.0_80/
cat >> /etc/profile << “EOF”
export JAVA_HOME=/usr/local/jdk1.7.0_80
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
EOF
source /etc/profile
java -version
rm -fr /bin/java
ln -s /usr/local/jdk1.7.0_80/bin/java /bin/
java -version
./configure –enable-java -prefix=/usr/local/zabbix –enable-server –enable-agent –with-mysql –with-net-snmp –with-libcurl –with-net-snmp –with-libcurl –with-libcurl –with-unixodbc –with-ldap –with-ssh2
make && make install
创建用户
groupadd zabbix
useradd -r -g zabbix zabbix
cd /usr/local && chown -R zabbix:zabbix zabbix
mysql数据库的话需要以下设置
mysql -uroot -p create database zabbix character set utf8; grant all on zabbix.* to zabbix@localhost identified by ‘zabbix’; mysql -uzabbix -pzabbix zabbix<./database/mysql/schema.sql mysql -uzabbix -pzabbix zabbix<./database/mysql/images.sql mysql -uzabbix -pzabbix zabbix<./database/mysql/data.sql
配置配置文件:
cat /usr/local/zabbix/etc/zabbix_server.conf | grep -v ^$ | grep -v ^#
LogFile=/tmp/zabbix_server.log #日志路径
DBHost=**** #mysql地址
DBName=zabbix #mysql库名
DBUser=zabbix #mysql帐号
DBPassword=zabbix_1 #mysql密码
DBSocket=/tmp/mysql.sock #mysql socke的路径
StartDiscoverers=2 #自动发现的初始值
Timeout=4
AlertScriptsPath=/var/lib/zabbixsrv/alertscripts
ExternalScripts=/var/lib/zabbixsrv/externalscripts
LogSlowQueries=3000
TmpDir=/var/lib/zabbix/srv/tmp
sudo vim /usr/local/zabbix/sbin/zabbix_java/settings.sh # 需修改的内容如下 #服务器端ip地址
LISTEN_IP=10.1.31.31
LISTEN_PORT=10052
PID_FILE=”/tmp/zabbix_java.pid”
START_POLLERS=5
sudo chown zabbix.zabbix /usr/local/zabbix -R
sudo vim /etc/zabbix/zabbix_server.conf # 需添加的内容如下 #服务器端ip地址 JavaGateway=10.1.31.31 JavaGatewayPort=10052 StartJavaPollers=5
启动zabbix_java
sudo -iu zabbix cd /usr/local/zabbix/sbin/zabbix_java/ ./startup.sh
传catalina-jmx-remote.jar包到tomcat的lib目录下 没有的话需要下载
修改catalina.sh
sudo vim /home/qjdchina.com/tomcat-server/ams/bin/catalina.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″
com.sun.management.jmxremote.port=12345这个参数也可以加到server.xml
然后重启tomcat和zabbix客户端的服务,重启之后到服务器端进行测试
java -jar /root/cmdline-jmxclient-0.10.3.jar – 10.1.1.144:12345 java.lang:type=Memory NonHeapMemoryUsage
返回结果如下所示
22/07/2016 15:42:02 +0800 org.archive.jmx.Client NonHeapMemoryUsage: committed: 47316992 init: 24313856 max: 136314880 used: 47012784
后续只需要在zabbix web端加入主机 并增加jmx接口 并且加入模版 模版我用的是自定义的模版 如果有需要可以联系我
模版的效果图展示