单一实例手动部署:https://www.cnblogs.com/huangyanqi/p/8522526.html

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

背景:

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

  1. #!/bin/bash
  2.  
  3. #修改为对应的tomcat的目录
  4. t_datadir=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`
  5. tomcat_no=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`

  6. #监控的端口启始端口
  7. n_port=12345
  8.  
  9. #修改为对应的接入网卡
  10. local_ip=`ifconfig eth2 |awk -F '[ :]+' 'NR==2 {print $3}'`
  11. for tomcat in $t_datadir
  12. do
  13. m_no=`cat -n $tomcat/bin/catalina.sh|grep 'Execute The Requested Command'|awk '{print $1}'` #在该行的下边插入如下几行
  14. cp $tomcat/bin/catalina.sh $tomcat/bin/catalina.sh_bak #先备份原文件
  15. #把catalina-jmx-remote.jar放置/tmp目录下,方便拷贝
  16. cp /tmp/catalina-jmx-remote.jar $tomcat/lib/catalina-jmx-remote.jar #注意这个地方,需要把软件包拷贝到对应的目录下
  17. sed -i ''$m_no'a CATALINA_OPTS="-Dcom.sun.management.jmxremote=true' $tomcat/bin/catalina.sh #插入配置
  18. let "m_no=m_no+1" #切换到新的行
  19. sed -i ''$m_no'a -Djava.rmi.server.hostname='$local_ip'' $tomcat/bin/catalina.sh
  20. let "m_no=m_no+1"
  21. sed -i ''$m_no'a -Dcom.sun.management.jmxremote.port='$n_port'' $tomcat/bin/catalina.sh
  22. let "m_no=m_no+1"
  23. sed -i ''$m_no'a -Dcom.sun.management.jmxremote.ssl=false' $tomcat/bin/catalina.sh
  24. let "m_no=m_no+1"
  25. sed -i ''$m_no'a -Dcom.sun.management.jmxremote.authenticate=false"' $tomcat/bin/catalina.sh
  26. let "n_port=n_port+1"
  27. done

  28. #以下为测试环境添加的配置,忽略!
  29. ##server.mxl
  30. ##M_mxlfind=`find /application/tomcat*/conf/server.xml -name server.xml | awk -F "/conf/server.xml" '{print $1}'`
  31. ##Smxl_no=`find /application/tomcat*/conf/server.xml -name server.xml | awk -F "/conf/server.xml" '{print $1}'|wc -l`
  32. #for Mxl in $t_datadir
  33. #do
  34. # S_hc=`cat -n $Mxl/conf/server.xml|grep 'ThreadLocalLeakPreventionListener'|awk '{print $1}'`
  35. ## let "Smxl_no=Smxl_no+1"
  36. # cp $Mxl/conf/server.xml $Mxl/conf/server.xml_bak
  37. # sed -i ''$S_hc'a \\ <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="'$n_port'" rmiServerPortPlatform="'$n_port'"/>' $Mxl/conf/server.xml
  38. ## let "Smxl_no=Smxl_no+1"
  39. # let "n_port=n_port+1"
  40. #done
  41.  
  42. #local_ip=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $3}'`

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

  1. export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"
  2. export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=122.114.200.185"
  3. export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
  4. export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"

catalina.sh-284行

 

  3、第二个脚本

  1. [root@agent scripts]#pwd
  2. /etc/zabbix/scripts
  3. [root@localhost scripts]# vim jmx_discovery.sh
  4.  
  5. #!/bin/bash
  6. t_datadir=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'`
  7. tomcat_no=`find /usr/local/webserver/*/bin/ -name catalina.sh|awk -F "/bin/catalina.sh" '{print $1}'|wc -l`
  8. local_ip1=`ifconfig eth2 |awk -F '[ :]+' 'NR==2 {print $3}'`
  9.  
  10. n_port=
  11. i=
  12. printf '{"data":[\n'
  13.  
  14. for tomcat in $t_datadir
  15. do
  16. t_service=`echo "$tomcat"|awk -F"/" '{print $(NF)}'`
  17. if [ "$i" != ${tomcat_no} ];then
  18. printf "\t\t{ \n"
  19. printf "\t\t\t\"{#LOCAL_IP1}\":\"${local_ip1}\",\n"
  20. printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"
  21. printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n"
  22. else
  23. printf "\t\t{ \n"
  24. printf "\t\t\t\"{#LOCAL_IP1}\":\"${local_ip1}\",\n"
  25. printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n"
  26. printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n"
  27. fi
  28. let "n_port=n_port+1"
  29. let "i=i+1"
  30. done

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

