zabbix 优势在于其丰富的api功能,可以高度定制化、扩展。笔者也是在使用了1年的API中收获颇丰。在cmdb资产管理功能、微信操作控制zabbix功能、获取zabbix数据制作报表等都利用到了zabbix api。

笔者把脚本脚本分为三个部分

  • 1.登陆脚本 login.py

  • 2.定义函数脚本 function.py

  • 3.调用执行脚本 zabbix.py

  • 登陆脚本 login.py

#!/usr/bin/env python
import urllib2
import json
#定义URL账户密码
url = 'http://zabbixip/zabbix/api_jsonrpc.php'
username = 'admin'
password = 'password'
#定义通过HTTP方式访问API地址的函数,后面每次请求API的各个方法都会调用这个函数
def requestJson(url,values):        
    data = json.dumps(values)
    req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
    response = urllib2.urlopen(req, data)
    output = json.loads(response.read())
#   print output
    try:
        message = output['result']
    except:
        message = output['error']['data']
        print message
        quit()

    return output['result']

#API接口认证的函数,登录成功会返回一个Token
def authenticate(url, username, password):
    values = {'jsonrpc': '2.0',
              'method': 'user.login',
              'params': {
                  'user': username,
                  'password': password
              },
              'id': '0'
              }
    idvalue = requestJson(url,values)
    return idvalue

定义函数脚本 function.py

#!/usr/bin/env python
#coding=utf-8
import urllib2
import sys
import json
import argparse
from login import *
from function import *
#登陆zabbix获取auth
auth = authenticate(url, username, password)
#状态0是启用监控,1是禁用监控
status=1
#定义操作ip
hostip='192.168.1.100'
#通过hostip获取zabbix hostid
hostids=ipgetHostsid(hostip,url,auth)
hostid=hostids[0]['hostid']
#通过主机id开启关闭监控
idupdatehost(status,hostid,url,auth)

添加维护周期(maintenance.py)

#!/usr/bin/env python
#coding=utf-8

import urllib2
import sys
import json
import argparse
import time
from login import *
from function import *

def timetostamp(strtime):
    timeArrary = time.strptime(strtime, "%Y-%m-%d %H:%M")
    return int(time.mktime(timeArrary))

'''
if __name__ == '__main__':
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。
这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
在你import别的py文件时,那个py文件会被存一份pyc加速下次装载。而主文件因为只需要装载一次就没有存pyc
'''

#登陆zabbix获取auth
auth = authenticate(url, username, password)

hostip='10.10.10.10'
groupname='Zabbix Agent'

#通过hostip获取zabbix hostid
hostids=ipgetHostsid(hostip,url,auth)
hostid=hostids[0]['hostid']

#通过groupname获取zabbix groupid
groupids=groupnameGroupid(groupname,auth)
groupid=groupids[0]['groupid']


# 名称,描述,注意name不能重复
name='Zabbix Agent group更新维护'
desc = "这是一次全服更新维护,请悉知!"

# 维护时间
dt_since = '2018-01-18 11:25'
dt_till = '2018-01-18 13:25'
active_since = timetostamp(dt_since)
active_till = timetostamp(dt_till)

# 开始生效时间
dt_start = '2018-01-18 12:30'
start_date = timetostamp(dt_start)

# 持续时间,单位秒
period = 600
print 'period=%ds' % period

if __name__ == '__main__':
    maintenancecreate(name,active_since,active_till,desc,hostid,start_date,period,auth)
    maintenancecreategroup(name,active_since,active_till,desc,groupid,start_date,period,auth)