设为首页 收藏本站
查看: 529|回复: 0

[经验分享] ZABBIX监控一台机器上的多tomcat实例落地经验步骤

[复制链接]

尚未签到

发表于 2018-11-30 09:52:27 | 显示全部楼层 |阅读模式
  以前做过通过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 &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
      
      
      
      
      Template  for Tomcat
      Template  for Tomcat
      
      
      
      Templates
      
      
      
      
      Tomcat_内存
      
      
      Tomcat_类
      
      
      Tomcat_系统
      
      
      Tomcat_线程
      
      
      Tomcat_运行时间
      
      
      
      
      
      Tomcat Server
      0
      
      
      java.jmx.discovery
      30
      0
      
      
      
      0
      0
      
      0
      
      
      
      
      0
      
      
      
      
      
      
      0
      
      
      
      {#JMX_PORT}
      
      8
      A
      
      
      
      30
      发现查找tomcat服务
      
      
      {#JAVA_NAME} 堆内存提交值:
      0
      
      0
      
      java.HeapMemoryUsage.status[{#JMX_PORT},committed]
      30
      7
      30
      0
      3
      
      B
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      java提交内存
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME} 堆内存最大值:
      0
      
      0
      
      java.HeapMemoryUsage.status[{#JMX_PORT},max]
      30
      7
      30
      0
      3
      
      B
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      java最大使用内存
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME} 堆内存使用值:
      0
      
      0
      
      java.HeapMemoryUsage.status[{#JMX_PORT},used]
      30
      7
      30
      0
      3
      
      B
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      java使用内存
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME} 已加装当前类的数量:
      0
      
      0
      
      java.LoadClass.status[{#JMX_PORT},LoadedClassCount]
      30
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      加载的类
      0
      
      
      Tomcat_类
      
      
      
      
      
      
      
      {#JAVA_NAME} 已加载类总数:
      0
      
      0
      
      java.LoadClass.status[{#JMX_PORT},TotalLoadedClassCount]
      30
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      总共加载过的类个数
      0
      
      
      Tomcat_类
      
      
      
      
      
      
      
      {#JAVA_NAME} 已卸载类的数量:
      0
      
      0
      
      java.LoadClass.status[{#JMX_PORT},UnloadedClassCount]
      60
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      卸载回收类个数
      0
      
      
      Tomcat_类
      
      
      
      
      
      
      
      {#JAVA_NAME} 被挂起的对象的计数:
      0
      
      0
      
      java.Memory.status[{#JMX_PORT},ObjectPendingFinalizationCount]
      30
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME} 非堆内存提交值:
      0
      
      0
      
      java.NonHeapMemoryUsage.status[{#JMX_PORT},committed]
      60
      7
      30
      0
      3
      
      B
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      堆内存提交大小
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME} 非堆内存最大值:
      0
      
      0
      
      java.NonHeapMemoryUsage.status[{#JMX_PORT},max]
      60
      7
      30
      0
      3
      
      B
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      堆内存最大值
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME} 非堆内存使用值:
      0
      
      0
      
      java.NonHeapMemoryUsage.status[{#JMX_PORT},used]
      60
      7
      30
      0
      3
      
      B
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      堆内存使用大小
      0
      
      
      Tomcat_内存
      
      
      
      
      
      
      
      {#JAVA_NAME}  JVM启动时间:
      0
      
      0
      
      java.Runtime.status[{#JMX_PORT},Uptime]
      60
      7
      30
      0
      3
      
      uptime
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_运行时间
      
      
      
      
      
      
      
      {#JAVA_NAME}  JVM名称:
      0
      
      0
      
      java.Runtime.status[{#JMX_PORT},VmName]
      30
      7
      0
      0
      4
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_运行时间
      
      
      
      
      
      
      
      {#JAVA_NAME}  JVM版本:
      0
      
      0
      
      java.Runtime.status[{#JMX_PORT},VmVersion]
      60
      7
      0
      0
      1
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_运行时间
      
      
      
      
      
      
      
      {#JAVA_NAME} 系统可打开最大打开文件数:
      0
      
      0
      
      java.System.status[{#JMX_PORT},MaxFileDescriptorCount]
      60
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_系统
      
      
      
      
      
      
      
      {#JAVA_NAME} 系统应用当前打开文件数:
      0
      
      0
      
      java.System.status[{#JMX_PORT},OpenFileDescriptorCount]
      60
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_系统
      
      
      
      
      
      
      
      {#JAVA_NAME} 系统平均负载:
      0
      
      0
      
      java.System.status[{#JMX_PORT},SystemLoadAverage]
      60
      7
      30
      0
      0
      
      %
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_系统
      
      
      
      
      
      
      
      {#JAVA_NAME} 守护程序线程数:
      0
      
      0
      
      java.Threading.status[{#JMX_PORT},DaemonThreadCount]
      30
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      
      0
      
      
      Tomcat_线程
      
      
      
      
      
      
      
      {#JAVA_NAME} 线程峰值数:
      0
      
      0
      
      java.Threading.status[{#JMX_PORT},PeakThreadCount]
      60
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      活动线程峰值个数
      0
      
      
      Tomcat_线程
      
      
      
      
      
      
      
      {#JAVA_NAME} 活动线程计数:
      0
      
      0
      
      java.Threading.status[{#JMX_PORT},ThreadCount]
      60
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      运行tomcat的活动线程
      0
      
      
      Tomcat_线程
      
      
      
      
      
      
      
      {#JAVA_NAME} 启动的线程总数:
      0
      
      0
      
      java.Threading.status[{#JMX_PORT},TotalStartedThreadCount]
      30
      7
      30
      0
      3
      
      
      0
      
      
      0
      0
      
      0
      
      1
      
      
      
      0
      0
      
      
      
      
      
      线程总个数
      0
      
      
      Tomcat_线程
      
      
      
      
      
      
      
      
      
      {Template  for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},used].last()}>({Template  for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},max].last()}*0.7)
      {#JAVA_NAME} 堆内存使用率超过70%
      
      0
      1
      
      0
      
      
      
      {Template  for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},committed].last()}={Template  for Tomcat:java.HeapMemoryUsage.status[{#JMX_PORT},max].last()}
      {#JAVA_NAME} 堆内存提交值达到最大限制.
      
      1
      1
      
      0
      
      
      
      {Template  for Tomcat:java.System.status[{#JMX_PORT},SystemLoadAverage].last()}>50
      {#JAVA_NAME} 当前应用占用系统负载大于50%
      
      0
      1
      
      0
      
      
      
      {Template  for Tomcat:java.System.status[{#JMX_PORT},OpenFileDescriptorCount].last()}>({Template  for Tomcat:java.System.status[{#JMX_PORT},MaxFileDescriptorCount].last()}*0.7)
      {#JAVA_NAME} 当前应用打开文件数已占用系统最大70%
      
      0
      1
      
      0
      
      
      
      {Template  for Tomcat:java.NonHeapMemoryUsage.status[{#JMX_PORT},used].last()}>({Template  for Tomcat:java.NonHeapMemoryUsage.status[{#JMX_PORT},max].last()}*0.7)
      {#JAVA_NAME} 非堆内存使用率超过70%
      
      0
      1
      
      0
      
      
      
      
      
      堆对象内存状态:{#JAVA_NAME}
      900
      200
      0.0000
      100.0000
      1
      1
      0
      1
      0
      0.0000
      0.0000
      0
      0
      0
      0
      
      
      0
      0
      00C800
      0
      2
      0
      
      Template  for Tomcat
      java.HeapMemoryUsage.status[{#JMX_PORT},committed]
      
      
      
      1
      0
      C80000
      0
      2
      0
      
      Template  for Tomcat
      java.HeapMemoryUsage.status[{#JMX_PORT},max]
      
      
      
      2
      0
      0000C8
      0
      2
      0
      
      Template  for Tomcat
      java.HeapMemoryUsage.status[{#JMX_PORT},used]
      
      
      
      
      
      类状态:{#JAVA_NAME}
      900
      200
      0.0000
      100.0000
      1
      1
      0
      1
      0
      0.0000
      0.0000
      0
      0
      0
      0
      
      
      0
      0
      00C800
      0
      2
      0
      
      Template  for Tomcat
      java.LoadClass.status[{#JMX_PORT},UnloadedClassCount]
      
      
      
      1
      0
      C80000
      0
      2
      0
      
      Template  for Tomcat
      java.LoadClass.status[{#JMX_PORT},LoadedClassCount]
      
      
      
      2
      0
      0000C8
      0
      2
      0
      
      Template  for Tomcat
      java.LoadClass.status[{#JMX_PORT},TotalLoadedClassCount]
      
      
      
      
      
      系统打开文件系统数:{#JAVA_NAME}
      900
      200
      0.0000
      100.0000
      1
      1
      0
      1
      0
      0.0000
      0.0000
      0
      0
      0
      0
      
      
      0
      0
      1A7C11
      0
      2
      0
      
      Template  for Tomcat
      java.System.status[{#JMX_PORT},MaxFileDescriptorCount]
      
      
      
      1
      0
      F63100
      0
      2
      0
      
      Template  for Tomcat
      java.System.status[{#JMX_PORT},OpenFileDescriptorCount]
      
      
      
      2
      0
      2774A4
      0
      2
      0
      
      Template  for Tomcat
      java.System.status[{#JMX_PORT},SystemLoadAverage]
      
      
      
      
      
      线程状态:{#JAVA_NAME}
      900
      200
      0.0000
      100.0000
      1
      1
      0
      1
      0
      0.0000
      0.0000
      0
      0
      0
      0
      
      
      0
      0
      00C800
      0
      2
      0
      
      Template  for Tomcat
      java.Threading.status[{#JMX_PORT},ThreadCount]
      
      
      
      1
      0
      C80000
      0
      2
      0
      
      Template  for Tomcat
      java.Threading.status[{#JMX_PORT},PeakThreadCount]
      
      
      
      2
      0
      0000C8
      0
      2
      0
      
      Template  for Tomcat
      java.Threading.status[{#JMX_PORT},TotalStartedThreadCount]
      
      
      
      
      
      非堆对象内存状态:{#JAVA_NAME}
      900
      200
      0.0000
      100.0000
      1
      1
      0
      1
      0
      0.0000
      0.0000
      0
      0
      0
      0
      
      
      0
      0
      1A7C11
      0
      2
      0
      
      Template  for Tomcat
      java.NonHeapMemoryUsage.status[{#JMX_PORT},used]
      
      
      
      1
      0
      F63100
      0
      2
      0
      
      Template  for Tomcat
      java.NonHeapMemoryUsage.status[{#JMX_PORT},committed]
      
      
      
      2
      0
      2774A4
      0
      2
      0
      
      Template  for Tomcat
      java.NonHeapMemoryUsage.status[{#JMX_PORT},max]
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    然后等5分钟左右,一主机N实例监控tomcat完成,拿走不谢!注意根据实际路径修改!有人说出现导入模板不支持的情况:
    第一步:检查key文件脚本路径和自定义键值
    第二步:检查/lib下是否有cmdline-jmxclient-0.10.3.jar包
    到此如有问题请点个赞,然后留言解答。
                                                                 name:系统运维工程师 李超!

      






  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-641452-1-1.html 上篇帖子: tomcat 开启远程debug 下篇帖子: 利用tomcat搭建jsp开源内容管理系统
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表