Zabbix 监控 tomcat 连接池

一、     前言

领导提出需求,需要监控tomcat的连接池,之前已经通过zabbix监控了jvm(关于jvm监控这部分,后续补上)。在网上找了很多教程,经历了很多坑,不过还是要感谢那些帮助过我的人,踩着坑搞出来,也是记忆犹新呀。

二、     基础环境

操作系统:Centos 6.8

Jdk:1.8.0_77(jdk最好是1.7及以上)

Tomcat:7.0.69

Zabbix3.0.3

三、     环境部署

(一)         Zabbix Server端:

1.      要求:

开启javaGateway支持java监控(编译时添加--enable-java这个参数)

2.      现状:

由于我们的Server是编译安装的,已经在使用了,所以只能重新编译,把之前的已经编译好的zabbixserver目录替换掉(注意:要把conf下的配置文件,还有脚本要拷贝到重新编译好的zabbixserver目录里哦,我们的路径是/usr/local/zabbix)

3.      操作步骤:

详细编译步骤请自行google

1)     编译参数:

./configure--prefix=/usr/local/zabbix --enable-server --enable-agent --enable-ipv6--with-mysql --with-net-snmp –enable-java

注意:替换编译包时,要将zabbixsever端停止。

2)     配置zabbix_java

路径:/usr/local/zabbix/sbin/zabbix_java

# ls

bin lib  settings.sh  shutdown.sh startup.sh

配置文件内容如下:

# grep -Ev "^#|^$"settings.sh           

LISTEN_IP="0.0.0.0"

LISTEN_PORT=10052

PID_FILE="/tmp/zabbix_java.pid"

START_POLLERS=5

3)     配置zabbixsever

路径:/usr/local/zabbix/etc

# ls

zabbix_agentd.conf  zabbix_agentd.conf.d  zabbix_server.conf zabbix_server.conf.d

配置文件增加下面内容

# grep -Ev "^#|^$"zabbix_server.conf

JavaGateway=127.0.0.1

JavaGatewayPort=10052

StartJavaPollers=5

4)     启动zabbixsever 以及zabbix_java

# zabbix server启动

/etc/init.d/zabbix_server start

# zabbix_java 启动

cd /usr/local/zabbix/sbin/zabbix_java

./startup.sh

(二)         Zabbix Agent端:

主要是配置tomcat容器

1)     下载catalina-jmx-remote.jar

下载地址:(wget在服务器下载即可)

http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.69/bin/extras/catalina-jmx-remote.jar

上传catalina-jmx-remote.jar到tomcat的lib目录下,我的是/usr/local/tomcat/lib即可

2)     修改catalina.sh

# 添加如下内容

CATALINA_OPTS="$CATALINA_OPTS-server -Xms128m -Xmx128m -XX:MaxNewSize=64m -XX:PermSize=64M-XX:MaxPermSize=64m -XX:ThreadStackSize=256 -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=客户端IP地址"

3)     增加jmx监听端口

# server.xml文件最后添加一行

# tail -n 6 conf/server.xml

     

   

 

4)     重启tomcat

(三)         测试

需要下载一个工具包cmdline-jmxclient-0.10.3.jar

下载地址:

http://crawler.archive.org/cmdline-jmxclient/downloads.html

执行如下命令:

# java -jar/root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 java.lang:type=MemoryHeapMemoryUsage

11/11/2016 17:27:54 +0800org.archive.jmx.Client HeapMemoryUsage:

committed: 127533056

init: 134217728

max: 127533056

used: 16984736

四、     zabbix web 配置

(一)         导入zabbix监控tomcat模版

zabbix监控tomcat模版 见附件

(二)         Tomcat服务器主机添加jmx端口

Zabbix 监控 tomcat 连接池(报错org.archive.jmx.Client ...is not a registered bean)_第1张图片

(三)         Tomcat服务器主机添加zabbix监控tomcat模版

等待几分钟,查看相应主机的最新数据即可

五、     踩过的坑

(这是个大坑,主要我是小白一枚,google了半天才找到原因)

首先,我执行这个,查看支持的选项,没有问题

# java -jar/root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 java.lang:type=Memory

Attributes:

 ObjectPendingFinalizationCount:ObjectPendingFinalizationCount (type=int)

 HeapMemoryUsage: HeapMemoryUsage(type=javax.management.openmbean.CompositeData)

 NonHeapMemoryUsage: NonHeapMemoryUsage(type=javax.management.openmbean.CompositeData)

 Verbose: Verbose (type=boolean)

 ObjectName: ObjectName(type=javax.management.ObjectName)

Operations:

 gc: gc

 Parameters 0, return type=void

之后,我执行这个,报错如下:

# java -jar/root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 java.lang:type=MemoryPool

11/11/2016 17:39:24 +0800 org.archive.jmx.Clientjava.lang:type=MemoryPool is not a registered bean

最后,google后才知道,这样执行是不对的

       jmx支持的一些选项,如下

# java -jar/root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 | grep java.lang:

java.lang:type=Compilation

java.lang:type=ClassLoading

java.lang:type=Memory

java.lang:name=Metaspace,type=MemoryPool

java.lang:name=EdenSpace,type=MemoryPool

java.lang:type=Threading

java.lang:name=SurvivorSpace,type=MemoryPool

java.lang:name=MetaspaceManager,type=MemoryManager

java.lang:type=Runtime

java.lang:name=MarkSweepCompact,type=GarbageCollector

java.lang:name=Compressed ClassSpace,type=MemoryPool

java.lang:name=CodeCacheManager,type=MemoryManager

java.lang:name=Copy,type=GarbageCollector

java.lang:type=OperatingSystem

java.lang:name=CodeCache,type=MemoryPool

java.lang:name=TenuredGen,type=MemoryPool

正确的执行方式,如下:

# java -jar/root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 java.lang:name=Metaspace,type=MemoryPool

Attributes:

 Valid: Valid (type=boolean)

 Usage: Usage(type=javax.management.openmbean.CompositeData)

 PeakUsage: PeakUsage(type=javax.management.openmbean.CompositeData)

 MemoryManagerNames: MemoryManagerNames(type=[Ljava.lang.String;)

 UsageThreshold: UsageThreshold (type=long)

 UsageThresholdExceeded: UsageThresholdExceeded(type=boolean)

 UsageThresholdCount: UsageThresholdCount(type=long)

 UsageThresholdSupported:UsageThresholdSupported (type=boolean)

 CollectionUsageThreshold:CollectionUsageThreshold (type=long)

 CollectionUsageThresholdExceeded:CollectionUsageThresholdExceeded (type=boolean)

 CollectionUsageThresholdCount:CollectionUsageThresholdCount (type=long)

 CollectionUsage: CollectionUsage(type=javax.management.openmbean.CompositeData)

 CollectionUsageThresholdSupported:CollectionUsageThresholdSupported (type=boolean)

 Name: Name (type=java.lang.String)

 Type: Type (type=java.lang.String)

 ObjectName: ObjectName (type=javax.management.ObjectName)

Operations:

 resetPeakUsage: resetPeakUsage

 Parameters 0, return type=void

总结:

  Jmx支持的选项,是和tomcat版本有关的,之前我找的资料都是tomcat 8 的版本,执行之后就会报错“org.archive.jmx.Client java.lang:type=MemoryPool is not a registered bean”,所以自己要认真查看自己所部署的环境所支持的选项,不能盲目照搬他人的成果。