說明
何為自動(dòng)發(fā)現(xiàn)?首先我們監(jiān)控多tomcat實(shí)例,如果一個(gè)個(gè)實(shí)例地添加或許可以完成當(dāng)前需求。但是日后隨著實(shí)例的增多,再手動(dòng)一個(gè)個(gè)去添加就十分不方便了。這時(shí)候需要自動(dòng)發(fā)現(xiàn)這個(gè)功能,來幫助我們自動(dòng)添加監(jiān)控tomcat實(shí)例。本文就以監(jiān)控tomcat線程為例,來實(shí)現(xiàn)這個(gè)自動(dòng)發(fā)現(xiàn)的功能。這里zabbix版本為3.0。
創(chuàng)建自動(dòng)發(fā)現(xiàn)腳本
可以理解為這個(gè)腳本能夠打印出當(dāng)前服務(wù)器上所有的tomcat實(shí)例名稱。zabbix會(huì)定期執(zhí)行這個(gè)腳本,做到自動(dòng)發(fā)現(xiàn)當(dāng)前所有的tomcat實(shí)例,腳本放在zabbix-agent安裝路徑的scripts目錄下。而下一步就是給找到的tomcat實(shí)例添加所需要監(jiān)控的值。下面先看腳本:
# cat discover_jvm.py#!/usr/bin/python2.7 #Usage: discover tomcat_app#Last Modified: import subprocessimport json#args為自己定義查找項(xiàng)目名字的方式,由于各自部署方式的不同,這里需要根據(jù)實(shí)際情況來寫命令。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可識(shí)別的json格式print json.dumps({'data':apps},indent=4,separators=(',',':'))
執(zhí)行打印結(jié)果如下所示:
# chmod a+x discover_jvm.py 賦予執(zhí)行權(quán)限# chown zabbix:zabbix discover_jvm.py 添加屬主為zabbix用戶# ./discover_jvm.py { "data":[ { "{#APP_NAME}":"app1" }, { "{#APP_NAME}":"app2" } ]}這里打印出app1、app2兩個(gè)實(shí)例,以后要是有其他實(shí)例,也能夠同樣打印出來。