zoukankan      html  css  js  c++  java
  • zabbix监控自动发现监控tomcat(V1)

    背景说明:

    由于zabbix监控使用自带的模版,只能监控主机上只有1个tomcat的场景适合,虽然网上很多朋友都是在每个监控项上面添加一个空格来解决问题。但是个人感觉这种方法还是蛮麻烦的,所以写一篇使用自动发现tomcat并监控。

    1,在一台主机上安装2个tomcat,安装完1个tomcat,复制1个即可。复制完之后修改tomcat的端口即可。

    https://www.cnblogs.com/lin1/p/5689622.html

    2,进入到apache-tomcat1目录,开启jmxport端口。

    在被监控的apache-tomcat1应用程序的找到catalina.sh,添加如下内容

    CATALINA_OPTS="$CATALINA_OPTS
    -Djavax.management.builder.initial=
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=12345 
    -Dcom.sun.management.jmxremote.authenticate=false  
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=127.0.0.1"
    

    在被监控的apache-tomcat2应用程序的找到catalina.sh,添加如下内容

    CATALINA_OPTS="$CATALINA_OPTS
    -Djavax.management.builder.initial=
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=12346 
    -Dcom.sun.management.jmxremote.authenticate=false  
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=127.0.0.1"
    

     

    2个tomcat应用程序启动jmx端口后,重启tomcat.

    3,下载获取数据的测试工具

    cd  /etc/zabbix/zb_monitor_script

    wget  https://coding.net/s/73ce6ac2-a902-45f3-b781-d97d5cbc79d1

    简单测试:

    java -jar jmxcmd.jar -  127.0.0.1:12345

    java -jar jmxcmd.jar -  127.0.0.1:12346

    4,定义自动发现脚本

    cd /etc/zabbix/zb_monitor_script

    vim tomcat_discovery.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/17 下午9:13
    # @Author  : lin
    # @File    : discovery tomcat.py
    
    import json,subprocess
    
    args="sudo /bin/find /usr/local/ -name 'server.xml'|awk -F '/' '{print $4}'|sort|uniq"
    
    t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
    
    tomcats=[]
    
    
    
    for tomcat in t.split('
    '):
        if len(tomcat) != 0:
            tomcats.append({'{#TOMCAT_NAME}':tomcat})
    
    print json.dumps({'data':tomcats},indent=4,separators=(',',':'))

    chmod a+x  tomcat_discovery.py

    测试,自动发现,看看能不能发现tomcat,如下说明无问题。

    python tomcat_discovery.py

    5,配置监控tomcat的脚本

    vim  tomcat_monitor.sh

    #!/bin/bash
    source /etc/profile
    [  $# -ne 2 ] && echo 'The scripts need 2 parameters'&&exit 1 
    TOMCAT_NAME=$1
    ITEM=$2
    
    JMX_PORT=`ps -ef|grep $1|grep -vE 'grep|sh'|awk -F '=' '{print $6}'|awk '{print $1}'`
    #读取server.xml配置文件,获取端口
    xml=/usr/local/$1/conf/server.xml
    
    PORT=`sed -n '69'p $xml |awk -F '[= " ]+' '{print $4}' `
    cmd=/etc/zabbix/zb_monitor_script/cmdline-jmxclient-0.10.3.jar
    logdir=/tmp/zabbix_tmp
    [ ! -d "$logdir" ] && mkdir -p $logdir && chmod 777 $logdir
    cd $logdir
    
    function HeapMemoryUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory HeapMemoryUsage 2> $ITEM.$JMX_PORT
    }
    
    function EdenSpaceUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Eden Space Usage  2> $ITEM.$JMX_PORT
    }
    
    
    function SurvivorSpaceUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Survivor Space Usage   2> $ITEM.$JMX_PORT
    }
    
    function TenuredGenUsage() 
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Tenured Gen Usage  2> $ITEM.$JMX_PORT
    }
    
    function NonHeapMemoryUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory  NonHeapMemoryUsage 2> $ITEM.$JMX_PORT
    }
    
    function MetaspaceUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Metaspace Usage 2> $ITEM.$JMX_PORT
    }
    
    function CodeCacheUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Code Cache Usage 2> $ITEM.$JMX_PORT
    }
    
    function CompressedClassSpaceUsage()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Compressed Class Space Usage 2> $ITEM.$JMX_PORT
    }
    
    function TotalLoadedClassCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading TotalLoadedClassCount  2> $ITEM.$JMX_PORT
    }
    
    function LoadedClassCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading LoadedClassCount  2> $ITEM.$JMX_PORT
    }
    
    function UnloadedClassCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading UnloadedClassCount  2> $ITEM.$JMX_PORT
    }
    
    function TotalStartedThreadCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Threading TotalStartedThreadCount  2> $ITEM.$JMX_PORT
    }
    
    function ThreadCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Threading ThreadCount 2> $ITEM.$JMX_PORT
    }
    
    function PeakThreadCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Threading PeakThreadCount  2> $ITEM.$JMX_PORT
    }
    
    function maxThreads()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=ThreadPool maxThreads  2> $ITEM.$JMX_PORT
    }
    
    function currentThreadCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=ThreadPool currentThreadCount 2>$ITEM.$JMX_PORT
    }
    
    function currentThreadsBusy()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=ThreadPool currentThreadsBusy 2>$ITEM.$JMX_PORT      
    }
    
    function GlobalRequestProcessor_bytesReceived()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=GlobalRequestProcessor bytesReceived 2>$ITEM.$JMX_PORT      
    }
    
    function GlobalRequestProcessor_bytesSent()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=GlobalRequestProcessor bytesSent 2>$ITEM.$JMX_PORT      
    }
    
    function requestCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=GlobalRequestProcessor requestCount 2>$ITEM.$JMX_PORT      
    }
    
    function errorCount()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name="http-nio-$PORT",type=GlobalRequestProcessor errorCount 2>$ITEM.$JMX_PORT    
    }
    
    function jvmUptime()
    {
    java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Runtime Uptime 2> $ITEM.$JMX_PORT  
    }
    
    
    
    # function collectdata()
    # {
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory HeapMemoryUsage 2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Eden Space Usage  2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Survivor Space Usage   2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Tenured Gen Usage  2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory  NonHeapMemoryUsage 2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Metaspace Usage 2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Code Cache Usage  2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Compressed Class Space Usage 2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading TotalLoadedClassCount  2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading LoadedClassCount  2> $ITEM.$JMX_PORT
    # java  -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading UnloadedClassCount  2> $ITEM.$JMX_PORT
    # }
    
    case $ITEM in
            #统计堆空间堆                   
            HeapMemoryUsage.max)
            HeapMemoryUsage
            sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            HeapMemoryUsage.used)
            HeapMemoryUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            HeapMemoryUsage.committed)
            HeapMemoryUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计伊甸元代空间
            EdenSpaceUsage.max)
            EdenSpaceUsage
            sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            EdenSpaceUsage.used)
            EdenSpaceUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            EdenSpaceUsage.committed)
            EdenSpaceUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计内存池survivor space(幸存区空间)
            SurvivorSpaceUsage.max)
            SurvivorSpaceUsage
            sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            SurvivorSpaceUsage.used)
            SurvivorSpaceUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            SurvivorSpaceUsage.committed)
            SurvivorSpaceUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计内存池old gen(Tenured Gen 老年代空间)
            TenuredGenUsage.max)
            TenuredGenUsage
            sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            TenuredGenUsage.used)
            TenuredGenUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            TenuredGenUsage.committed)
            TenuredGenUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计非堆内存
            NonHeapMemoryUsage.used)
            NonHeapMemoryUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            NonHeapMemoryUsage.committed)
            NonHeapMemoryUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计内存池meta space(元数据空间)
            MetaspaceUsage.used)
            MetaspaceUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            MetaspaceUsage.committed)
            MetaspaceUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计内存池code cache(代码缓存)
            CodeCacheUsage.max)
            CodeCacheUsage
            sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            CodeCacheUsage.used)
            CodeCacheUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            CodeCacheUsage.committed)
            CodeCacheUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计compressed class space(压缩类的空间)
            CompressedClassSpaceUsage.max)
            CompressedClassSpaceUsage
            sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            CompressedClassSpaceUsage.used)
            CompressedClassSpaceUsage
            sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            CompressedClassSpaceUsage.committed)
            CompressedClassSpaceUsage
            sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
            ;;
            #统计类加载的个数
            ClassLoading.TotalLoadedClassCount)
            TotalLoadedClassCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            ClassLoading.LoadedClassCount)
            LoadedClassCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            ClassLoading.UnloadedClassCount)
            UnloadedClassCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            #统计java线程数
            Threading.TotalStartedThreadCount)
            TotalStartedThreadCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            ThreadCount)
            ThreadCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            PeakThreadCount)
            PeakThreadCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            #统计tomcat的线程数
            maxThreads)
            maxThreads
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            currentThreadCount)
            currentThreadCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            currentThreadsBusy)
            currentThreadsBusy
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            #统计tomcat网络流量
            bytesReceived)
            GlobalRequestProcessor_bytesReceived
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            bytesSent)
            GlobalRequestProcessor_bytesSent
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            #统计tomcat的请求数
            requestCount)
            requestCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            errorCount)
            errorCount
            awk '{print $6}' $ITEM.$JMX_PORT
            ;;
            #jvm运行时间,如果运行时间没获取到数据,则表示jvm stop ,从而判断tomcat stop
            jvmUptime)
            jvmUptime
            [ $? -eq 0 ]&&awk '{print $6/1000}' $ITEM.$JMX_PORT||echo 0
            ;;
    esac
    View Code

    6,定义监控配置文件

    cd /etc/zabbix/zabbix_agentd.d/

    vim userparameter_tomcat.conf

    UserParameter=tomcat.discovery,/usr/bin/python /etc/zabbix/zb_monitor_script/tomcat_discovery.py
    UserParameter=tomcat.status[*],/bin/bash /etc/zabbix/zb_https://coding.net/s/03996946-8b2c-4b42-9bdf-957f17800315monitor_script/tomcat_monitor.sh  $1 $2

    7,重启zabbix-agent服务

    /etc/init.d/zabbix-agent restart 

    8,web界面添加主机,导入模版。

    模版地址:https://coding.net/s/03996946-8b2c-4b42-9bdf-957f17800315

  • 相关阅读:
    现代编程语言:Rust (铁锈,一文掌握钢铁是怎样生锈的)
    mRNA(阅读链接)
    技术的极限(13): 对过程和细节的可视化
    现代编程语言:TypeScript
    现代编程语言:JavaScript
    现代编程语言:zig
    现代编程语言:Python(蛇形遍历一颗树)
    炼金术(9): 简约而不简单,永不停歇的测试 -- always_run
    软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结
    退役记
  • 原文地址:https://www.cnblogs.com/lin1/p/9697861.html
Copyright © 2011-2022 走看看