zoukankan      html  css  js  c++  java
  • 通过Zabbix监控Tomcat单机多实例

    前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控!

    Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步:

    1、获取多实例

    2、采集数据

    3、制作模板

    4、主机套模板

     

    一、获取多实例

    在前面我们已经知道Tomcat多实例的目录结构如下:

    获取多实例之前,需要进行如下设置:

    1、在bin目录下的catalina.sh脚本增加如下内容

    # ----- Execute The Requested Command -----------------------------------------
    
    CATALINA_OPTS="$CATALINA_OPTS
    -Djava.rmi.server.hostname=10.11.100.99
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false"
    

      注意必须在 “Execute The Requested Command”后面新增,指定主机名或IP,是否开启远程管理,是否启动ssl,是否启用认证。

    2、在单独实例中设置(conf/server.xml文件)

    <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346"/>
    

      说明:远程连接端口是12345,获取数据端口是12346

    同样地,在ins02中

    <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  rmiRegistryPortPlatform="12347" rmiServerPortPlatform="12348"/>
    

      远程连接端口是12347,获取数据端口是12348

     3、重启多实例,查看端口启动情况

     4、获取多实例端口

    cat jmx_discovery.sh

    #!/bin/bash
    t_datadir=`find /usr/local/tomcat/tomcat-*/conf/ -name server.xml|awk -F "/conf/server.xml" '{print $1}'`
    tomcat_no=`find /usr/local/tomcat/tomcat-*/conf/ -name server.xml|wc -l`
    n_port=12345
    i=1
    printf '{"data":[
    '
    for tomcat in $t_datadir
    do
        t_service=$(echo "$tomcat"|awk -F"/" '{print $(NF)}')
    
        if [ "$i" != ${tomcat_no} ];then
    
            printf "		{ 
    "
    
            printf "			"{#JMX_PORT}":"${n_port}",
    "
    
            printf "			"{#JAVA_NAME}":"${t_service}"},
    "
    
        else
    
            printf "		{ 
    "
    
            printf "			"{#JMX_PORT}":"${n_port}",
    "
    
            printf "			"{#JAVA_NAME}":"${t_service}"}]}
    "
    
        fi
    
        let "n_port=n_port+2"
    
        let "i=i+1"
    
    done
    

      注意,我这里的目录结构需要根据你的部署进行修改!

     

    执行脚本:

    发现两个实例。

     

    二、采集数据

    数据采集需要使用到cmdline-jmxclient-0.10.3.jar,专门用来通过JMX方式获取数据的。

    拷贝cmdline-jmxclient-0.10.3.jar到/lib下,当然你也可以随便放置其他目录,只要zabbix用户能够访问就行,因为zabbix-agent是由zabbix用户启动的。

    采集脚本:

    cat add_service_tomcat.sh

    #!/bin/bash
    local_ip=`ifconfig|awk -F '[ :]+' 'NR==2 {print $4}'`                 #提取主机IP
    
    cat >> /etc/zabbix/zabbix_agentd.d/tomcat.conf <<END                                 #修改zabbix_agentd.conf,添加KEY
    
    UserParameter=java.jmx.discovery[*],/etc/zabbix/externalscripts/jmx_discovery.sh
    
    UserParameter=java.Runtime.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=Runtime $2 2>&1 |grep $2 |awk '{print $NF}'
    
    UserParameter=java.Memory.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=Memory $2 2>&1 |grep $2 |awk '{print $NF}'
    
    UserParameter=java.System.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=OperatingSystem $2 2>&1 |grep $2 |awk '{print $NF}'
    
    UserParameter=java.HeapMemoryUsage.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep $2 |awk '{print $NF}'
    
    UserParameter=java.NonHeapMemoryUsage.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep $2 |awk '{print $NF}'
    
    UserParameter=java.LoadClass.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=ClassLoading $2 2>&1 |awk '{print $NF}'
    
    UserParameter=java.Threading.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:$1 java.lang:type=Threading $2 2>&1 |awk '{print $NF}'
    
    END
    

      

    三、模板制作

    根据采集的数据进行模板制作。

    四、主机上套

    五、查看最新数据

    数据图标

     

    六、参考文档和脚本地址

     https://github.com/loveqx/zabbix-doc/tree/master/zabbix-scripts/zabbix-template-tomcat

    https://blog.51cto.com/13120271/2070640

  • 相关阅读:
    Contains,Exists,Any,Count 比较是否存在某个元素
    RabbitMQ (十六) 消息队列的应用场景 (转)
    Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(四)
    RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
    RabbitMQ (十四) 普通集群
    RabbitMQ (十三) 集群+单机搭建(window)
    (转) HA的几种方案
    RabbitMQ (十二) 消息确认机制
    RabbitMQ (十一) 消息确认机制
    VIM操作
  • 原文地址:https://www.cnblogs.com/skyflask/p/11231185.html
Copyright © 2011-2022 走看看