IP+端口作为监控的对象,对多台服务器的多个端口批量增加监控项,并配置对应的触发器
- #!/usr/local/bin/python
- # coding:utf-8
-
- import json
- import urllib2
- from urllib2 import URLError
- import sys
- import xlrd
- import getpass
- import time
- import datetime
- import xlsxwriter
-
- reload(sys)
- sys.setdefaultencoding('utf-8')
-
-
-
- class ZabbixTools:
- def __init__(self):
- self.url = 'http://192.168.243.99//zabbix/api_jsonrpc.php'
-
- self.header = {'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0',
- "Content-Type": "application/json"}
-
- def user_login(self):
- data = json.dumps({
- "jsonrpc": "2.0",
- "method": "user.login",
- "params": {
- "user": "Admin",
- "password": "zabbix"
-
- },
- "id": 0
- })
-
- request = urllib2.Request(self.url, data)
- for key in self.header:
- request.add_header(key, self.header[key])
-
- try:
- result = urllib2.urlopen(request)
- except URLError as e:
- print("Auth Failed, please Check your name and password:", e.code)
- else:
- response = json.loads(result.read())
- result.close()
- self.authID = response['result']
- return self.authID
-
-
-
-
-
-
-
- def host_getbyip(self,hostip):
- data = json.dumps({
- "jsonrpc":"2.0",
- "method":"host.get",
- "params":{
- "output":["hostid","name","status","available","proxy_hostid"],
- "filter": {"ip": hostip}
- },
- #"auth":self.user_login(),
- "auth": self.authID,
- "id":1,
- })
-
- request = urllib2.Request(self.url, data)
- for key in self.header:
- request.add_header(key, self.header[key])
-
-
- try:
- result = urllib2.urlopen(request)
- except URLError as e:
- if hasattr(e, 'reason'):
- print 'We failed to reach a server.'
- print 'Reason: ', e.reason
- elif hasattr(e, 'code'):
- print 'The server could not fulfill the request.'
- print 'Error code: ', e.code
- else:
- response = json.loads(result.read())
- result.close()
- #print "Number Of %s: " % hostName, len(response['result'])
- lens=len(response['result'])
- #print response["result"]
- if lens > 1:
- print hostip+"大于1"
- # for re1 in response['result']:
- # print re1['name']
- if lens > 0:
- #return response['result'][0]['name']
- #print response['result'][0]['status']
- print hostip,response['result'][0]['proxy_hostid']+" "+"状态"+response['result'][0]['available'] +" "+response['result'][0]['name'] + " "+response['result'][0]['hostid']
- return response['result'][0]['hostid']
- else:
- print "error "+hostip
- return "error"
-
-
- #创建监控项
- def itemcreate(self,hostip,ports):
- item_key = 'net.tcp.listen[' + ports + ']'
- hostid=self.host_getbyip(hostip)
- if hostid=="error":
- return "error","error","error"
- interfaceid=self.getinterfaceidbyhostid(hostid)
- if interfaceid=="error":
- return "error","error","error"
- data = json.dumps({
- "jsonrpc": "2.0",
- "method": "item.create",
- "params": {
- "name": "ZABBIX端口监控"+ports,
- "key_": item_key,
- "hostid": hostid,
- "type": 0,
- "value_type": 3,
- "interfaceid": interfaceid,
- "delay": "60s"},
- "auth": self.authID,
- "id": 1,
- })
-
- request = urllib2.Request(self.url, data)
- for key in self.header:
- request.add_header(key, self.header[key])
-
- try:
- result = urllib2.urlopen(request)
- except URLError as e:
- print "Error as ", e
- else:
- response = json.loads(result.read())
- result.close()
- #print response
- #lens = len(response['result'])
- if response.has_key("result"):
- print response['result']["itemids"]
- return hostid,item_key,ports
- else:
- return "error","error","error"
-
- #创建触发器
- def triggercreate(self,hostid,item_key,ports):
- description = "ZABBIX监控" + ports + "端口告警"
- hostname=self.host_idgetrehost(hostid)
- if hostname=="error":
- return
- expression = '{' + hostname + ":" + item_key+".last()}=0"
- data = json.dumps({
- "jsonrpc": "2.0",
- "method": "trigger.create",
- "params": {
- "description": description,
-
- "expression": expression,
-
- "priority": 5,
-
- "status": 1 #0启用,1禁用
- },
- "auth": self.authID,
- "id": 1,
- })
-
- request = urllib2.Request(self.url, data)
- for key in self.header:
- request.add_header(key, self.header[key])
-
- try:
- result = urllib2.urlopen(request)
- except URLError as e:
- print "Error as ", e
- else:
- response = json.loads(result.read())
- result.close()
- print response['result']["triggerids"]
-
-
- #获取interfaceid,用于创建监控项
- def getinterfaceidbyhostid(self,hostid):
- data = json.dumps({
- "jsonrpc": "2.0",
- "method": "hostinterface.get",
- "params": {
- "output": "extend",
- "hostids": hostid
- },
- "auth": self.authID,
- "id": 1,
- })
- request = urllib2.Request(self.url, data)
- for key in self.header:
- request.add_header(key, self.header[key])
-
- try:
- result = urllib2.urlopen(request)
- except URLError as e:
- if hasattr(e, 'reason'):
- print 'We failed to reach a server.'
- print 'Reason: ', e.reason
- return "error"
- elif hasattr(e, 'code'):
- print 'The server could not fulfill the request.'
- print 'Error code: ', e.code
- return "error"
-
- else:
- response = json.loads(result.read())
- result.close()
-
- lens = len(response['result'])
- if lens > 0:
- return response['result'][0]['interfaceid']
- else:
- return "error"
-
-
- #获取主机名,用于创建触发器
- def host_idgetrehost(self,hostids):
- data = json.dumps({
- "jsonrpc":"2.0",
- "method":"host.get",
- "params":{
- "output":["hostid","host","name","status","available"],
- "filter":{"hostid":hostids}
- },
- "auth":self.user_login(),
- "id":1,
- })
-
- request = urllib2.Request(self.url, data)
- for key in self.header:
- request.add_header(key, self.header[key])
-
-
- try:
- result = urllib2.urlopen(request)
- except URLError as e:
- if hasattr(e, 'reason'):
- print 'We failed to reach a server.'
- print 'Reason: ', e.reason
- elif hasattr(e, 'code'):
- print 'The server could not fulfill the request.'
- print 'Error code: ', e.code
- else:
- response = json.loads(result.read())
- result.close()
- #print "Number Of %s: " % hostName, len(response['result'])
- lens=len(response['result'])
- if lens > 0:
- #return response['result'][0]['name']
- #print response['result'][0]['status']
- #print response['result'][0]['available'] +" "+response['result'][0]['name']
- return response['result'][0]['host']
- else:
- return "error"
-
-
-
- def additemandtrigger():
- test = autozabbixcopy.ZabbixTools()
- test.user_login()
- myfile = open("ipports.txt", 'r')
- for line in myfile:
- con = line.split(",")
- ips = con[0].strip()
- ports = con[1].strip()
- ids, keys, portss = test.itemcreate(ips, ports)
- if ids == "error":
- continue
- test.triggercreate(ids, keys, portss)
-
- if __name__ == "__main__":
- test = ZabbixTools()
- test.user_login()
- additemandtrigger()
把IP和端口写在同目录的ipports.txt,用逗号分隔执行即可