国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python從ZabbixAPI獲取信息及實(shí)現(xiàn)Zabbix-API 監(jiān)控的方法

2020-01-04 14:31:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Python編寫(xiě)從ZabbixAPI獲取信息

腳本用Python3.6執(zhí)行是OK的。# -*- coding: utf-8 -*-import jsonimport urllib.request, urllib.error, urllib.parseclass ZabbixAPI: def __init__(self):  self.__url = 'http://192.168.56.102/zabbix/api_jsonrpc.php'  self.__user = 'admin'  self.__password = 'zabbix'  self.__header = {"Content-Type": "application/json-rpc"}  self.__token_id = self.UserLogin() #登陸獲取token def UserLogin(self):  data = {   "jsonrpc": "2.0",   "method": "user.login",   "params": {    "user": self.__user,    "password": self.__password   },   "id": 0,  }  return self.PostRequest(data) #推送請(qǐng)求 def PostRequest(self, data):  request = urllib.request.Request(self.__url,json.dumps(data).encode('utf-8'),self.__header)  result = urllib.request.urlopen(request)  response = json.loads(result.read().decode('utf-8'))  try:   # print response['result']   return response['result']  except KeyError:   raise KeyError #主機(jī)列表 def HostGet(self,hostid=None,hostip=None):  data = {   "jsonrpc":"2.0",   "method":"host.get",   "params":{    "output":"extend",    "selectGroups": "extend",    "selectParentTemplates": ["templateid","name"],    "selectInterfaces": ["interfaceid","ip"],    "selectInventory": ["os"],    "selectItems":["itemid","name"],    "selectGraphs":["graphid","name"],    "selectApplications":["applicationid","name"],    "selectTriggers":["triggerid","name"],    "selectScreens":["screenid","name"]   },   "auth": self.__token_id,   "id":1,  }  if hostid:   data["params"]={    "output": "extend",    "hostids": hostid,    "sortfield": "name"   }  return self.PostRequest(data) #主機(jī)列表 def HostCreate(self,hostname,hostip,groupid=None,templateid=None):  data = {   "jsonrpc":"2.0",   "method":"host.create",   "params": {    "host": hostname,    "interfaces": [     {      "type": 1,      "main": 1,      "useip": 1,      "ip": hostip,      "dns": "",      "port": "10050"     }    ],    "groups": [     {      "groupid": groupid     }    ],    "templates": [     {      "templateid": templateid     }    ]   },   "auth": self.__token_id,   "id":1,  }  return self.PostRequest(data) #主機(jī)組列表 def HostGroupGet(self,hostid=None,itemid=None):  data = {   "jsonrpc":"2.0",   "method":"hostgroup.get",   "params":{    "output": "extend",    "hostids": hostid,    "itemids": itemid,    "sortfield": "name"   },   "auth": self.__token_id,   "id":1,  }  return self.PostRequest(data) #監(jiān)控項(xiàng)列表 def ItemGet(self,hostid=None,itemid=None):  data = {   "jsonrpc":"2.0",   "method": "item.get",   "params": {    "output": "extend",    "hostids": hostid,    "itemids": itemid,    "sortfield": "name"   },   "auth": self.__token_id,   "id":1,  }  return self.PostRequest(data) #模板列表 def TemplateGet(self, hostid=None,templateid=None):  data = {   "jsonrpc":"2.0",   "method": "template.get",   "params": {    "output": "extend",    "hostids": hostid,    "templateids": templateid,    "sortfield": "name"   },   "auth": self.__token_id,   "id":1,  }  return self.PostRequest(data) #圖像列表 def GraphGet(self,hostid=None,graphid=None):  data = {   "jsonrpc":"2.0",   "method": "graph.get",   "params": {    "output": "extend",    "hostids": hostid,    "graphids": graphid,    "sortfield": "name"   },   "auth": self.__token_id,   "id":1,  }  return self.PostRequest(data) #歷史數(shù)據(jù) def History(self,itemid,data_type):  data = {   "jsonrpc": "2.0",   "method": "history.get",   "params": {    "output": "extend",    "history": data_type,    "itemids": itemid,    "sortfield": "clock",    "sortorder": "DESC",    "limit": 30   },   "auth": self.__token_id,   "id": 2  }  return self.PostRequest(data)#測(cè)試:python manager.py shell ; from ZABBIX.ZabbixAPI import * ; main(),代碼修改了要ctrl+Z退出重進(jìn)def main(): zapi=ZabbixAPI() token=zapi.UserLogin() print(token) #39378ec03aa101c2b17d1d2bd6f4ef16 hosts=zapi.HostGet() print(hosts) #[{u'host': u'Zabbix server', u'hostid': u'10084', u'interfaces': [{u'interfaceid': u'1', u'ip': u'127.0.0.1'}]}]if __name__ == '__main__': main()

下面看下使用python實(shí)現(xiàn) Zabbix-API 監(jiān)控的方法

Python,ZabbixAPI,Zabbix-API,監(jiān)控

做運(yùn)維的朋友應(yīng)該知道,公司IDC機(jī)房經(jīng)常有上架、下架、報(bào)修和報(bào)廢的服務(wù)器。如果服務(wù)器數(shù)量很多的時(shí)候很容易造成監(jiān)控遺漏。

       大的互聯(lián)網(wǎng)公司把監(jiān)控系統(tǒng)和CMDB(資產(chǎn)管理系統(tǒng)|配置管理數(shù)據(jù)庫(kù)系統(tǒng))集成在一起,當(dāng)上架一臺(tái)新機(jī)器的時(shí)候CMDB里面會(huì)記錄相關(guān)的信息,Zabbix根據(jù)CMDB里面信息自動(dòng)Link相關(guān)的模塊,添加|刪除監(jiān)控。很多小的公司沒(méi)有資產(chǎn)管理系統(tǒng),但作為監(jiān)控的負(fù)責(zé)人應(yīng)該每天知道上架了哪些新的機(jī)器,確保能添加到Zabbix監(jiān)控里面。
      首先給大家說(shuō)一下腳本思路:

