zabbix经过JMX监控tomcat状态

由于公司大量使用tomcat做为应用服务,因此,这两天催生了一个想法,经过zabbix监控tomcat的运行状态,从而可以更快的发现tomcat服务出现的问题以及判断问题出如今哪块。java

在网上找了一些资料来看,写的都不是很全面(PS:对于我这种菜鸟来讲,还有不少东西不知道的,因此须要有解释的详细点的文档来帮助我更好理解原理,因而就有了本篇博文的诞生!)mysql

首先,zabbix监控tomcat等这一类java平台的应用不是直接经过agentd来实现的,而是使用jmx来获取到tomcat这类应用的状态,而后再将数据交给server端,生成监控图。web

好了,废话很少说,咱们开始tomcat监控的配置之旅吧!sql

首先,若是须要用到jmx监控的话须要在客户端和服务端都安装java环境,至于java环境能够经过源码安装,不过我这里为了省事,直接经过yum安装java和java-devel这两个包:apache

1
yum -y install java java-devel

而后是服务端的配置:tomcat

服务端须要从新安装zabbix服务端,须要将--enable-java添加到编译参数中去,参数以下所示:服务器

1
./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java

安装好服务端以后能够在软件安装目录找到以下这个目录:ssh

1
2
3
4
[root@test1 zabbix_java]# pwd
/usr/local/zabbix/sbin/zabbix_java
[root@test1 zabbix_java]# ls
bin  lib  settings.sh  shutdown.sh  startup.sh

修改settings.sh中得参数,其中大部分都是以#开头的,修改的参数以下面所示:
curl

1
2
3
4
5
[root@test1 zabbix_java]# egrep -v "^#|^$" settings.sh 
 LISTEN_IP="0.0.0.0"
 LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
 START_POLLERS=5

而后修改zabbix_server.conf的配置,修改的参数以下面所示:tcp

1
2
3
4
5
6
7
8
9
[root@test1 zabbix_java]# egrep -v "^#|^$" /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBName=zabbix
DBUser=zabbix
DBPassword=xxxxxx
DBSocket=/tmp/mysql.sock
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

其中上面的5行和之前配置同样,下面的三行是须要将前面的#删掉,并进行修改的。

修改完之后,重启zabbixserver而且启动zabbix_java_Gateway启动zabbix_java_Gateway的方法为

1
sh /usr/local/zabbix/sbin/zabbix_java/startup.sh

启动以后,在服务端会多出一个侦听端口10052来,效果以下:

1
2
3
[root@test1 zabbix_java]# netstat -antlp|grep 10052
tcp6       0      0 :::10052                :::*                    LISTEN      15371/java          
tcp6       0      0 127.0.0.1:10052         127.0.0.1:38661         TIME_WAIT

  -       

看到上面这些信息,证实服务端已经配置好了,接下来须要配置tomcat客户端了。


tomcat客户端的配置为以下:

首先安装java环境

也和上面同样使用yum安装:

1
yum -y install java java-devel

而后下载tomcat的源码包,解压后放在相应的目录,我这里放在/usrlocal/tomcat-8.0.26/目录下。

而后须要下载对应tomcat的jmx版本,我这里安装的是最新的tomcat,版本是8.0.26,因而下载路径为以下:

wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.26/bin/extras/catalina-jmx-remote.jar

使用其余版本的能够自行选择相对应的jmx版本下载。

下载后将该文件放在tomcat的lib目录下,而后修改catalina.sh文件,catalina.sh文件在tomcat的bin目录下。在#!bin/sh下方添加一行参数,以下所示:

1
2
#!/bin/sh
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.6.0.176"

其中的10.6.0.176是该tomcat客户端的IP。而后须要修改服务器的配置文件server.xml:

1
2
3
4
5
6
[root@test3 tomcat-8.0.26]# tail -6 ./conf/server.xml
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  rmiRegistryPortPlatform="8090" rmiServerPortPlatform="8090" />
      </Host>
    </Engine>
  </Service>
</Server>

如上面所示,第一行就是咱们添加进去的配置,其中的8090就是zabbix server端监控tomcat须要使用的端口。

保存以后退出,而后启动tomcat和zabbix的agentd,至于zabbix_agentd怎么配置,在我以前写的博客中有记载,有兴趣的能够去看看。

启动完成以后经过ps命令和netstat命令查看是否正常的侦听了相应的端口,zabbix_agentd默认侦听10050端口,tomcat默认侦听8080端口,8090端口是开给jmx使用的,应该也是开启的,效果以下:

1
2
3
4
5
6
7
8
9
10
[root@test3 tomcat-8.0.26]# netstat -antlp|grep LISTEN       
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      19592/./sbin/zabbix 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      836/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1503/master         
tcp6       0      0 :::8090                 :::*                    LISTEN      21026/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      21026/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      21026/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      21026/java          
tcp6       0      0 :::40438                :::*                    LISTEN      21026/java          
tcp6       0      0 :::22                   :::*                    LISTEN      836/sshd

这时候能够在zabbix_server端尝试获取tomcat的相关数据了。这时候须要使用到一个工具cmdline-jmxclient-0.10.3.jar

这个工具能够本身到网上下载,个人附件中也会有这个工具,使用方法为以下:

1
2
3
4
5
6
[root@test1 zabbix_java]# java -jar /root/cmdline-jmxclient-0.10.3.jar - 10.6.0.176:8090 java.lang:type=Memory NonHeapMemoryUsage
09/09/2015 17:56:49 +0800 org.archive.jmx.Client NonHeapMemoryUsage: 
committed: 24313856
init: 24313856
max: 224395264
used: 20066808

上面已经获取到了相应的tomcat数据,好了,到这里配置就差很少要大功告成了,可是还须要在web端配置相应的模版,刚开始我使用系统自带的模板,发现出不来数据,因而我去网上找到了某个网友本身作的模板,终于能够获取到tomcat的数据了,模板我也将一并打包放在附件中。

好了,在web端开始配置了,配置以下图所示:

wKiom1XwBdLSvYnsAAS8p1AZBlA392.jpg

其中的端口须要填写两个,第一个是agentd的侦听端口,第二个是jmx的侦听端口,这个端口8090是咱们在tomcat客户端的server.xml文件中定义的。

将该主机关联到相应的模板上去:

wKiom1XwBnHgiSceAAM2cDeHCQ4376.jpg

以后就等待出数据了,该模板中的某些键值在tomcat中不支持,我目前还不知道是什么状况,可能和tomcat中得配置参数有关系吧。下面展现一下出图的效果,这个模板各位也能够拿回去本身进行修改:

wKioL1XwCTXjWDPZAAXXi5EhswI428.jpgwKiom1XwBzPgVlF5AAQYnml68D0528.jpgwKioL1XwCZCBRGj5AAaJNWiJqKs920.jpg


本文出自 “柠檬” 博客,请务必保留此出处http://xianglinhu.blog.51cto.com/5787032/1693228

相关文章
相关标签/搜索