说明
何为自动发现?首先我们监控多tomcat实例,如果一个个实例地添加或许可以完成当前需求。但是日后随着实例的增多,再手动一个个去添加就十分不方便了。这时候需要自动发现这个功能,来帮助我们自动添加监控tomcat实例。本文就以监控tomcat线程为例,来实现这个自动发现的功能。这里zabbix版本为3.0。
创建自动发现脚本
可以理解为这个脚本能够打印出当前服务器上所有的tomcat实例名称。zabbix会定期执行这个脚本,做到自动发现当前所有的tomcat实例,脚本放在zabbix-agent安装路径的scripts目录下。而下一步就是给找到的tomcat实例添加所需要监控的值。下面先看脚本:
# cat discover_jvm.py#!/usr/bin/python2.7 #Usage: discover tomcat_app#Last Modified: import subprocessimport json#args为自己定义查找项目名字的方式,由于各自部署方式的不同,这里需要根据实际情况来写命令。args="find /opt/app/applications -name 'catalina.properties' | sort -n | uniq | awk -F'/' '{print $5}'"t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0] apps=[]for app in t.split('\n'): if len(app) != 0: apps.append({'{#APP_NAME}':app})#打印出zabbix可识别的json格式print json.dumps({'data':apps},indent=4,separators=(',',':'))
执行打印结果如下所示:
# chmod a+x discover_jvm.py 赋予执行权限# chown zabbix:zabbix discover_jvm.py 添加属主为zabbix用户# ./discover_jvm.py { "data":[ { "{#APP_NAME}":"app1" }, { "{#APP_NAME}":"app2" } ]}这里打印出app1、app2两个实例,以后要是有其他实例,也能够同样打印出来。