Zabbix API开发实战:创建维护模式(112)

凉白开 zabbix319,46510字数 3029阅读10分5秒阅读模式

前言

前段时间,运维生存时间群里有一位兄弟咨询API操作,由于时间忙,给了一份写好的zabbix维护脚本给他参考,脚本里面包含用户登录或者token、获取主机信息、创建维护模式。有python脚本功力的同学直接看脚本。

脚本功能

zabbix_maintenance.py 执行本脚本,zabbix将此服务器置为维护状态,周期为10分钟。本脚本只需要修改zabbix用户ID、用户名、密码、网址即可文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/

备注:zabbix中的hostname必须与当前主机名一致文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/

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到接口
    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到接口
    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 = 5 # 用户ID
    username = 'zabbix用户名'
    password = 'zabbix密码'
    api_url = "http://zabbix网址/zabbix/api_jsonrpc.php"
    res = auth(5, 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及以下版本文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/

如有相关问题,大家有如下问题可以咨询凉白开或者SA们:加入QQ群(看网站底部)、关注微信公众号ttlsacom提问、发送邮件至suppor@ttlsa.com、在本文里留言!文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/

 文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/ 文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
凉白开
  • 本文由 发表于 10/10/2015 01:00:07
  • 转载请务必保留本文链接:https://www.ttlsa.com/zabbix/zabbix-api-example-create-maintenance/
评论  3  访客  3
    • 15801465000@163.com
      15801465000@163.com 0

      手工赞一个

      • 默北
        默北 6

      • 来自外部的引用

      评论已关闭!