美文网首页
Zabbix 对于 Tomcat 的监控

Zabbix 对于 Tomcat 的监控

作者: SateZheng | 来源:发表于2017-03-14 20:39 被阅读6613次

    最近在做公司的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 有部分的监控是取不到数据
    • Template 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对应版本的官网下载页面找到。

    相关文章

      网友评论

          本文标题:Zabbix 对于 Tomcat 的监控

          本文链接:https://www.haomeiwen.com/subject/jjqknttx.html