Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140645
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 309
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-06 11:27
个人简介

开启暴走模式。

文章分类

全部博文(31)

文章存档

2017年(19)

2016年(1)

2015年(11)

我的朋友

分类: Python/Ruby

2015-08-28 16:21:14

这是一个简单的利用Zabbix API添加主机,其实可以延伸很多。或许有的公司利用自动发现,但是自动发现有很多弊端,按多少时间间隔发现,考虑监控服务器IO性能等等。我想大公司的批量添加应该都是利用了API实现的,大体流程应该是这样。
应该有个资源管理系统录入我们需要的信息到数据库(比如redis)里,我们可以取一些需要的值出来当做json的参数传递给Zabbix API,这样就可以批量添加了,里面还可以用多进程和多线程实现哦,性能肯定没的说。

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- encoding: utf8 -*-

  3. #导入模块,urllib2是一个模拟浏览器HTTP方法的模块
  4. import json
  5. import urllib2
  6. import sys
  7. from urllib2 import Request,urlopen,URLError,HTTPError

  8. #url and url header
  9. #zabbix的API地址、用户名、密码、这里修改为实际的参数
  10. zabbix_url=" />
  11. zabbix_header = {"Content-Type":"application/json"}
  12. zabbix_user = "admin"
  13. zabbix_pass = "zabbix"
  14. auth_code = ""

  15. #auth user and password
  16. #用户认证信息的部分,最终的目的是得到一个SESSIONID
  17. #下面是生成一个JSON格式的数据:用户名和密码
  18. auth_data = json.dumps(
  19.         {
  20.                 "jsonrpc" : "2.0",
  21.                 "method" : "user.login",
  22.                 "params" :
  23.                                 {
  24.                                         "user":zabbix_user,
  25.                                         "password":zabbix_pass
  26.                                 },
  27.                 "id":0
  28.         })

  29. # create request object
  30. request = urllib2.Request(zabbix_url,auth_data)
  31. for key in zabbix_header:
  32.         request.add_header(key,zabbix_header[key])

  33. #认证和获取SESSION ID
  34. try:
  35.         result = urllib2.urlopen(request)
  36. #对于认证出错的处理
  37. except HTTPError,e:
  38.         print 'The server couldn\'t fulfill the request, Error code: ',e.code
  39. except URLError,e:
  40.         print 'We failed to reach a server.Reason: ',e.reason
  41. else:
  42.         response = json.loads(result.read())

  43. '''
  44. #如果访问成功或者失败,这里的数据会显示如下
  45. sucess result:
  46.         {"jsonrpc":"2.0",
  47.          "result": "182395ea90c1c983a6154dbe0b5bdb40",
  48.          "id":0
  49.         }
  50. error result:
  51.         {'code': -32602
  52.          'data': 'Login name or password is incorrect.',
  53.          'message':'Invalid params.'
  54.         }
  55. '''
  56. #判断SESSIONID是否在返回的数据中
  57. if 'result' in response:
  58.         auth_code = response['result']
  59. else:
  60.         print response['error']['data']

  61. #request_json
  62. json_data ={
  63.         "method":"host.create",
  64.         "params":{'groups': [{'groupid': '12'}],
  65.                         'host': 'WangWei Linux',
  66.                         'interfaces': [{'dns':'',
  67.                                                         'ip':'192.168.3.1',
  68.                                                         'main':1,
  69.                                                         'port':'10050',
  70.                                                         'type':1,
  71.                                                         'useip':1}],
  72.                         'inventory': {'macaddress_a':'01234','macaddress_b':'56768'},
  73.                         'templates': [{'templateid':'10001'}]}
  74. }

  75. json_base={
  76.         "jsonrpc":"2.0",
  77.         "auth":auth_code,
  78.         "id":1
  79. }

  80. json_data.update(json_base)
  81. #用得到的SESSIONID去验证,获取主机的信息(用http.get方法)
  82. if len(auth_code) == 0:
  83.         sys.exit(1)
  84. if len(auth_code) != 0:
  85.         host_create_data = json.dumps(json_data)

  86.         #create request object
  87.         request = urllib2.Request(zabbix_url,host_create_data)
  88.         for key in zabbix_header:
  89.                 request.add_header(key,zabbix_header[key])

  90.         #get host list
  91.         try:
  92.                 result = urllib2.urlopen(request)
  93.         except URLError as e:
  94.                 if hasattr(e,'reason'):
  95.                         print 'We failed to reach a server.'
  96.                         print 'Reason: ',e.reason
  97.                 elif hasattr(e,'code'):
  98.                         print 'The server could not fulfill the request.'
  99.                         print 'Error code: ',e.code
  100.         else:
  101.                 response = json.loads(result.read())
  102.                 result.close()

  103.                 #将所有的主机信息显示出来
  104.                 print response
  105.                 #显示主机个数
  106.                 print "Number Of Hosts: ",len(response['result'])

大家可以和上一篇获取主机信息的代码比较一下,其实没什么改变,就是json里的参数变了。而且还有好多代码可以分模块处理,比如登录代码可以分成一个模块,删除主机的代码就不贴了,不想害你们。给大家贴一下Zabbix API 官网的host.create的链接吧,希望大家有一个自学的好习惯。
https://www.zabbix.com/documentation/2.2/manual/api/reference/host/create


阅读(4572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~