Python封裝zabbix-get接口得代碼分享

    Zabbix 是一款強大得開源網(wǎng)管監(jiān)控工具,該工具得客戶端與服務(wù)端是分開得,我們可以直接使用自帶得zabbix_get命令來實現(xiàn)拉取客戶端上得各種數(shù)據(jù),在本地組裝參數(shù)并使用Popen開子線程執(zhí)行該命令,即可實現(xiàn)批量監(jiān)測。

    封裝Engine類: 該類得主要封裝了Zabbix接口得調(diào)用,包括最基本得參數(shù)收集.

    import subprocess,datetime,time,mathclass Engine():    def __init__(self,address,port):        self.address = address        self.port = port    def GetValue(self,key):        try:            command = "get.exe -s {0} -p {1} -k {2}".format(self.address,self.port,key).split(" ")            start = datetime.datetime.now()            process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)            while process.poll() is None:                time.sleep(1)                now = datetime.datetime.now()                if (now - start).seconds > 2:                    return 0            return str(process.stdout.readlines()[0].split()[0],"utf-8")        except Exception:            return 0    # ping檢測    def GetPing(self):        ref_dict = {"Address":0,"Ping":0}        ref_dict["Address"] = self.address        ref_dict["Ping"] = self.GetValue("agent.ping")        if ref_dict["Ping"] == "1":            return ref_dict        else:            ref_dict["Ping"] = "0"            return ref_dict        return ref_dict    # 獲取主機組基本信息    def GetSystem(self):        ref_dict = { "Address" : 0 ,"HostName" : 0,"Uname":0 }        ref_dict["Address"] = self.address        ref_dict["HostName"] = self.GetValue("system.hostname")        ref_dict["Uname"] = self.GetValue("system.uname")        return ref_dict    # 獲取CPU利用率    def GetCPU(self):        ref_dict = { "Address": 0 ,"Core": 0,"Active":0 , "Avg1": 0 ,"Avg5":0 , "Avg15":0 }        ref_dict["Address"] = self.address        ref_dict["Core"] = self.GetValue("system.cpu.num")        ref_dict["Active"] = math.ceil(float(self.GetValue("system.cpu.util")))        ref_dict["Avg1"] = self.GetValue("system.cpu.load[,avg1]")        ref_dict["Avg5"] = self.GetValue("system.cpu.load[,avg5]")        ref_dict["Avg15"] = self.GetValue("system.cpu.load[,avg15]")        return ref_dict    # 獲取內(nèi)存利用率    def GetMemory(self):        ref_dict = { "Address":"0","Total":"0","Free":0,"Percentage":"0" }        ref_dict["Address"] = self.address        fps = self.GetPing()        if fps['Ping'] != "0":            ref_dict["Total"] = self.GetValue("vm.memory.size[total]")            ref_dict["Free"] = self.GetValue("vm.memory.size[free]")            # 計算百分比: percentage = 100 - int(Free/int(Total/100))            ref_dict["Percentage"] = str( 100 - int( int(ref_dict.get("Free")) / (int(ref_dict.get("Total"))/100)) ) + "%"            return ref_dict        else:            return ref_dict    # 獲取磁盤數(shù)據(jù)    def GetDisk(self):        ref_list = []        fps = self.GetPing()        if fps['Ping'] != "0":            disk_ = eval( self.GetValue("vfs.fs.discovery"))            for x in range(len(disk_)):                dict_ = {"Address": 0, "Name": 0, "Type": 0, "Free": 0}                dict_["Address"] = self.address                dict_["Name"] = disk_[x].get("{#FSNAME}")                dict_["Type"] = disk_[x].get("{#FSTYPE}")                if dict_["Type"] != "UNKNOWN":                    pfree = self.GetValue("vfs.fs.size["{0}",pfree]".format(dict_["Name"]))                    dict_["Free"] = str(math.ceil(float(pfree)))                else:                    dict_["Free"] = -1                ref_list.append(dict_)            return ref_list        return ref_list    # 獲取進程狀態(tài)    def GetProcessStatus(self,process_name):        fps = self.GetPing()        dict_ = {"Address": '0', "ProcessName": '0', "ProcessCount": '0', "Status": '0'}        if fps['Ping'] != "0":            proc_id = self.GetValue("proc.num["{}"]".format(process_name))            dict_['Address'] = self.address            dict_['ProcessName'] = process_name            if proc_id != "0":                dict_['ProcessCount'] = proc_id                dict_['Status'] = "True"            else:                dict_['Status'] = "False"            return dict_        return dict_    # 獲取端口開放狀態(tài)    def GetNetworkPort(self,port):        dict_ = {"Address": '0', "Status": 'False'}        dict_['Address'] = self.address        fps = self.GetPing()        if fps['Ping'] != "0":            port_ = self.GetValue("net.tcp.listen[{}]".format(port))            if port_ == "1":                dict_['Status'] = "True"            else:                dict_['Status'] = "False"            return dict_        return dict_    # 檢測Web服務(wù)器狀態(tài) 通過本地地址:端口 => 檢測目標地址:端口    def CheckWebServerStatus(self,check_addr,check_port):        dict_ = {"local_address": "0", "remote_address": "0", "remote_port": "0", "Status":"False"}        fps = self.GetPing()        dict_['local_address'] = self.address        dict_['remote_address'] = check_addr        dict_['remote_port'] = check_port        if fps['Ping'] != "0":            check_ = self.GetValue("net.tcp.port["{}","{}"]".format(check_addr,check_port))            if check_ == "1":                dict_['Status'] = "True"            else:                dict_['Status'] = "False"            return dict_        return dict_

    當(dāng)我們需要使用時,只需要定義變量調(diào)用即可,其調(diào)用代碼如下。

    from engine import Engineif __name__ == "__main__":    ptr_windows = Engine("127.0.0.1","10050")    ret = ptr_windows.GetDisk()    if len(ret) != 0:        for item in ret:            addr = item.get("Address")            name = item.get("Name")            type = item.get("Type")            space = item.get("Free")            if type != "UNKNOWN" and space != -1:                print("地址: {} --> 盤符: {} --> 格式: {} --> 剩余空間: {}".format(addr,name,type,space))

    到此這篇關(guān)于Python封裝zabbix-get接口得代碼分享得內(nèi)容就介紹到這了,更多相關(guān)Python封裝zabbix-get接口內(nèi)容請搜索之家以前得內(nèi)容或繼續(xù)瀏覽下面得相關(guān)內(nèi)容希望大家以后多多支持之家!

    聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。
    發(fā)表評論
    更多 網(wǎng)友評論1 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 中文精品一区二区三区四区| 无码人妻品一区二区三区精99| 亚洲日本一区二区| 99精品一区二区三区| 无码一区二区三区中文字幕| 精品在线一区二区| 亚洲欧洲一区二区| 日韩内射美女人妻一区二区三区| 无码人妻精品一区二区三区蜜桃| 秋霞无码一区二区| 久久精品视频一区二区三区| 久久婷婷久久一区二区三区| 无码人妻精品一区二区三区夜夜嗨| 亚洲国产视频一区| 无码精品蜜桃一区二区三区WW| 亚洲一区二区三区影院| 无码人妻精品一区二区蜜桃| 韩日午夜在线资源一区二区| 亚洲乱码一区二区三区国产精品| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 无码人妻精品一区二区三区久久久| 福利一区二区在线| 亚洲高清毛片一区二区| 三上悠亚国产精品一区| 亚洲AV无码一区二区三区国产 | 精品无码人妻一区二区免费蜜桃| 国产成人精品视频一区二区不卡| 性色AV一区二区三区| 亚洲一区二区三区播放在线| 无码av免费毛片一区二区| 无码人妻aⅴ一区二区三区| 内射一区二区精品视频在线观看| 国产成人一区二区三区在线| 亚洲乱码一区av春药高潮| 亚洲高清一区二区三区电影| 岛国精品一区免费视频在线观看| 亚洲av乱码一区二区三区香蕉| 日本精品少妇一区二区三区| 亚洲无删减国产精品一区| 动漫精品专区一区二区三区不卡 | 久久综合九九亚洲一区|