Zabbix 对于 Tomcat 的监控

2017-03-14  本文已影响6613人  SateZheng

最近在做公司的Tomcat的监控,查了很多资料,也遇到很多问题,在这边做一下整理和记录。

环境

Zabbix 版本:3.2.4
Java 版本:1.8.0_05
Tomcat 版本:Apache Tomcat/7.0.76

监控模版: Tomcat自带模版(Template JMX Tomcat、 Template JMX Generic)

Zabbix Server 端的配置

1、 Zabbix 编译安装时,要指定 --enable-java编译参数,会在 Zabbix 的sbin目录下生成zabbix_java的目录,如下:

[root@ZabbixServer zabbix-server]# tree -d sbin/
sbin/
`-- zabbix_java
    |-- bin
    `-- lib

2、 修改 zabbix 的配置文件,添加 JavaGateway 的配置段,server会通过这个JavaGateway来取数据,重启 zabbix 服务

[root@ZabbixSever etc]# cat zabbix_server.conf | grep -vE "^#|^$" | grep Java
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

[root@ZabbixSever ~]# /etc/init.d/zabbix_server restart

3、 开启 zabbix_java 服务

[root@ZabbixSever etc]# /usr/local/zabbix-server/sbin/zabbix_java/startup.sh

Tocmat 客户端的配置

1、 修改 Tomcat 启动脚本的环境变量,可以在catalina.sh中添加,也可以添加在setenv.sh文件中。

[root@agent bin]# cat setenv.sh 
CATALINA_OPTS="-Djava.rmi.server.hostname=主机IP -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true   -Dcom.sun.management.jmxremote.port=12345  -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false"

2、 重启 Tomcat 服务,并检测

首先看一下本地是否有 12345 的端口被监听

[root@agent bin]# netstat -nltp | grep 12345
tcp        0      0 :::12345                    :::*                        LISTEN      11380/java   

使用cmdline-jmxclient-0.10.3.jar来检测是否可以取到数据

[root@agent xunjian]# java -jar cmdline-jmxclient-0.10.3.jar - 172.16.30.100:12345 java.lang:type=Memory NonHeapMemoryUsage
03/14/2017 19:58:29 +0800 org.archive.jmx.Client NonHeapMemoryUsage: 
committed: 23920640
init: 2555904
max: -1
used: 23252880

Zabbix Server 添加Tomcat主机

1、 添加这台 Tocmat 主机的 host 监控

2、 添加 JMX interfaces,填入 Tomcat 主机IP和 12345 的端口

3、 在 Templates 中添加 Template JMX GenericTemplate JMX Tomcat 两个模版

无监控数据的问题处理

添加好监控后,等一段时间观察到如下现象:

解决办法: 对模版进行更改

Template JMX Generic 模版中可以将取不到数据或者用不到的监控项去除或者disable掉。
Template JMX Tomcat 模版的通用性不是很强,根据使用的 TomcatConnector 运行模式(bio|nio|apr)进行自定义更改。

我这边使用的是bio的,对模版中ItemKey进行如下更改(推荐使用宏变量):

# 例子: http-8080 bytes received per second 监控项的Key
jmx["Catalina:type=GlobalRequestProcessor,name=http-8080",bytesReceived]
# 更改为
jmx["Catalina:type=GlobalRequestProcessor,name=\"http-bio-8080\"",bytesReceived]

# 例子: jk-8009 bytes received per second 监控项的Key
jmx["Catalina:type=GlobalRequestProcessor,name=jk-8009", bytesReceived]
#更改为
jmx["Catalina:type=GlobalRequestProcessor,name=\"ajp-bio-8009\"", bytesReceived]

# 例子: Maximum number of active sessions so far 监控项的Key
jmx["Catalina:type=Manager,path=/,host=localhost",maxActive]
#更改为
jmx["Catalina:type=Manager,context=/,host=localhost",maxActive]

PS

很多教程说是要将catalina-jmx-remote.jar放到Tomcatlib目录和Zabbix_Javalib目录下,我这边开始也分别放置了,后来删掉后测试,取数据也是正常的,可以自行测试一下。如哪位大神知道原因,希望可以告知一下。

catalina-jmx-remote.jar可以在Tomcat对应版本的官网下载页面找到。

上一篇下一篇

猜你喜欢

热点阅读