以前做过通过jmx监控单个tomcat实例,但是有的时候公司一台服务器上有10个tomcat容器那怎么办呢,来吧往下看吧


1,注意操作文件路径:

zabbix安装路径; /data/zabbix/etc/zabbix_agentd.conf.d/jmx_discovery.sh 

/etc/zabbix/zabbix_agentd.conf 配置文件中 UnsafeUserParameters=1 必须打开,否则模板的自动发现功能报错。


该模板的监控和触发属性在自动发现中配置,所以导入模板后,下属的监控项和触发器等都为空。需要等一会儿,数据等还会出来。



操作步骤:
1、上传 catalina-jmx-remote.jar,cmdline-jmxclient-0.10.3.jar到 /lib下jmx_discovery.sh 和 add_service_tomcat.sh 到 /data/zabbix/etc/zabbix_agentd.conf.d/目录下

2、给 add_service_tomcat.sh 赋执行权限,并执行

3、zabbix服务端对主机添加模版


脚本说明:
add_service_tomcat.sh

#!/bin/bash                                       

 


#因为lunix版本的及命令格式等问题,上面两句不一定能得到正确路径,所以用下面两句替换上面两行,各自改下你们安装tomcat的路径即可。

t_datadir=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`      

tomcat_no=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`

 

 

n_port=9999                                                                                #配置监控初始端口

local_ip=`ifconfig em4 |awk -F '[ :]+' 'NR==2 {print $4}'`                                 #提取主机IP

for tomcat in $t_datadir

do

    m_no=`cat -n $tomcat/bin/catalina.sh|grep 'Execute The Requested Command'|awk '{print $1}'`    #提取代码插入位置

    cp $tomcat/bin/catalina.sh  $tomcat/bin/catalina.sh_bak                                        #备份catalina.sh

    #cp /tmp/catalina-jmx-remote.jar  $tomcat/lib/catalina-jmx-remote.jar                           #复制文件到实例lib目录

    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"'  $tomcat/bin/catalina.sh                        #插入监控配置

    let "m_no=m_no+1"                                                                                                                      #设置行号

    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname='$local_ip'"' $tomcat/bin/catalina.sh                 #插入监控配置

    let "m_no=m_no+1"                                                                                                                      #设置行号

    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port='$n_port'"' $tomcat/bin/catalina.sh          #插入监控配置

    let "m_no=m_no+1"                                                                                                                      #设置行号

    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"' $tomcat/bin/catalina.sh               #插入监控配置

    let "m_no=m_no+1"                                                                                                                      #设置行号

    sed -i ''$m_no'a export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"' $tomcat/bin/catalina.sh      #插入监控配置

    let "n_port=n_port+1"

done

 

local_ip=`ifconfig em4 |awk -F '[ :]+' 'NR==2 {print $4}'`                 #提取主机IP

 

cat >> /data/zabbix/zabbix_agentd.conf.d/tomcat.conf <

UserParameter=java.jmx.discovery[*],/data/zabbix/etc/zabbix_agentd.conf.d/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

chmod +x /data/zabbix/etc/zabbix_agentd.conf.d/jmx_discovery.sh 然后执行脚本

jmx_discovery.sh:


#!/bin/bash

#因为lunix版本的及命令格式等问题,上面两句不一定能得到正确路径,所以用下面两句替换上面两行,各自改下你们安装tomcat的路径即可。

t_datadir=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`       

tomcat_no=`find /data/tomcat*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`

 

n_port=9999                                                                                #配置监控初始端口

i=1

printf '{"data":[\n'

 

for tomcat in $t_datadir                                                                    #输出JSON文件

do

    t_service=`echo "$tomcat"|awk -F"/" '{print $(NF)}'`

    if [ "$i" != ${tomcat_no} ];then

        printf "\t\t{ \n"

        printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"

        printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n"

    else

        printf "\t\t{ \n"

        printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"

        printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n"

    fi

    let "n_port=n_port+1"

    let "i=i+1"

done



tomcat监控模板如下:


 

 

    3.0  

    2016-06-08T01:26:24Z  

     

         

            Templates  

         

     

     

         

     

然后等5分钟左右,一主机N实例监控tomcat完成,拿走不谢!注意根据实际路径修改!有人说出现导入模板不支持的情况:

第一步:检查key文件脚本路径和自定义键值

第二步:检查/lib下是否有cmdline-jmxclient-0.10.3.jar包

到此如有问题请点个赞,然后留言解答。

                                                             name:系统运维工程师 李超!