config.yaml存储zabbix的信息(主要包括zabbix server的url 、请求头部、登陆的用户名密码)

  1. Zabbix_Config:
  2. zabbix_url: http://192.168.1.179/zabbix/api_jsonrpc.php
  3. zabbix_header: {"Content-Type": "application/json"}
  4. zabbix_user: Admin
  5. zabbix_pass: zabbix

auth.py文件,主要是获取zabbix认证id和对zabbix的请求,包括根据主机名(host_name)或者可见名(visible_name)获取主机的id 、新增主机、新增带资产主机、主机资产变更

  1. #/usr/bin/env python
  2. # encoding: utf-8
  3. import json
  4. import urllib2
  5. from urllib2 import Request, urlopen, URLError, HTTPError
  6. import yaml
  7.  
  8. def Zabbix_Url_Request(zabbix_url,data,zabbix_header,*args,**kwargs):
  9. #print data
  10. # create request object
  11. request = urllib2.Request(zabbix_url, data, zabbix_header)
  12. try:
  13. result = urllib2.urlopen(request)
  14. # 对于出错新的处理
  15. except HTTPError, e:
  16. print 'The server couldn\'t fulfill the request, Error code: ', e.code
  17. except URLError, e:
  18. print 'We failed to reach a server.Reason: ', e.reason
  19. else:
  20. response = json.loads(result.read())
  21. #print response
  22. return response
  23. result.close()
  24.  
  25. def Zabbix_Auth_Code(zabbix_url,zabbix_header,*args,**kwargs):
  26. with open('config.ymal') as f:
  27. result = yaml.load(f)
  28. result_zabbix_info = result['Zabbix_Config']
  29. zabbix_user = result_zabbix_info['zabbix_user']
  30. zabbix_pass = result_zabbix_info['zabbix_pass']
  31. # auth user and password
  32. # 用户认证信息的部分,最终的目的是得到一个SESSIONID
  33. # 这里是生成一个json格式的数据,用户名和密码
  34. auth_data = json.dumps(
  35. {
  36. "jsonrpc": "2.0",
  37. "method": "user.login",
  38. "params":
  39. {
  40. "user": zabbix_user,
  41. "password": zabbix_pass
  42. },
  43. "id": 0
  44. })
  45. response = Zabbix_Url_Request(zabbix_url,auth_data,zabbix_header)
  46. # print response
  47. if 'result' in response:
  48. #print response
  49. return response['result'],response['id']
  50.  
  51. else:
  52. print response['error']['data']

