首页域名资讯 正文

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

2024-09-20 2 0条评论

前言

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

脚本功能

zabbix_maintenance.py 执行本脚本,zabbix将此服务器置为维护状态,周期为10分钟。本脚本只需要修改zabbix用户ID、用户名、密码、网址即可

备注:zabbix中的hostname必须与当前主机名一致

API脚本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 #!/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及以下版本

 

 

文章转载来自:trustauth.cn

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/150686.html 发布于 2024-09-20
文章转载或复制请以超链接形式并注明出处。