1)通過(guò)Nmap工具掃描網(wǎng)段,掃描出已經(jīng)使用的IP地址。
2)通過(guò)Nmap檢測(cè)已經(jīng)掃描IP的3389或者22端口是否開(kāi)放,可以判斷那些事windows機(jī)器,那些是Linux機(jī)器。
3)Linux下面通過(guò)ssh + hostname命令找出Linux主機(jī)名。
4)Windows下面通過(guò)nmblookup -A 命令找出Windows主機(jī)名。
5)用Python腳本讀掃描結(jié)果文件,把主機(jī)名寫(xiě)到列表里面。
6)用Zabbix python API 調(diào)用已經(jīng)監(jiān)控的主機(jī)名,寫(xiě)到列表里面。
7)兩個(gè)列表取交集,用for循環(huán)判斷哪些主機(jī)名沒(méi)有監(jiān)控。
8)發(fā)郵件通知監(jiān)控負(fù)責(zé)人。

    下面我分享一下我寫(xiě)的Python寫(xiě)的腳本,其中scan_machine.sh是我調(diào)用的用Shell寫(xiě)的關(guān)于Nmap掃描的腳本,scan_hostname.log是Nmap掃描的結(jié)果,里面內(nèi)容是IP 主機(jī)名。

#!/usr/bin/env python#create by:sfzhang 20140820#coding=utf-8import os,sysimport jsonimport urllib2import datetime,timefrom urllib2 import URLErrornmap_cmd = "/shell/machine/scan_machine.sh"def runCmd(command): global mail_cmd mail_cmd = '''mail -s "Report on not monitor Hosts of Zabbix" shifeng_zhang88 < /shell/machine/result/result.txt''' return os.system(command)runCmd(nmap_cmd)def nmap_host(): hostiplst = [] hostnamelst = [] f = file('/shell/machine/result/scan_hostname.log') for line in f.readlines(): hostip = line.split()[0] hostname = line.split()[1] hostiplst.append(hostip) hostnamelst.append(hostname) hostnamelst.sort() #print hostiplst return hostnamelst f.close()def zabbix_host(): zabbixhostlst= [] #based url and required header url = "http://192.168.161.128/api_jsonrpc.php" header = {"Content-Type": "application/json"} #request json data = json.dumps( {  "jsonrpc": "2.0", "method": "host.get", "params":{  "output":["hostid","name"],  "filter":{"host":""} },  #auth id "auth":"Zabbix Auth ID", "id": 1, }) #create request object request = urllib2.Request(url,data) for key in header:  request.add_header(key,header[key]) #get host list try: result = urllib2.urlopen(request) except URLError as e: print "The server could not fulfill the request.",e.reason else: reponse = json.loads(result.read()) result.close() #print "Number of Hosts:",len(reponse['result']) for host in reponse['result']:  #print "Host ID:",host['hostid'],"Host Name:",host['name']  zbxhosts=host['name']  zabbixhostlst.append(zbxhosts) zabbixhostlst.sort() return zabbixhostlst def main(): nmaphostlst = nmap_host()  zbxhostlst = zabbix_host()  diff = list(set(nmaphostlst) ^ set(zbxhostlst))  content = "/n" nomonitorlst = []  if len(diff) != 0:  for host in diff:   if host in nmaphostlst:   nomonitorlst.append(host) else:  sys.exit() #print zbxhostlst string = '/n'.join(nomonitorlst) f = file('/shell/machine/result/result.txt','w') f.write(string) f.flush() f.close() runCmd(mail_cmd)if __name__ == "__main__":  main()

   把腳本添加到crontab,每臺(tái)會(huì)收到關(guān)于那些主機(jī)沒(méi)有添加監(jiān)控的信息。

Python,ZabbixAPI,Zabbix-API,監(jiān)控

 總結(jié):

     1)Zabbix API相關(guān)信息可以查看官方詳細(xì)資料,看不懂英文的可以參考下面這篇文檔。http://paperplane.ruhoh.com/zabbix/intro-to-zabbix-api/

     2)通過(guò)該腳本可以知道那些主機(jī)沒(méi)有添加監(jiān)控,希望對(duì)大家有幫助,如果有更好的解決方法歡迎多多交流。  

以上所述是小編給大家介紹的使用Python腳本實(shí)現(xiàn)Zabbix-API 監(jiān)控,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到python教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 铅山县| 陆丰市| 陈巴尔虎旗| 巩义市| 嘉鱼县| 南投市| 顺昌县| 灵武市| 班戈县| 容城县| 绥棱县| 卢氏县| 曲松县| 微博| 北宁市| 丰城市| 白沙| 华坪县| 江川县| 九龙坡区| 周宁县| 塘沽区| 龙门县| 鄂尔多斯市| 浦江县| 扶沟县| 阳泉市| 从江县| 新丰县| 山阳县| 上饶县| 当雄县| 大姚县| 眉山市| 溧阳市| 务川| 屏南县| 九寨沟县| 山丹县| 甘孜| 垦利县|