python 一键添加 zabbix 监控脚本
由于时间关系没有在脚本里把创建主机组和模板的功能,只是单单实现了添加主机的功能zabbix_tools.py
[*]#!/usr/bin/python
[*]#coding:utf-8
[*]
[*]import json
[*]import urllib2
[*]from urllib2 import URLError
[*]import sys
[*]
[*]class ZabbixTools:
[*] def __init__(self):
[*] self.url = 'http://lihuipeng.blog.运维网.com/zabbix/api_jsonrpc.php'
[*] self.header = {"Content-Type":"application/json"}
[*]
[*]
[*]
[*] def user_login(self):
[*] data = json.dumps({
[*] "jsonrpc": "2.0",
[*] "method": "user.login",
[*] "params": {
[*] "user": "Admin",
[*] "password": "lihuipeng"
[*] },
[*] "id": 0
[*] })
[*]
[*] request = urllib2.Request(self.url, data)
[*] for key in self.header:
[*] request.add_header(key, self.header)
[*]
[*] 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()
[*] #print response['result']
[*] self.authID = response['result']
[*] return self.authID
[*]
[*] def host_get(self):
[*] data = json.dumps({
[*] "jsonrpc":"2.0",
[*] "method":"host.get",
[*] "params":{
[*] "output":["hostid","name"],
[*] "filter":{"host":""}
[*] },
[*] "auth":self.user_login(),
[*] "id":1,
[*] })
[*]
[*] request = urllib2.Request(self.url, data)
[*] for key in self.header:
[*] request.add_header(key, self.header)
[*]
[*]
[*] 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 Hosts: ", len(response['result'])
[*] for host in response['result']:
[*] print "Host ID:",host['hostid'],"Host Name:",host['name']
[*]
[*] def hostgroup_get(self, hostgroupName):
[*] data = json.dumps({
[*] "jsonrpc":"2.0",
[*] "method":"hostgroup.get",
[*] "params":{
[*] "output": "extend",
[*] "filter": {
[*] "name": [
[*] hostgroupName,
[*] ]
[*] }
[*] },
[*] "auth":self.user_login(),
[*] "id":1,
[*] })
[*]
[*] request = urllib2.Request(self.url, data)
[*] for key in self.header:
[*] request.add_header(key, self.header)
[*]
[*] try:
[*] result = urllib2.urlopen(request)
[*] except URLError as e:
[*] print "Error as ", e
[*] else:
[*] response = json.loads(result.read())
[*] result.close()
[*] print "hostgroup : %s ------ id : %s" % (response['result']['name'], response['result']['groupid'])
[*] self.hostgroupID = response['result']['groupid']
[*] return response['result']['groupid']
[*]
[*] def template_get(self, templateName):
[*] data = json.dumps({
[*] "jsonrpc":"2.0",
[*] "method": "template.get",
[*] "params": {
[*] "output": "extend",
[*] "filter": {
[*] "host": [
[*] templateName,
[*] ]
[*] }
[*] },
[*] "auth":self.user_login(),
[*] "id":1,
[*] })
[*]
[*] request = urllib2.Request(self.url, data)
[*] for key in self.header:
[*] request.add_header(key, self.header)
[*]
[*] try:
[*] result = urllib2.urlopen(request)
[*] except URLError as e:
[*] print "Error as ", e
[*] else:
[*] response = json.loads(result.read())
[*] result.close()
[*] print "template : %s ------ id : %s" % (response['result']['name'], response['result']['templateid'])
[*] self.templateID = response['result']['templateid']
[*] return response['result']['templateid']
[*]
[*] def host_create(self, hostip, hostgroupName, templateName):
[*] data = json.dumps({
[*] "jsonrpc":"2.0",
[*] "method":"host.create",
[*] "params":{
[*] "host": hostip,
[*] "interfaces": [
[*] {
[*] "type": 1,
[*] "main": 1,
[*] "useip": 1,
[*] "ip": hostip,
[*] "dns": "",
[*] "port": "10050"
[*] }
[*] ],
[*] "groups": [
[*] {
[*] "groupid": self.hostgroup_get(hostgroupName)
[*] }
[*] ],
[*] "templates": [
[*] {
[*] "templateid": self.template_get(templateName)
[*] }
[*] ],
[*] },
[*] "auth": self.user_login(),
[*] "id":1
[*] })
[*] request = urllib2.Request(self.url, data)
[*] for key in self.header:
[*] request.add_header(key, self.header)
[*]
[*] try:
[*] result = urllib2.urlopen(request)
[*] except URLError as e:
[*] print "Error as ", e
[*] else:
[*] response = json.loads(result.read())
[*] result.close()
[*] print "host : %s ------ id : %s" % (hostip, response['result']['hostids'])
[*] self.hostid = response['result']['hostids']
[*] return response['result']['hostids']
[*]
[*]
[*]
[*]if __name__ == "__main__":
[*] if len(sys.argv) != 4:
[*] print "Usage: %s ip hostgroupName templateName" % sys.argv
[*] sys.exit(1)
[*]
[*] test = ZabbixTools()
[*] test.host_create(sys.argv, sys.argv, sys.argv)
[*]
[*]
[*]
[*]
[*]
user_login是帐号密码验证
host_get 是列出监控机
hostgroup_get是获取主机组的ID
template_get 是获取模板的ID
host_create 添加主机
运行方式:(前提是test-group这个主机组和test-template这个模板必须存在)
./zabbix_tools.py192.168.3.100test-grouptest-template
参考文章:
https://www.zabbix.com/documentation/2.0/manual/appendix/api
页:
[1]