【zabbix】利用LLD自动发现功能监控多Tomcat实例

2 篇文章 0 订阅
1 篇文章 0 订阅

有更新,见:

https://github.com/qiueer/zabbix/tree/master/All%20In%20One


背景

zabbix监控平台自带的JVMTomcat监控模板存在如下缺陷:

1)每台主机需配置独立的JMX interface,如果运行java(或tomcat)实例的主机数量比较多,配置起来耗时耗力,略显傻比;

2)因每台主机的监控项有唯一性限制,如果一台主机运行有多个java(或tomcat)实例,则需多配置相同的主机,响应配置多个JMX interface,纯手工活,这与运维自动化的理念相去甚远;

3tomcat的监控模板只监控业务端口为8080tomcat实例,限制太死,不够灵活;

4)需要另外安装、配置zabbix java gateway插件;


解决方案

利用zabbix低级别自动发现功能(LLD),编写数据采集脚本,改造zabbix自带的模板,通过Discovery自动发现jmx端口,并自动增加监控。


工具套件

https://github.com/qiueer/zabbix/tree/master/Tomcat,其中:

cmdline-jmxclient-0.10.3.jar:基础工具,主要是用这东东来采集数据;

Qiueer-Template JMX Generic.xml JVM监控模板,主要监控JVM,监控JVM内存使用情况、GC情况等;

Qiueer-Template JMX Tomcat With IO-NIO.xml tomcat监控模板,监控IO模型为NIOtomcat实例;

Qiueer-Template JMX Tomcat With IO-BIO.xml tomcat监控模板,监控IO模型为BIOtomcat实例;

Qiueer-Template JMX Tomcat With IO-APR.xml tomcat监控模板,监控IO模型为APRtomcat实例;

jvm.py JVM运行数据采集脚本;

tomcat.py tomcat运行数据采集脚本;


使用方法

1)调整java进程启动参数

I)如果仅监控非tomcat类型的java进程,需在启动参数中加入如下:

-Dcom.sun.management.jmxremote.port=${jmxport} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote

其中,jmxportjmx监控端口

II)监控tomcat实例,则需修改catalina.sh,开启remotejmx支持,方法是在catalina.sh中加入如下脚本(根据实际情况修改jmxport/ip变量):

jmxport=13080

ip=localhost

CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.port=${jmxport} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=${ip} -Dcom.sun.management.jmxremote"

PS:如果一台主机上部署了多个tomcat实例,为了便于辨认,jmxport的取值建议根据规则设定,例如在业务端口的基础上加上5000

III)修改tomcat配置文件权限,让运行zabbix agent的用户有只读权限:

chmod 644 server.xml

2)部署脚本及依赖

cmdline-jmxclient-0.10.3.jarjvm.pytomcat.py拷贝到/usr/local/zabbix/lib/jvm目录

3zabbix_agent.conf配置文件中需包含如下配置,注意脚本的位置:

## JVM

UserParameter=jmx.jvm.discovery, python /usr/local/zabbix/lib/jvm/jvm.py --list

UserParameter=jmx.jvm.item[*],python /usr/local/zabbix/lib/jvm/jvm.py -b $1 -k $2 -p $3

## Tomcat

UserParameter=jmx.tomcat.discovery, python /usr/local/zabbix/lib/jvm/tomcat.py --list

UserParameter=jmx.tomcat.item[*],python /usr/local/zabbix/lib/jvm/tomcat.py -b $1 -k $2 -p $3

4)配置完成后,重启zabbix agent,例如:

service  zabbix-agent restart

5)配置模板,在zabbix前端进行:

如果仅监控JVM,使用Qiueer-Template JMX Generic.xml模板即可;

如果监控tomcat,使用Qiueer-Template JMX Generic.xmlQiueer-Template JMX Tomcat With IO-NIO.xmlQiueer-Template JMX Tomcat With IO-BIO.xmlQiueer-Template JMX Tomcat With IO-APR.xml其中一个即可,使用哪一个tomcat监控模板,根据tomcat配置的IO类型决定;

PS

3)、4)步骤中的路劲/usr/local/zabbix/lib/jvm根据实际情况修改


使用示例

1)获取jmxport列表

$ python jvm.py --list

{

      "data":[

              {

                    "{#JVMPORT}":13080,

                    "{#PID}":4199,

                    "{#RUNUSER}":"qiueer"

              }

      ]

}

2)采集数据

$ python jvm.py -b 'java.lang:type=Memory' -k 'HeapMemoryUsage.committed' -p 13080

58195968

3tomcat数据获取,同理


其他

## JVM监控,使用解析如下的命令的输出来获取jmxport

ps -ef | grep 'jmxremote.port=' | grep -v grep 2>/dev/null

## TOMCAT监控,使用解析如下的命令的输出来获取jmxport

ps -ef | grep tomcat | grep 'jmxremote.port=' | grep -v grep 2>/dev/null


效果图


(latest data)



(graphic)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 44
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值