zabbix api 维护模式

zabbix 调用api设置维护模式

#!/usr/bin/env python
# -*-coding:utf-8-*-
import urllib
import urllib2
import json
import sys
import platform
import time
 
 
def auth(uid, username, password, api_url):
    """
    zabbix认证
    :param uid:
    :param username:
    :param password:
    :return:
    """
    dict_data = {}
    dict_data['method'] = 'user.login'  # 方法
    dict_data['id'] = uid  # 用户id
    dict_data['jsonrpc'] = "2.0"  # api版本
    dict_data['params'] = {"user": username, "password": password}  # 用户账号密码
    jdata = json.dumps(dict_data)  # 格式化json数据
    content = post_data(jdata, api_url)  # post json到接口
    return content  # 返回信息
 
 
def post_data(jdata, url):
    """
    POST方法
    :param jdata:
    :param url:
    :return:
    """
    req = urllib2.Request(url, jdata, {'Content-Type': 'application/json'})
    response = urllib2.urlopen(req)
    # content = response.read()
    content = json.load(response)
    return content
 
 
def create_maintenance(name, hostid, active_since, active_till, period, auth_code, api_url):
    """
    create maintenance
    :return:
    """
    dict_data = {}
    dict_data['method'] = 'maintenance.create'  # 方法
    dict_data['id'] = uid  # 用户id
    dict_data['jsonrpc'] = "2.0"  # api版本
    dict_data['auth'] = auth_code  # api版本
    dict_data['description'] = "UPDATE" + hostid  # api版本
    # host
    hostids = [hostid]
    # timeperiods
    timeperiods = [{"timeperiod_type": 0, "start_time": 64800, "period": period}]
    dict_data['params'] = {"name": name, "active_since": active_since, "timeperiods": timeperiods,
                           "active_till": active_till, "hostids": hostids}  # 用户账号密码
    jdata = json.dumps(dict_data)  # 格式化json数据
    content = post_data(jdata, api_url)  # post json到接口
    print content
    return content  # 返回信息
 
 
def get_hostid(hostname, auth_code, uid, api_url):
    """
    use hostname get hostid
    :param hostname:
    :param auth:
    :param uid:
    :return:
    """
    dict_data = {}
    dict_data['method'] = 'host.getobjects'  # 方法
    dict_data['id'] = uid  # 用户id
    dict_data['jsonrpc'] = "2.0"  # api版本
    dict_data['params'] = {"name": hostname}  # 主机名
    dict_data['auth'] = auth_code  # auth串
    jdata = json.dumps(dict_data)  # 格式化json数据
    content = post_data(jdata, api_url)  # post json到接口
    print content
    return content  # 返回信息
 
 
def logout(uid, auth_code, api_url):
    """
    退出
    :param uid:
    :param auth_code:
    :return:
    """
    dict_data = {}
    dict_data['method'] = 'user.logout'  # 方法
    dict_data['id'] = uid  # 用户id
    dict_data['jsonrpc'] = "2.0"  # api版本
    dict_data['params'] = []
    dict_data['auth'] = auth_code  # auth串
    jdata = json.dumps(dict_data)  # 格式化json数据
    content = post_data(jdata, api_url)  # post json到接口
    return content  # 返回信息
 
 
if __name__ == '__main__':
    # user info
    uid = 1 # 用户ID
    username = 'admin'
    password = '123456'
    api_url = "http://192.168.1.100/api_jsonrpc.php"
    res = auth(1, username, password, api_url)  # 认证
    if res['result']:
        auth_code = res['result']  # 认证串
        hostname = platform.node()  # 主机名
        res = get_hostid(hostname, auth_code, uid, api_url)
        if res['result']:
            period = 600  # 维护时长
            active_since = int(time.time())  # 开始时间
            active_till = int(time.time()) + period  # 结束时间
            hostid = res['result'][0]['hostid']  # 主机
            res = create_maintenance('AutoMaintenance_' + hostname + '_' + str(active_since), hostid, active_since, active_till, period,
                                     auth_code, api_url)  # 创建维护
            logout(uid, auth_code, api_url)  # 退出登录
            print res
    else:
        pass

备注:以上脚本适用于zabbix2.4及以下版本
需要修改uid、username、password、api_url以及res中的auth函数的uid值,通过修改period的值来修改维护时长。

该脚本通过platform模块获取到agent的主机名,确保server端的主机名与客户端一致,且存在,否则设置不成功。

设置完成后可在Configuration->Maintenance页面中查看设置的维护模板。

可以通过在Configuration->Hosts页面中查看是否生效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Zabbix简介 Zabbix官方网站Zabbix中文文档 本文系统环境是CentOS7x86_64, Zabbi...
    Zhang21阅读 8,396评论 0 37
  • 1.写在前面 本文主要介绍的是zabbix的编译安装过程,包含它的基础环境LNMP,虽然zabbix官方一般推荐的...
    天之蓝色阅读 2,687评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,951评论 19 139
  • 感恩高子杰老师带给我们的情绪管理的课程,感恩同事们的专心和配合。 感恩小霞送我的面膜和无条件的信任。 感恩办公室同...
    兰草心阅读 173评论 0 0
  • Everyone is trying her/his best to find herself/himself,...
    娜娜是最美的小仙女阅读 241评论 1 0

友情链接更多精彩内容