zabbix批量自动监控实例,tomcat实例

当一台主机上面需要添加多个监控项,可以将监控项的键值设置成变量,设置自动发现规则,让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:
zabbix批量自动监控实例,tomcat实例_第1张图片
B:
zabbix批量自动监控实例,tomcat实例_第2张图片
C:
zabbix批量自动监控实例,tomcat实例_第3张图片
D:zabbix批量自动监控实例,tomcat实例_第4张图片
E:zabbix批量自动监控实例,tomcat实例_第5张图片
F:zabbix批量自动监控实例,tomcat实例_第6张图片
G:zabbix批量自动监控实例,tomcat实例_第7张图片
H:zabbix批量自动监控实例,tomcat实例_第8张图片

你可能感兴趣的:(zabbix,tomcat)