博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zabbix之自动发现Tomcat多实例(第一种:已经部署完成,后续不再添加;第二种:后续或根据需要添加Tomcat实例)...
阅读量:7222 次
发布时间:2019-06-29

本文共 9462 字,大约阅读时间需要 31 分钟。

 单一实例手动部署:

注释:参考的一位博主的博客后续做的修改,那个博主的网址找不到了!!!!

 

背景:

1、每台测试机上已经有十几个tomcat实例,需要添加tomcat的监控端口,监控端口12345后记累加计算;

2、后续会加新服务器开新的tomcat实例,规划tomcat的监控端口为:30000~300300;

主要应对多实例(第一种情况)

约定:

  zbbix配置文件:/etc/zabbix/

  脚本文件:/etc/zabbix/scripts/

      其他文件:/tmp/

  1、下载catalina-jmx-remote.jar

放置到/tmp/目录下:(需墙)

下载地址:http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.30/bin/extras/catalina-jmx-remote.jar

  2、第一个脚本

cd /etc/zabbix/scripts

vim add_service_tomcat.sh

#!/bin/bash #修改为对应的tomcat的目录                                      t_datadir=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`      tomcat_no=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l` #监控的端口启始端口n_port=12345 #修改为对应的接入网卡local_ip=`ifconfig eth2 |awk -F '[ :]+' 'NR==2 {print $3}'` for tomcat in $t_datadirdo    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-jmx-remote.jar放置/tmp目录下,方便拷贝    cp /tmp/catalina-jmx-remote.jar  $tomcat/lib/catalina-jmx-remote.jar  #注意这个地方,需要把软件包拷贝到对应的目录下    sed -i ''$m_no'a CATALINA_OPTS="-Dcom.sun.management.jmxremote=true'  $tomcat/bin/catalina.sh     #插入配置    let "m_no=m_no+1"                                                                                 #切换到新的行    sed -i ''$m_no'a -Djava.rmi.server.hostname='$local_ip'' $tomcat/bin/catalina.sh    let "m_no=m_no+1"    sed -i ''$m_no'a -Dcom.sun.management.jmxremote.port='$n_port'' $tomcat/bin/catalina.sh    let "m_no=m_no+1"    sed -i ''$m_no'a -Dcom.sun.management.jmxremote.ssl=false' $tomcat/bin/catalina.sh    let "m_no=m_no+1"    sed -i ''$m_no'a -Dcom.sun.management.jmxremote.authenticate=false"' $tomcat/bin/catalina.sh    let "n_port=n_port+1"         done #以下为测试环境添加的配置,忽略! ##server.mxl##M_mxlfind=`find /application/tomcat*/conf/server.xml -name server.xml | awk -F "/conf/server.xml" '{print $1}'`##Smxl_no=`find /application/tomcat*/conf/server.xml -name server.xml | awk -F "/conf/server.xml" '{print $1}'|wc -l`#for Mxl in $t_datadir#do#    S_hc=`cat -n $Mxl/conf/server.xml|grep 'ThreadLocalLeakPreventionListener'|awk '{print $1}'`##    let "Smxl_no=Smxl_no+1" #    cp $Mxl/conf/server.xml $Mxl/conf/server.xml_bak#    sed -i ''$S_hc'a \\ 
' $Mxl/conf/server.xml## let "Smxl_no=Smxl_no+1" # let "n_port=n_port+1"#done #local_ip=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $3}'`

 注释:脚本的主要目的是,逐一修改每个Tomcat实例的/bin/catalina.sh文件;只需执行一次即可;分别添加如下内容

export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=122.114.200.185"export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
catalina.sh-284行

  

  3、第二个脚本

[root@agent scripts]#pwd/etc/zabbix/scripts[root@localhost scripts]# vim jmx_discovery.sh #!/bin/basht_datadir=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`tomcat_no=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`local_ip1=`ifconfig eth2 |awk -F '[ :]+' 'NR==2 {print $3}'`n_port=12345i=1printf '{"data":[\n'for tomcat in $t_datadirdo    t_service=`echo "$tomcat"|awk -F"/" '{print $(NF)}'`    if [ "$i" != ${tomcat_no} ];then        printf "\t\t{ \n"        printf "\t\t\t\"{#LOCAL_IP1}\":\"${local_ip1}\",\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\"{#LOCAL_IP1}\":\"${local_ip1}\",\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

注释:输出json格式的数据。

效果如下:

 

   4、zabbix_agentd.conf 添加如下内容:

#Tomcat UnsafeUserParameters=1UserParameter=java.jmx.discovery,/etc/zabbix/scripts/jmx_discovery.sh#UserParameter=java.Runtime.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Runtime \$3 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.Memory.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Memory \$3 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.System.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=OperatingSystem \$3 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.HeapMemoryUsage.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.NonHeapMemoryUsage.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.LoadClass.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=ClassLoading \$3 2>&1 |awk '{print $NF}'UserParameter=java.Threading.status[*],/usr/local/jdk1.8/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Threading \$3 2>&1 |awk '{print $NF}'

 如有其他监控的项,可以按此方式添加即可,注意模板也要更改哦!

 注释:

第一行是开启接受自定义的变量;

第二行是给zabbix-server模板使用的变量宏,在模板中定义key的变量。

其他行是key和key值

 

   5、其他操作

#权限设置 chmod +s /usr/bin/findchmod 550 /etc/zabbix/scripts/jmx_discovery.sh chown zabbix.zabbix /etc/zabbix/scripts/ #重启agent服务systemctl restart zabbix-agent.service systemctl enable zabbix-agent.service

 

   6、server端测试agent端设置是否成功

zabbix_get -s 122.114.100.15 -p 10050 -k java.jmx.discovery zabbix_get -s 122.114.100.15 -p 10050 -k "java.HeapMemoryUsage.status[122.114.100.15,12345,used]"   #必须要有返回值

 

    6.1、agent自己测试自己

[root@localhost ~]# java -jar /lib/cmdline-jmxclient-0.10.3.jar - 120.120.19.14:12345 java.lang:type=Runtime Uptime 2>&1 |grep Uptime |awk '{print $NF}'183465827

 java -jar /lib/cmdline-jmxclient-0.10.3.jar - 120.120.19.14:12345 java.lang:type=Memory HeapMemoryUsage 

 

注释:必须要有返回值

 

  7、实例测试

#重启单个Tomcat实力/application/tomcat/bin/startup.sh/application/tomcat/bin/shutdown.sh

 

 

  8、模板3.0以上的

链接:https://pan.baidu.com/s/1u5EOlT9jReTkuGPxZOb1ng 密码:ddpt

注释:导入到zabbix3.0以上的server中,套到相关主机撒上即可

   9、其他故障问题

  10、一个成功的栗子!

 

 

有规划的添加tomcat(第二种情况)

1、还是在#vim  /application/tomcat8_1/bin/catalina.sh的

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

 

2、/etc/zabbix/scripts/prot.sh内容如下

#!/bin/bashServer_Ip=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $3}'`declare -a port_scan=()declare -i j=0scan(){  nc -vz -w 1 127.0.0.1 $1 2> /dev/null  if [ $? -eq 0 ];then    return 0  else    return 1  fi}for i in `seq 30000 30010`do  scan $i  if  [ $? -eq 0 ];then#    echo "j=$j"    port_scan[$j]=$i    j=$((j+1))#    echo "$i success."  fidonelength=${#port_scan[@]}#printf "{\n"printf '{"data":[\n'for ((i=0;i<$length;i++))do    if [ $i -lt $[$length-1] ];then       printf "\t\t{ \n"        printf "\t\t\t\"{#SERVER_IP}\":\"${Server_Ip}\",\n"       printf "\t\t\t\"{#JMX_PORT}\":\"${port_scan[$i]}\"},\n"  else       printf "\t\t{ \n"       printf "\t\t\t\"{#SERVER_IP}\":\"${Server_Ip}\",\n"       printf "\t\t\t\"{#JMX_PORT}\":\"${port_scan[$i]}\"}]}\n"#         if [ $i -lt $[$length-1] ];then#                 printf ','        fidone#printf  "\n\t]\n"#printf "}\n"

 

 