host_info.py 对zabbix的主机的操作

  1. #/usr/bin/env python
  2. # encoding: utf-8
  3. import json
  4. import sys
  5. from auth import Zabbix_Auth_Code,Zabbix_Url_Request
  6. #zabbix_url = "http://192.168.1.179/zabbix/api_jsonrpc.php"
  7. #zabbix_header = {"Content-Type": "application/json"}
  8. class Host_Action(object):
  9. def __init__(self,zabbix_url,zabbix_header,host_name=None,visible_name=None,*args,**kwargs):
  10. '''
  11. 实现的功能:获取主机id,增、删主机,更新zabbix主机资产表
  12. :param zabbix_url: 访问zabbix的URL
  13. :param zabbix_header: 访问头部
  14. :param host_name: hostname
  15. :param visible_name: 可见的主机名
  16. :param args:
  17. :param kwargs:
  18. '''
  19. self.zabbix_url = zabbix_url
  20. self.zabbix_header = zabbix_header
  21. self.host_name= host_name
  22. self.visible_name = visible_name
  23. def Get_Host_Id(self):
  24. auth_code, auth_id = Zabbix_Auth_Code(zabbix_url=self.zabbix_url,zabbix_header=self.zabbix_header)
  25. find_info = {}
  26. find_info['host'] = [self.host_name]
  27. find_info['name'] = [self.visible_name]
  28. for k,v in find_info.items():
  29. if v[0] == None:
  30. find_info.pop(k)
  31. get_host_id_data = json.dumps({
  32. "jsonrpc": "2.0",
  33. "method": "host.get",
  34. "params": {
  35. "output": "extend",
  36. "filter": find_info
  37. },
  38. "auth": auth_code,
  39. "id": auth_id
  40. })
  41. host_info = Zabbix_Url_Request(zabbix_url=self.zabbix_url,data=get_host_id_data,zabbix_header=self.zabbix_header)
  42. print host_info
  43. if len(host_info['result']) != 0:
  44. hostid = host_info['result'][0]['hostid']
  45. #print hostid
  46. return hostid
  47. else:
  48. print '没有查询到主机hostids'
  49. return 0
  50. def Add_Host(self,host_ip,template_id=10001,group_id=2,type=1,main=1,userip=1,port="",dns="",
  51. flag=0,host_inventory=None,*args,**kwargs):
  52. '''
  53.  
  54. :param group_id: 主机关联的监控模本id(groupid)
  55. :param templateid: 主机关联的监控模板id(templateid)
  56. :param host_ip: 主机ip地址
  57. :param type: 1 - agent; 2 - SNMP; 3 - IPMI; 4 - JMX
  58. :param main: 0 - not default; 1 - default
  59. :param userip: 0 - connect using host DNS name; 1 - connect using host IP address for this host interface.
  60. :param port: Port number used by the interface
  61. :param dns: 0 - connect using host DNS name;1 - connect using host IP address for this host interface.
  62. :param flag: 是否维护主机资产,0 - 表示不录入;1 - 表示录入
  63. :param host_inventory: 主机资产表
  64. :param args:
  65. :param kwargs:
  66. :return:
  67. '''
  68. self.host_ip = host_ip
  69. self.type = type
  70. self.main = main
  71. self.userip = userip
  72. self.port = port
  73. self.flag = flag
  74. self.dns = dns
  75. self.host_inventory = host_inventory
  76. host_msg = {}
  77. if self.host_name == None:
  78. self.host_name = self.host_ip
  79. host_template_info =[{"templateid": template_id}]
  80. host_group_info = [{"groupid": group_id}]
  81. host_interfaces_info = [{
  82. "type": self.type,
  83. "main": self.main,
  84. "useip": self.userip,
  85. "ip": self.host_ip,
  86. "dns": self.dns,
  87. "port": self.port
  88. }]
  89. host_msg['host'] = self.host_name
  90. host_msg['name'] = self.visible_name
  91. host_msg['interfaces'] = host_interfaces_info
  92. host_msg['groups'] = host_group_info
  93. host_msg['templates'] = host_template_info
  94. if self.flag == 0:
  95. host_msg['inventory_mode'] = -1 # -1 - disabled; 0 - (default) manual; 1 - automatic.
  96. elif self.flag == 1:
  97. host_msg['inventory_mode'] = 0 # -1 - disabled; 0 - (default) manual; 1 - automatic.
  98. else:
  99. sys.exit(1)
  100. auth_code, auth_id = Zabbix_Auth_Code(zabbix_url=self.zabbix_url,zabbix_header=self.zabbix_header)
  101. host_info = json.dumps({
  102. "jsonrpc": "2.0",
  103. "method": "host.create",
  104. "params": host_msg,
  105. "auth": auth_code,
  106. "id": auth_id
  107. })
  108. add_host = Zabbix_Url_Request(zabbix_url=self.zabbix_url,data=host_info,zabbix_header=self.zabbix_header)
  109. if add_host['result']['hostids']:
  110. print "增加被监控主机成功,主机id : %s"%(add_host['result']['hostids'])
  111.  
  112. def Del_Host(self,host_id):
  113. self.host_id = host_id
  114. auth_code, auth_id = Zabbix_Auth_Code(zabbix_url=self.zabbix_url,zabbix_header=self.zabbix_header)
  115. del_host_info = json.dumps({
  116. "jsonrpc": "2.0",
  117. "method": "host.delete",
  118. "params": [
  119. self.host_id,
  120. ],
  121. "auth": auth_code,
  122. "id": auth_id
  123. })
  124. host_del = Zabbix_Url_Request(self.zabbix_url,del_host_info,self.zabbix_header)
  125. print host_del
  126. #if host_del['error']
  127.  
  128. if host_del['result']['hostids'] == self.host_id:
  129. print 'id为%s主机删除成功!!!'%self.host_id
  130.  
  131. def Update_Host_Ienventory(self,host_id,host_inventory,*args,**kwargs):
  132. self.host_id = host_id
  133. self.host_inventory = host_inventory
  134. auth_code, auth_id = Zabbix_Auth_Code(zabbix_url=self.zabbix_url,zabbix_header=self.zabbix_header)
  135. host_msg = {}
  136. host_msg['hostid'] = self.host_id
  137. host_msg['inventory_mode'] = 0
  138. host_msg['inventory'] = self.host_inventory
  139.  
  140. update_msg = json.dumps(
  141. {
  142. "jsonrpc": "2.0",
  143. "method": "host.update",
  144. "params": host_msg,
  145. "auth": auth_code,
  146. "id": auth_id
  147. }
  148. )
  149. update_host_ienventory = Zabbix_Url_Request(zabbix_url=self.zabbix_url,data=update_msg,zabbix_header=self.zabbix_header)
  150. print update_host_ienventory
  151.  
  152. def Get_Group_Id(group_name,zabbix_url,zabbix_header,*args,**kwargs):
  153. '''
  154. 通过组名获取组id
  155. :param group_name: 组名
  156. :return:
  157. '''
  158. auth_code, auth_id = Zabbix_Auth_Code(zabbix_url=zabbix_url,zabbix_header=zabbix_header)
  159. group_info = json.dumps({
  160. "jsonrpc": "2.0",
  161. "method": "hostgroup.get",
  162. "params": {
  163. "output": "extend",
  164. "filter": {
  165. "name": [
  166. group_name,
  167. ]
  168. }
  169. },
  170. "auth":auth_code,
  171. "id": auth_id
  172. })
  173. groups_result = Zabbix_Url_Request(zabbix_url=zabbix_url,data=group_info, zabbix_header=zabbix_header)
  174. #print groups_result['result'][0]['groupid']
  175. return groups_result['result'][0]['groupid']
  176.  
  177. def Get_Template_Id(template_name,zabbix_url,zabbix_header,*args,**kwargs):
  178. '''
  179. 通过模板名获取组id
  180. :param template_name: 模板名
  181. :return:
  182. '''
  183. auth_code,auth_id = Zabbix_Auth_Code(zabbix_url=zabbix_url,zabbix_header=zabbix_header)
  184. template_info = json.dumps({
  185. "jsonrpc": "2.0",
  186. "method": "template.get",
  187. "params": {
  188. "output": "extend",
  189. "filter": {
  190. "host": [
  191. template_name
  192. ]
  193. }
  194. },
  195. "auth": auth_code,
  196. "id": auth_id
  197. })
  198. template_result = Zabbix_Url_Request(zabbix_url=zabbix_url,date=template_info,zabbix_header= zabbix_header)
  199. #print template_result['result'][0]['templateid']
  200. return template_result['result'][0]['templateid']

