设为首页 收藏本站
查看: 595|回复: 0

[经验分享] 调用zabbix 分组api

[复制链接]

尚未签到

发表于 2017-12-31 20:40:26 | 显示全部楼层 |阅读模式
#!/usr/bin/env python  
#
coding:utf8  
import requests
  
import json
  
import os
  
#定义url头部信息
  
headers = {'Content-Type': 'application/json-rpc'}
  #zabbix地址
  
server_ip = '10.37.149.109'
  
#zabbix url
  
url = 'http://%s/zabbix/api_jsonrpc.php' %server_ip
  
#获取token
  
def getToken(username,passwd):
  

  #url = 'http://%s/zabbix/api_jsonrpc.php'%server_ip
  

  #headers = {'Content-Type': 'application/json-rpc'}
  

  username = 'admin'
  passwd = 'zabbix'
  data = {
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
  "user": username,
  "password": passwd
  },
  "id": 0
  }
  

  request = requests.post(url=url,headers=headers,data=json.dumps(data))
  dict = json.loads(request.text)
  return dict['result']
  
# 获取groupID
  
def getGroupid(token_num):
  group = {}
  data = {"jsonrpc": "2.0",
  "method":"hostgroup.get",
  "params":{
  "output":["groupid","name"]
  },
  "auth":token_num,
  "id": 0
  }
  

  request = requests.post(url=url,headers=headers,data=json.dumps(data))
  dict = json.loads(request.content)
  for i in  dict['result']:
  groupid = i['groupid']
  name = i['name']
  group[name] = groupid
  return group
  
# 获取group中的hosts信息
  
def getHost(token_num,group):
  dict_group = { }
  for k in group.keys():
  groupid = group[k]
  data = {
  "jsonrpc":"2.0",
  "method":"host.get",
  "params":{
  "output":["hostid","name"],
  "selectInterfaces": [
  "interfaceid",
  "ip"
  ],
  "groupids":groupid
  },
  "auth":token_num,
  "id":1,
  }
  request = requests.post(url=url,headers=headers,data=json.dumps(data))
  hosts = json.loads(request.content)
  hosts1 = hosts['result']
  ip_lists = getProc(hosts1)
  dict_group[k]=ip_lists
  return dict_group
  
# host ip排序
  
def getProc(hosts):
  list = hosts
  ip_lists = [ ]
  if list:
  for i in list:
  host = i['name']
  inter = i['interfaces']
  for j in inter:
  ip = j['ip']
  ip_lists.append(ip)
  ip_lists.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0') for i in x.split('.')] ), ''.join( [ i.rjust(3, '0') for i in y.split('.')] ) ))
  return ip_lists
  

  
# 进行ip组分类(同网段为一组)
  
def splitIp(ip):
  ip_split = ip.split('.')
  ip_class = ip_split[0:-1]
  return ip_class
  

  
# 进行ip组分类,
  
def getIp(dict_group):
  dicGroupIp = {}
  dicIp = {}
  ip_l = []
  for group,ip_list in dict_group.items():
  for ip in ip_list:
  ip_class = splitIp(ip)
  ip_group ='.'.join(ip_class)
  if ip_group not in dicIp:
  ip_l.append(ip)
  dicIp[ip_group] = ip_l
  else:
  dicIp[ip_group].append(ip)
  ip_l = [ ]
  

  dicGroupIp[group] = dicIp
  dicIp = { }
  return dicGroupIp
  
# 分别创建group组文件将ip地址写入。
  
def writrIpfile(dicGroupIp):
  for group_class,group_dic in dicGroupIp.items():
  ip_path = os.path.join('/python/zabbix2',group_class )
  with open(ip_path,'w')as fd:
  for ip_class,ip_list in group_dic.items():
  ip_class = '[' + ip_class + ']'
  #with open(ip_path,'a')as fd:
  fd.write(ip_class + '\n')
  for i in ip_list:
  fd.write(i + '\n')
  

  
if __name__ == "__main__":
  #server_ip = 'zmonitor.enn.cn'
  username = 'admin'
  passwd = 'zabbix'
  token_num = getToken(username,passwd)
  group = getGroupid(token_num)
  dict_group = getHost(token_num,group)
  dicIp = getIp(dict_group)
  writrIpfile(dicIp)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430356-1-1.html 上篇帖子: Zabbix监控tomcat 下篇帖子: zabbix脚本报警
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表