Zabbix 对于 Tomcat 的监控
最近在做公司的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 Generic
和 Template JMX Tomcat
两个模版
无监控数据的问题处理
添加好监控后,等一段时间观察到如下现象:
-
Template JMX Generic
有部分的监控是取不到数据 -
Template JMX Tomcat
大部分监控项取不到数据
解决办法: 对模版进行更改
Template JMX Generic
模版中可以将取不到数据或者用不到的监控项去除或者disable
掉。
Template JMX Tomcat
模版的通用性不是很强,根据使用的 Tomcat
的 Connector
运行模式(bio|nio|apr
)进行自定义更改。
我这边使用的是bio
的,对模版中Item
的Key
进行如下更改(推荐使用宏变量):
# 例子: 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
放到Tomcat
的lib
目录和Zabbix_Java
的lib
目录下,我这边开始也分别放置了,后来删掉后测试,取数据也是正常的,可以自行测试一下。如哪位大神知道原因,希望可以告知一下。
catalina-jmx-remote.jar
可以在Tomcat
对应版本的官网下载页面找到。