3、#vim /etc/zabbix/zabbix_agentd.conf

#TomcatUserParameter=java.jmx.discovery,/etc/zabbix/scripts/prot.shUserParameter=java.Runtime.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Runtime \$3 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.Memory.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Memory \$3 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.System.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=OperatingSystem \$3 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.HeapMemoryUsage.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.NonHeapMemoryUsage.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep \$3 |awk '{print $NF}'UserParameter=java.LoadClass.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=ClassLoading \$3 2>&1 |awk '{print $NF}'UserParameter=java.Threading.status[*],/application/jdk/bin/java -jar /lib/cmdline-jmxclient-0.10.3.jar - $1:\$2 java.lang:type=Threading \$3 2>&1 |awk '{print $NF}'

 

 

4、测试结果:

[root@zabbix-server ~]#zabbix_get -s 122.114.200.185  -p 10050 -k java.jmx.discovery{
"data":[ { "{#SERVER_IP}":"122.114.200.185", "{#JMX_PORT}":"30001"}, { "{#SERVER_IP}":"122.114.200.185", "{#JMX_PORT}":"30002"}]}[root@zabbix-server ~]#zabbix_get -s 122.114.200.185 -p 10050 -k "java.HeapMemoryUsage.status[122.114.200.185,30001,used]" 15899208[root@zabbix-server ~]#

 

 

5、zabbix模板(各位根据上班的模板修改下对应的宏)

 

转载于:https://www.cnblogs.com/huangyanqi/p/9243085.html

你可能感兴趣的文章
awk 文本处理
查看>>
【JSConf EU 2018】主题总结 (部分主题已有中文文章)
查看>>
JavaScript面向对象名词详解
查看>>
Java设计模式学习 - 责任链模式
查看>>
JVM,DVM,ART
查看>>
webgl滤镜--会呼吸的痛
查看>>
用Go语言实现微信支付SDK
查看>>
oauth2在php实践
查看>>
LeetCode.914 卡牌分组
查看>>
填坑app:compileDebugJavaWithJavac
查看>>
Android 100+行实现本地跳一跳辅助(不需要连接电脑)
查看>>
位状态的使用
查看>>
面试技术题笔记
查看>>
Myth源码解析系列之一-项目简介
查看>>
JS易混淆的方法整理
查看>>
iOS下JS与OC互相调用(八)--Cordova详解+实战
查看>>
七牛实时音视频云视频连线demo(web部分)
查看>>
Netty源码分析(六):SelectedSelectionKeySetSelector
查看>>
forEach,for...of,map与asycn/await
查看>>
springboot 2 Hikari 多数据源配置问题(dataSourceClassName or jdbcUrl is required)
查看>>