1. 通过zabbix提供的api进行维护模式的设置

  1. #!/usr/bin/env python
  2. # -*-coding:utf-8-*-
  3. import urllib
  4. import urllib2
  5. import json
  6. import sys
  7. import platform
  8. import time
  9.  
  10. def auth(uid, username, password, api_url):
  11. """
  12. zabbix认证
  13. :param uid:
  14. :param username:
  15. :param password:
  16. :return:
  17. """
  18. dict_data = {}
  19. dict_data['method'] = 'user.login' # 方法
  20. dict_data['id'] = uid # 用户id
  21. dict_data['jsonrpc'] = "2.0" # api版本
  22. dict_data['params'] = {"user": username, "password": password} # 用户账号密码
  23. jdata = json.dumps(dict_data) # 格式化json数据
  24. content = post_data(jdata, api_url) # post json到接口
  25. return content # 返回信息
  26.  
  27. def post_data(jdata, url):
  28. """
  29. POST方法
  30. :param jdata:
  31. :param url:
  32. :return:
  33. """
  34. req = urllib2.Request(url, jdata, {'Content-Type': 'application/json'})
  35. response = urllib2.urlopen(req)
  36. # content = response.read()
  37. content = json.load(response)
  38. return content
  39.  
  40. def create_maintenance(name, hostid, active_since, active_till, period, auth_code, api_url):
  41. """
  42. create maintenance
  43. :return:
  44. """
  45. dict_data = {}
  46. dict_data['method'] = 'maintenance.create' # 方法
  47. dict_data['id'] = uid # 用户id
  48. dict_data['jsonrpc'] = "2.0" # api版本
  49. dict_data['auth'] = auth_code # api版本
  50. dict_data['description'] = "UPDATE" + hostid # api版本
  51. # host
  52. hostids = [hostid]
  53. # timeperiods
  54. timeperiods = [{"timeperiod_type": 0, "start_time": 64800, "period": period}]
  55. dict_data['params'] = {"name": name, "active_since": active_since, "timeperiods": timeperiods,
  56. "active_till": active_till, "hostids": hostids} # 用户账号密码
  57. jdata = json.dumps(dict_data) # 格式化json数据
  58. content = post_data(jdata, api_url) # post json到接口
  59. print content
  60. return content # 返回信息
  61.  
  62. def get_hostid(hostname, auth_code, uid, api_url):
  63. """
  64. use hostname get hostid
  65. :param hostname:
  66. :param auth:
  67. :param uid:
  68. :return:
  69. """
  70. dict_data = {}
  71. dict_data['method'] = 'host.getobjects' # 方法
  72. dict_data['id'] = uid # 用户id
  73. dict_data['jsonrpc'] = "2.0" # api版本
  74. dict_data['params'] = {"name": hostname} # 主机名
  75. dict_data['auth'] = auth_code # auth串
  76. jdata = json.dumps(dict_data) # 格式化json数据
  77. content = post_data(jdata, api_url) # post json到接口
  78. print content
  79. return content # 返回信息
  80.  
  81. def logout(uid, auth_code, api_url):
  82. """
  83. 退出
  84. :param uid:
  85. :param auth_code:
  86. :return:
  87. """
  88. dict_data = {}
  89. dict_data['method'] = 'user.logout' # 方法
  90. dict_data['id'] = uid # 用户id
  91. dict_data['jsonrpc'] = "2.0" # api版本
  92. dict_data['params'] = []
  93. dict_data['auth'] = auth_code # auth串
  94. jdata = json.dumps(dict_data) # 格式化json数据
  95. content = post_data(jdata, api_url) # post json到接口
  96. return content # 返回信息
  97.  
  98. if __name__ == '__main__':
  99. # user info
  100. uid = 1 # 用户ID
  101. username = 'admin'
  102. password = '123456'
  103. api_url = "http://192.168.1.100/api_jsonrpc.php"
  104. res = auth(1, username, password, api_url) # 认证
  105. if res['result']:
  106. auth_code = res['result'] # 认证串
  107. hostname = platform.node() # 主机名
  108. res = get_hostid(hostname, auth_code, uid, api_url)
  109. if res['result']:
  110. period = 600 # 维护时长
  111. active_since = int(time.time()) # 开始时间
  112. active_till = int(time.time()) + period # 结束时间
  113. hostid = res['result'][0]['hostid'] # 主机
  114. res = create_maintenance('AutoMaintenance_' + hostname + '_' + str(active_since), hostid, active_since, active_till, period,
  115. auth_code, api_url) # 创建维护
  116. logout(uid, auth_code, api_url) # 退出登录
  117. print res
  118. else:
  119. pass