效果如下:

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

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

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

注释:

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

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

其他行是key和key值

  5、其他操作

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

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

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

   6.1、agent自己测试自己

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

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

注释:必须要有返回值

  7、实例测试

  1. #重启单个Tomcat实力
  2. /application/tomcat/bin/startup.sh
  3. /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的

  1. # ----- Execute The Requested Command -----------------------------------------
  2. CATALINA_OPTS="-Dcom.sun.management.jmxremote=true
  3. -Djava.rmi.server.hostname=10.220.129.140
  4. -Dcom.sun.management.jmxremote.port=30000
  5. -Dcom.sun.management.jmxremote.ssl=false
  6. -Dcom.sun.management.jmxremote.authenticate=false"

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

  1. #!/bin/bash
  2. Server_Ip=`ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $3}'`
  3.  
  4. declare -a port_scan=()
  5. declare -i j=
  6. scan(){
  7. nc -vz -w 127.0.0.1 $ > /dev/null
  8. if [ $? -eq ];then
  9. return
  10. else
  11. return
  12. fi
  13. }
  14.  
  15. for i in `seq `
  16. do
  17. scan $i
  18. if [ $? -eq ];then
  19. # echo "j=$j"
  20. port_scan[$j]=$i
  21. j=$((j+))
  22. # echo "$i success."
  23. fi
  24. done
  25.  
  26. length=${#port_scan[@]}
  27. #printf "{\n"
  28. printf '{"data":[\n'
  29. for ((i=;i<$length;i++))
  30. do
  31. if [ $i -lt $[$length-] ];then
  32. printf "\t\t{ \n"
  33. printf "\t\t\t\"{#SERVER_IP}\":\"${Server_Ip}\",\n"
  34. printf "\t\t\t\"{#JMX_PORT}\":\"${port_scan[$i]}\"},\n"
  35. else
  36. printf "\t\t{ \n"
  37. printf "\t\t\t\"{#SERVER_IP}\":\"${Server_Ip}\",\n"
  38. printf "\t\t\t\"{#JMX_PORT}\":\"${port_scan[$i]}\"}]}\n"
  39. # if [ $i -lt $[$length-] ];then
  40. # printf ','
  41. fi
  42. done
  43. #printf "\n\t]\n"
  44. #printf "}\n"

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

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

4、测试结果:

  1. [root@zabbix-server ~]#zabbix_get -s 122.114.200.185 -p -k java.jmx.discovery
  2. {"data":[
  3. {
  4. "{#SERVER_IP}":"122.114.200.185",
  5. "{#JMX_PORT}":""},
  6. {
  7. "{#SERVER_IP}":"122.114.200.185",
  8. "{#JMX_PORT}":""}]}
  9. [root@zabbix-server ~]#zabbix_get -s 122.114.200.185 -p -k "java.HeapMemoryUsage.status[122.114.200.185,30001,used]"
  10.  
  11. [root@zabbix-server ~]#

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

zabbix之自动发现Tomcat多实例(第一种:已经部署完成,后续不再添加;第二种:后续或根据需要添加Tomcat实例)的更多相关文章

  1. zabbix使用自动发现监控esxi的磁盘存储storage

    zabbix使用自动发现监控esxi的磁盘存储storage 在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可 创建模板过程: custom.esxi. ...

  2. 【Zabbix】Zabbix Server自动发现

    Zabbix自动发现 由于有上百台的虚拟机需要监控,如果一个个去添加配置,费时费力.Zabbix的自动发现,可以自动发现需要监控的机器,监控相应指标. 前置条件 安装部署好Zabbix Server. ...

  3. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  4. 01 - zabbix | LLD自动发现

    01 - zabbix | LLD自动发现 1. 原理 zabbix支持设置变量,用{#VAR_NAME}来表示.然后有一些系统保留的变量 2. 设置 2.1 交换机电源自动发现   名字写好后进进入 ...

  5. zabbix低级自动发现之mysql多实例

    1.低级自动发现概述 zabbix的低级自动发现(LLD)适用于监控多实例,监控变化的数据(分区.网卡). 自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法.例如,Z ...

  6. zabbix监控自动发现监控tomcat(V1)

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

  7. Zabbix实现自动发现端口并监控

    1.新建客户端需要的脚本 # vim discovertcpport.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1&q ...

  8. zabbix配置自动发现,故障邮件告警

    对网段内的主机进行自动发现,自动加入主机组,自定加入template 创建动作时,类型这里选择discovery 然后将发现的主机加入host group和template: 动作针对的是discov ...

  9. zabbix自定义自动发现模板

    需求: 自定义发现磁盘io,并实现监控.其他的业务组件自动发现监控其实也和这个大同小异,自动发现主要逻辑就是你要根据组件规则自动匹配出需要监控的所有组件,再通过传参的方式获取对应组件数据. 自动发现无 ...

随机推荐

  1. EMC,EMI,EMS,ESD分别是什么?有什么区别和联系?

    一.EMC EMI EMS定义: EMC(ElectromagneticCompatibility) 电磁兼容,是指设备或系统在电磁环境中性能不降级的状态.电磁兼容,一方面要求系统内没有严重的干扰源, ...

  2. [转]VS 2010 : 如何开发和部署Outlook 2010插件(Add-in)

    本文转自:https://www.cnblogs.com/chenxizhang/archive/2010/05/08/1730766.html 概述: 这篇文章,我将通过一个简单的例子,给大家分享一 ...

  3. 监测代码执行时间之Stopwatch

    var sw = new System.Diagnostics.Stopwatch(); sw.Start(); 中间为要执行的代码 sw.Stop(); var msg = "上面操作耗时 ...

  4. APICloud APP前端框架——手机APP开发、APP制作、APP定制平台

    概述 APICloud前端框架,包括api.js和api.css.api.css处理不同平台浏览器的默认样式.api.js是一个JavaScript库.是APICloud为混合移动开发定制的轻量Jav ...

  5. win7怎么去除快捷方式的小箭头

    方式一. 新建一个txt文档把以下内容复制进去 在重命名001.bat 打开就行了 但要重启之后才有效 @ECHO OFF :MENU ECHO. ECHO. =-=-=-=-=请选择您要运行的项目= ...

  6. BG.VM--CentOS

    1. CentOS 更改IP 局域网配置: 在虚拟机的[网络]连接方式中选择:仅主机(Host-Only)网络. 路径:vim /etc/sysconfig/network-scripts/ifcfg ...

  7. VMWare开启DHCP和NAT服务(VMWare无法通过NAT上网以及和host主机通信的问题解决)

    最近在学习Hadoop,开始做一个集群.由于各个节点的IP地址需要保持不变,我决定在VMWare采用NAT的模式联网. 但是在安装Ubuntu系统的时候,提示我DHCP服务未开启. Your netw ...

  8. C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)

      核心寻峰算法的原理参考Ronny,链接:投影曲线的波峰查找, C#翻译原理代码参考sowhat4999,链接:C#翻译Matlab中findpeaks方法 前人种树,后人乘凉.感谢原作者详细的解释 ...

  9. vue 实现父组件和子组件之间的数据双向绑定

    前言:vue 实现父组件给子组件传值,然后子组件可以修改回父组件的值.vue 的 prop 默认是单向数据绑定,但是偶尔需要双向绑定,这时就需要知道如何才能让子组件的数据修改时影响到父组件的数据.转载 ...

  10. 一步一步学Python-基础篇

    1.安装 地址:https://www.python.org/downloads/windows/ 安装完成过后,配置环境变量,比如:path后面计入;C:\Python27(可能需要重启一下) 然后 ...