index.py 程序入口

  1. #/usr/bin/env python
  2. # encoding: utf-8
  3. import yaml
  4. from host_info import Host_Action,Get_Group_Id,Get_Template_Id
  5. import sys
  6. reload(sys)
  7. sys.setdefaultencoding('utf8')
  8.  
  9. if __name__ == '__main__':
  10. try:
  11. with open('config.ymal') as f:
  12. result = yaml.load(f)
  13. result_zabbix_info = result['Zabbix_Config']
  14. zabbix_url = result_zabbix_info['zabbix_url']
  15. zabbix_header = result_zabbix_info['zabbix_header']
  16.  
  17. #删除主机
  18. host = Host_Action(zabbix_url=zabbix_url, zabbix_header=zabbix_header, host_name='192.168.1.84',
  19. visible_name='t1')
  20. host_id = host.Get_Host_Id()
  21. host.Del_Host(host_id)
  22. #增加主机不带资产
  23. host = Host_Action(zabbix_url=zabbix_url, zabbix_header=zabbix_header, host_name='192.168.1.84',visible_name='t1')
  24. host.Add_Host(host_ip='192.168.1.84')
  25.  
  26. #获取指定主机的hostid
  27. host = Host_Action(zabbix_url=zabbix_url,zabbix_header=zabbix_header,host_name='192.168.1.84')
  28. host_id = host.Get_Host_Id()
  29. print '主机192.168.1.84的id是: %s'%host_id
  30.  
  31. #获取指定模本的id
  32. t_id = Get_Template_Id(template_name='Template OS Linux',zabbix_header=zabbix_header,zabbix_url=zabbix_url)
  33. print "模板Template OS Linux的id是:%s"%t_id
  34.  
  35. #获取指定组的id
  36. Get_Group_Id(group_name='Linux servers',zabbix_header=zabbix_header,zabbix_url=zabbix_url)
  37. print "组Linux servers的id是:%s" % t_id
  38.  
  39. host_inventory = {
  40. "type": "Linux Server",
  41. "name": "xxxxxxx",
  42. "os": "centos7.2",
  43. "os_full": "RedHat Centos 7.2",
  44. "os_short": "Centos 7.2",
  45. "serialno_a": "f729d3fa-fd53-4c5f-8998-67869dad349a",
  46. "macaddress_a": "00:16:3e:03:af:a0",
  47. "hardware_full": "cpu: 4c; 内存: 8G; 硬盘: 20G",
  48. "software_app_a": "docker",
  49. "software_app_b": "zabbix agent",
  50. "software_full": "docker zabbix-server ntpd",
  51. "contact": "xxx", # 联系人
  52. "location": "阿里云 华北二", # 位置
  53. "vendor": "阿里云", # 提供者
  54. "contract_number": "", # 合同编号
  55. "installer_name": "xx 手机: xxxxxxxxxx", # 安装名称
  56. "deployment_status": "prod",
  57. "host_networks": "192.168.1.179",
  58. "host_netmask": "255.255.255.0",
  59. "host_router": "192.168.1.1",
  60. "date_hw_purchase": "2016-07-01", # 硬件购买日期
  61. "date_hw_install": "2016-07-01", # 硬件购买日期
  62. "date_hw_expiry": "0000-00-00", # 硬件维修过期
  63. "date_hw_expiry": "0000-00-00", # 硬件维修过期
  64. "date_hw_decomm": "0000-00-00", # 硬件报废时间
  65. "site_city": "北京",
  66. "site_state": "北京",
  67. "site_country": "中国",
  68. "site_zip": "", # 邮编
  69. "site_rack": "", # 机架
  70. }
  71.  
  72. #添加带资产的主机
  73. host = Host_Action(zabbix_url=zabbix_url, zabbix_header=zabbix_header, host_name='192.168.1.84')
  74. host_id = host.Get_Host_Id(host_inventory=host_inventory,flag=1)
  75.  
  76. # 删除主机
  77. host = Host_Action(zabbix_url=zabbix_url, zabbix_header=zabbix_header, host_name='192.168.1.84',
  78. visible_name='t1')
  79. host_id = host.Get_Host_Id()
  80. host.Del_Host(host_id)
  81.  
  82. except Exception,e:
  83. print e

部分执行结果如下:

  1. 增加被监控主机成功,主机id [u'10116']
  1. 主机192.168.1.84id是: 10115
  1. 模板Template OS Linuxid是:10001
  2.  
  3. Linux serversid是:10001
  1. 资产情况如下图:

  1.  

通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id的更多相关文章

  1. python3 调用zabbix API实现批量增加删除主机,主机各种监控项------实战

    在以前的博客中谈到了利用zabbix接口来对主机进行批量的增删改查 这里在不用环境中实战遇到了不同问题,这里记录下来以便后续review 以下为实战中获取token的代码,在zabbix标准接口文档中 ...

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

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

  3. PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

    最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取 ...

  4. 利用zabbix api添加、删除、禁用主机

    python环境配置yum -y install python-pip安装argparse模块pip install -i https://pypi.douban.com/simple/ argpar ...

  5. python 调用zabbix api实现查询主机信息,输出所有主机ip

    之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...

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

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

  7. Zabbix Api的使用

    API使用 zabbix官网文档:https://www.zabbix.com/documentation/2.2/manual/api, Zabbix API是基于JSON-RPC 2.0规格,具体 ...

  8. 基于curl 的zabbix API调用

    1,认证并取得加密字段 curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0&q ...

  9. PHP通过Zabbix API获取服务器监控信息

    开源监控系统Zabbix提供了丰富的API,供第三方系统调用. 基本步骤如下: 1.获取合法认证:连接对应Zabbix URL,并提供用户名和密码,HTTP方法为"POST",HT ...

随机推荐

  1. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  2. Could not create SSL connection through proxy serve-svn

    RA layer request failedsvn: Unable to connect to a repository at URL xxxxxx 最后:Could not create SSL ...

  3. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  4. [C#] 简单的 Helper 封装 -- SQLiteHelper

    using System; using System.Data; using System.Data.SQLite; namespace SqliteConsoleApp { /// <summ ...

  5. Consul 服务注册与服务发现

    上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...

  6. node中子进程同步输出

    管道 通过"child_process"模块fork出来的子进程都是返回一个ChildProcess对象实例,ChildProcess类比较特殊无法手动创建该对象实例,只能使用fo ...

  7. XSS分析及预防

    XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏洞尤其容易被开发人员忽视,最终可能造成对个人信息 ...

  8. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  9. Unity3D 5.3 新版AssetBundle使用方案及策略

    1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...

  10. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...