备注:以上脚本适用于zabbix2.4及以下版本

需要修改uid、username、password、api_url以及res中的auth函数的uid值,通过修改period的值来修改维护时长。

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

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

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

zabbix api 设置维护模式的更多相关文章

  1. PowerShell管理SCOM_批量设置维护模式(上 )

    #定义存储需要置为维护模式的计算机名称列表 $serverlist = "C:\scomm\servers.txt" #定义脚本执行结果的输出位置 $server_maintena ...

  2. PowerShell管理SCOM_批量设置维护模式(下)

    #定义存储需要置为维护模式的计算机名称列表$serverlist = "C:\scomm\servers.txt"#定义RMS服务器名称$rmsServerName=”scomw. ...

  3. ambari 维护模式及reset API 操作

    Ambari 的维护模式(Maintenance Mode)介绍 Ambari 提供的 Maintenance Mode,是为了让用户在调试或者维护 Service 的时候,抑制不必要的告警(Aler ...

  4. zabbix 接口 | zabbix api 实践

    原文地址:https://www.jianshu.com/p/d5faa110e78e zabbix 接口地址:https://www.zabbix.com/documentation/3.2/man ...

  5. JAVA访问Zabbix API

    Zabbix 一.Zabbix 概述 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的 ...

  6. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

  7. Spring Cloud Netflix项目进入维护模式

    任何项目都有其生命周期,Spring Could Netflix也不例外,官宣已进入维护模式,如果在新项目开始考虑技术选型时要考虑到这点风险,并考虑绕道的可能性. 原创: itmuch  IT牧场 这 ...

  8. oracle学习笔记(二)设置归档模式

    设置归档模式(mount状态) ALTER database ARCHIVELOG; //关闭数据库 shutdown immediate //启动数据库到mount状态 startup mount ...

  9. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

随机推荐

  1. 在GitHub搭建个人博客 地址: https://douzujun.github.io/

    搭建博客地址:https://douzujun.github.io/ 博客模板:https://github.com/douzujun/douzujun.github.io 显示效果:

  2. [转]memmove、memcpy和memccpy

    原文地址:http://www.cppblog.com/kang/archive/2009/04/05/78984.html 在原文基础上进行了一些小修改~ memmove.memcpy和memccp ...

  3. 10款好用的 jQuery 图片切换效果插件

    jQuery 是一个非常优秀的 Javascript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入一些让人惊叹的效 ...

  4. 你知道吗?.NET Framework 4.5 五个很棒的特性

    简介 自.NET 4.5发布已经过了差不多1年了.但是随着最近微软大多数的发布,与.NET开发者交流的问题显示,开发者仅知道一到两个特性,其他的特性仅仅停留在MSDN并以简单的文档形式存在着. 比如说 ...

  5. 给你灵感!21个精美的 iOS APP 网站设计欣赏

    iOS 吹起了轰轰烈烈的扁平化设计风格,而做为承载 App 宣传重任的网页,整体设计风格的变迁如何?是否也如iOS的设计风格改革一样彻底的翻转?还是如往常一直深耕成熟的设计风格? Spendee Fo ...

  6. 您是哪个等级的CSS开发人员?

    我们在不断的学习,追求进步与提高,到底学到什么程度了,到底是 不是真的了解CSS,是哪个层次了呢.我们来对照一下. 第0级:CSS?那不是一个多人射击游戏吗?  CSS? Isn't that a m ...

  7. DHTML中window的使用

    window对象是对浏览器窗口进行操作的对象.以下列出一些常用的对象(三级为对象的方法.属性) |-navigator:是对浏览器信息进行操作的对象 |-history:包含用户浏览过的url信息 | ...

  8. 关于static关键字

    static用于修饰成员(成员变量,成员函数),不能修饰局部变量被修饰的变量和函数是静态的,可被多个对象共享,节省内存可以直接被类名调用++++++++++++++++++++++++++++++++ ...

  9. Array和String测试与java.String.split

    java.string.split() 存在于java.lang包中,返回值是一个数组. 作用是按指定字符或者正则去切割某个字符串,结果以字符串数组形式返回. 例 String [] toSort = ...

  10. 从docker到docker-compose部署一个nginx+flask+mysql+redis应用

    目的是把一个flask项目的mysql数据库.redis数据库.flask应用.nginx服务分别装到四个容器中,然后用docker-compose命令同时启动与关闭 一.安装docker Docke ...