当一台主机上面需要添加多个监控项,可以将监控项的键值设置成变量,设置自动发现规则,让zabbix识别出变量,然后添加给主机即可。
1.监控tomcat,通过监控tomcat状态页来达到监控目的:https://blog.csdn.net/b296405422/article/details/88393100
2.获取状态页的参数,通过python2.7的urllib2库来爬取参数(python3用urllib.request):
#vim mon_tomcat.py
#chmod +x mon_tomcat.py
#!/usr/bin/python
#-*-coding:utf8-*-
import urllib2
import xml.dom.minidom
import sys
url = 'http://10.0.0.127:'+sys.argv[1]+'/manager/status?XML=true'
#url = 'http://10.0.0.127:8080/manager/status?XML=true'
username = 'tomcat'
password = 's3cret'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(url)
xmlData = pagehandle.read()
doc = xml.dom.minidom.parseString(xmlData)
item =sys.argv[2]
if item == "memory.free":
print doc.getElementsByTagName("memory")[0].getAttribute("free")
elif item == "memory.total":
print doc.getElementsByTagName("memory")[0].getAttribute("total")
elif item == "memory.max":
print doc.getElementsByTagName("memory")[0].getAttribute("max")
elif item == "threadInfo.maxThreads":
print doc.getElementsByTagName("threadInfo")[0].getAttribute("maxThreads")
elif item == "threadInfo.currentThreadCount":
print doc.getElementsByTagName("threadInfo")[0].getAttribute("currentThreadCount")
elif item == "threadInfo.currentThreadsBusy":
print doc.getElementsByTagName("threadInfo")[0].getAttribute("currentThreadsBusy")
elif item == "requestInfo.maxTime":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("maxTime")
elif item == "requestInfo.processingTime":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("processingTime")
elif item == "requestInfo.requestCount":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("requestCount")
elif item == "requestInfo.errorCount":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("errorCount")
elif item == "requestInfo.bytesReceived":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("bytesReceived")
elif item == "requestInfo.bytesSent":
print doc.getElementsByTagName("requestInfo")[0].getAttribute("bytesSent")
else:
print "unsupport item."
3.配置UserParameter:
UserParameter=tomcat.statu[*],/etc/zabbix/mon_tomcat.py $1 $2
($1,$2代表tomcat.statu[*]里面的参数,交给mon_tomcat.py处理,得出的数据就是监控值)
4.重启agent,#systemctl restart zabbix-agent.service
测试主动模式:
#zabbix -s 10.0.0.127 -k tomcat.statu[8080,memory.free]
5.到这里,如果我们去web添加监控项,需要一个个添加,接下来是进行批量添加监控项:
5.11首先要了解到zabbix是可识别json的数据格式的,所以我们要编写脚本设置变量并且输出为json格式:
将mon_tomcat.py里面的监控项设置一个变量,并且输出为josn格式让zabbix识别
#vim test.py
#chmod +x test.py
`#!/usr/bin/env python
#-*-coding:utf8-*-
import json
import sys
def get_ip():
#将Python的格式转换为json格式
a={
"data":[
{"{#ITEM}":"threadInfo.maxThreads"},
{"{#ITEM}":"threadInfo.currentThreadCount"},
{"{#ITEM}":"threadInfo.currentThreadsBusy"},
{"{#ITEM}":"requestInfo.maxTime"},
{"{#ITEM}":"requestInfo.processingTime"},
{"{#ITEM}":"requestInfo.requestCount"},
{"{#ITEM}":"requestInfo.errorCount"},
{"{#ITEM}":"requestInfo.bytesReceived"},
{"{#ITEM}":"requestInfo.bytesSent"},
]
}
print (json.dumps(a,sort_keys=True,indent=2))
get_ip()
这里已经设置好的监控项键值为变量:{#ITEM}
(必须是大写字母)
5.2再添加配置UserParamete:
UserParameter=test.discover,/etc/zabbix/test.py
重启agent,#systemctl restart zabbix-agent.service
6.到配置web界面
通过以下大概的过程:
配置–模板–自动发现规则–监控原型–选择主机–模板–链接的模板
(注意web页面的“自动发现”和“自动发现规则”是不同的)
A:
B:
C:
D:
E:
F:
G:
H: