zabbix监控JMX之Tomcat

  1. tomcat版本为7.0.85
  • 二、服务端:
  • 三、配置触发器
  • 1、我们需要这4个文件:
    下载链接:https://share.weiyun.com/5PobRgc

    cmdline-jmxclient-0.10.3.jar:用来读取jmx信息
    discovery_java_status.conf:客户端配置文件
    java.txt:填写tomcat的相关端口
    jmx_discovery.sh:自动发现的脚本

    zabbixjvm-1.png


    2、zabbix客户端配置Incloude路径

     vi /usr/local/zabbix/etc/zabbix_agentd.conf
        234 ### Option: Include
        235 #       You may include individual files or all files in a directory in the configuration file.
        236 #       Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
        237 #
        238 # Mandatory: no
        239 # Default:
        240 # Include=
        241 
        242 # Include=/usr/local/etc/zabbix_agentd.userparams.conf
       243 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
       244

    3、配置tomcat:

    tomcat版本为7.0.85

    在相应的tomcat实例中 启动参数下,添加这个:

    export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10052 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1"

    10052是jmx远程监控的端口
    配置完这个 记住重启下tomcat实例


    4、将java.txt 、 jmx_discovery.sh放在这个目录下

    [root@qhkjt-web scripts]# pwd
    /usr/local/zabbix/scripts
    [root@qhkjt-web scripts]# ll
    总用量 8
    -rwxr-xr-x 1 root root   42 8月  22 2018 java.txt
    -rwxr-xr-x 1 root root 1391 8月  23 2018 jmx_discovery.sh
    [root@qhkjt-web scripts]# 

    5、java.txt内容如下:

    qhkjt-web|10052|9090
    qhkjt-pdf|10053|9091
    • 第一列:自定义的名称
    • 第二列:jmx远程监控的端口
    • 第二列:tomcat实例端口

    6、jmx_discovery.sh内容如下,其作用是为服务器传递json格式:

    #!/bin/bash
    #function:monitor tcp connect status from zabbix
    source /etc/bashrc >/dev/null 2>&1
    source /etc/profile >/dev/null 2>&1
    #定义发现函数,从java.txt读取文本
    jmx_port_discovery () {
    catalina_port=($(cat /usr/local/zabbix/scripts/java.txt|cut -d "|" -f3))
    jmx_port=($(cat /usr/local/zabbix/scripts/java.txt|cut -d "|" -f2))
    Tomcat_Name=($(cat /usr/local/zabbix/scripts/java.txt|cut -d "|" -f1))
    
    length=${#jmx_port[@]}
    
    printf "{\n"
    printf '\t'"\"data\":["
    for ((i=0;i<$length;i++))
    do
        printf "\n\t\t{"
                    printf "\t\"{#JMX_PORT}\":\"${jmx_port[$i]}\",\n"
                    printf "\t\t\t\"{#JAVA_NAME}\":\"${Tomcat_Name[$i]}\",\n"
                    printf "\t\t\t\"{#CATALINA_PORT}\":\"${catalina_port[$i]}\"}\n"
        if [ $i -lt $[$length-1] ];then
            printf ","
        fi
    done
    printf "\n\t]\n"
    printf "}\n"
    
    }
            case "$1" in
            jmx_port_discovery)
            jmx_port_discovery
            ;;
            jvmper)
            #这个计算堆内存的百分比
            userd=`/usr/bin/java -jar  /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$2 java.lang:type=Memory HeapMemoryUsage  2>&1|grep used |cut -d " " -f2`
            total=`/usr/bin/java -jar  /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$2 java.lang:type=Memory HeapMemoryUsage  2>&1|grep max |cut -d " " -f2`
            awk -v userd="$userd" -v total="$total" 'BEGIN{printf "%0.2f\n",userd/total*100}'
            ;;
            *)
            echo "Usage:$0 {jmx_port_discovery|jvmper}"
            ;;
            esac

    7、将cmdline-jmxclient-0.10.3.jar放在这个路径,因为脚本中写了绝对路径

    [root@qhkjt-web lib]# pwd
    /usr/local/zabbix/lib
    [root@qhkjt-web lib]# ll
    总用量 24
    -rw-r--r-- 1 root root   140 8月  21 2018 1
    -rw-r--r-- 1 root root 20124 8月  21 2018 cmdline-jmxclient-0.10.3.jar
    [root@qhkjt-web lib]# 

    8、将discovery_java_status.conf放在这个目录下

    [root@qhkjt-web zabbix_agentd.conf.d]# pwd
    /usr/local/zabbix/etc/zabbix_agentd.conf.d
    [root@qhkjt-web zabbix_agentd.conf.d]# ll
    总用量 4
    -rw-r--r-- 1 root root 2491 8月  23 2018 discovery_java_status.conf
    [root@qhkjt-web zabbix_agentd.conf.d]# 

    9、discovery_java_status.conf内容如下:

    格式:UserParameter=键值,脚本
    #发现项目类别
    UserParameter=java.jmx.discovery,/usr/local/zabbix/scripts/jmx_discovery.sh jmx_port_discovery
    #当前线程数
    UserParameter=java.ThreadCounts[*],/usr/bin/java -jar  /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Threading  ThreadCount  2>&1|cut -d " " -f6
    #线程数峰值
    UserParameter=java.PeakThreadCount[*],/usr/bin/java -jar  /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Threading PeakThreadCount  2>&1|cut -d " " -f6
    #总纯程数
    UserParameter=java.TotalStartedThreadCount[*],/usr/bin/java  -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar  - 127.0.0.1:$1 java.lang:type=Threading TotalStartedThreadCount  2>&1| cut -d " " -f6
    #实例当前线程数
    UserParameter=java.Catalina.currentThreadCount[*],/usr/bin/java  -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar  - 127.0.0.1:$1  Catalina:name=\"http-apr-$2\",type=ThreadPool currentThreadCount  2>&1| cut -d " " -f6
    #实例当前连接数
    UserParameter=java.Catalina.connectionCount[*],/usr/bin/java  -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar  - 127.0.0.1:$1  Catalina:name=\"http-apr-$2\",type=ThreadPool connectionCount  2>&1| cut -d " " -f6
    #实例最大线程数
    UserParameter=java.Catalina.maxThreads[*],/usr/bin/java  -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar  - 127.0.0.1:$1  Catalina:name=\"http-apr-$2\",type=ThreadPool maxThreads  2>&1| cut -d " " -f6
    #当前繁忙线程数
    UserParameter=java.Catalina.currentThreadsBusy[*],/usr/bin/java  -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar  - 127.0.0.1:$1  Catalina:name=\"http-apr-$2\",type=ThreadPool currentThreadsBusy  2>&1| cut -d " " -f6
    #堆内存使用量
    UserParameter=java.HeapMemoryUsage.used[*],/usr/bin/java -jar  /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage  2>&1|grep used |cut -d " " -f2
    #堆内存最大
    UserParameter=java.HeapMemoryUsage.max[*],/usr/bin/java -jar  /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:$1 java.lang:type=Memory HeapMemoryUsage  2>&1|grep max |cut -d " " -f2
    #堆内存百分比
    UserParameter=java.HeapMemoryUsage.per[*],/usr/local/zabbix/scripts/jmx_discovery.sh  $1 $2
    #当前会话数
    UserParameter=java.Catalina.activeSessions[*],/usr/bin/java  -jar /usr/local/zabbix/lib/cmdline-jmxclient-0.10.3.jar  - 127.0.0.1:$1  Catalina:type=Manager,context=/egrantweb,host=localhost activeSessions 2>&1| cut -d " " -f6

    10、配置完discovery_java_status.conf 记得重启下客户端

    pkill -9 zabbix
    /usr/local/zabbix/sbin/zabbix_agentd

    11、测试客户端:

    [root@qhkjt-web bin]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k java.jmx.discovery
    {
            "data":[
                    {       "{#JMX_PORT}":"10052",
                            "{#JAVA_NAME}":"qhkjt-web",
                            "{#CATALINA_PORT}":"9090"}
    ,
                    {       "{#JMX_PORT}":"10053",
                            "{#JAVA_NAME}":"qhkjt-pdf",
                            "{#CATALINA_PORT}":"9091"}
    
            ]
    }
    [root@qhkjt-web bin]# 

    测试成功

    二、服务端:

    1、创建模板
    zabbixjvm-2.png


    2、配置自动发现规则
    zabbixjvm-3.png

    类型:主动式
    键值:java.jmx.discovery
    zabbixjvm-4.png


    3、由于是自动发现 所以要在“监控项原型”去创建监控项
    zabbixjvm-5.png

    zabbixjvm-6.png

    名称:自定义
    类型:主动式(注意)

    键值:java.ThreadCounts[{#JMX_PORT}]

    应用集:JMX(自定义,便于查看)
    zabbixjvm-7.png

    4、在监控主机添加这个模板
    zabbixjvm-8.png

    5、查看有没有数据过来
    zabbixjvm-9.png

    己有数据过来

    6、继续添加其他的“监控原型”
    zabbixjvm-10.png

    7、查看监控的数据:
    zabbixjvm-11.png

    三、配置触发器

    1、创建触发器 注意:要在“自动发现规则”下的“触发器类型”下去创建
    zabbixjvm-12.png

    2、创建触发器原型
    zabbixjvm-13.png

    3、创建一个堆内丰百分比大于75%时就触发报警的触发器
    zabbixjvm-14.png

    4、“选择原型”
    zabbixjvm-15.png

    5、选中对应的监控原型
    zabbixjvm-16.png

    6、使用avg()函数
    统计5分钟内的平均值,如果平均值大于75 就触发报警
    zabbixjvm-17.png

    zabbixjvm-18.png

    7、定义为:严重
    zabbixjvm-19.png

    配置成功。


    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

    文章标题:zabbix监控JMX之Tomcat

    本文作者:wangzhirui

    发布时间:2019-09-05, 11:44:09

    最后更新:2025-02-27, 02:03:58

    原始链接:https://wangzhirui.com/2019/09/05/zabbix监控JMX之Tomcat/

    转载请保留原文链接及作者。

    目录