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

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

    封裝Engine類: 該類得主要封裝了Zabbix接口得調用,包括最基本得參數收集.

    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    # 獲取內存利用率    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    # 獲取磁盤數據    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    # 獲取進程狀態    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_    # 獲取端口開放狀態    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服務器狀態 通過本地地址:端口 => 檢測目標地址:端口    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_

    當我們需要使用時,只需要定義變量調用即可,其調用代碼如下。

    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))

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

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

    返回頂部

    主站蜘蛛池模板: 风流老熟女一区二区三区| asmr国产一区在线| 亚洲欧美日韩中文字幕在线一区| 亚洲AⅤ无码一区二区三区在线| 国产成人AV区一区二区三 | 亚无码乱人伦一区二区| 婷婷亚洲综合一区二区| 国产精品乱码一区二区三区| 国产成人精品一区二区三区免费| 久久久综合亚洲色一区二区三区 | 国产vr一区二区在线观看| 亚洲第一区精品日韩在线播放| 国模视频一区二区| 91一区二区三区| 精品一区二区三区视频| 无码人妻精品一区二区在线视频| 色欲AV蜜桃一区二区三| 丝袜人妻一区二区三区| 午夜一区二区在线观看| 韩国福利一区二区美女视频| 一区二区三区在线观看免费| 亚洲av无码一区二区三区天堂古代| 麻豆视频一区二区三区| 亚洲av成人一区二区三区在线播放| 亚洲综合色自拍一区| 国产美女口爆吞精一区二区| 国产成人一区二区三区高清| 国产伦精品一区二区三区女| 制服丝袜一区在线| 一区二区三区观看免费中文视频在线播放 | 国产伦精品一区二区三区免费下载| 国产午夜精品一区理论片| 波多野结衣在线观看一区| 国产小仙女视频一区二区三区| 国产短视频精品一区二区三区| 亚洲av不卡一区二区三区| 亚洲AV无码一区二区三区DV | 欧美av色香蕉一区二区蜜桃小说 | 久久免费视频一区| 国产自产V一区二区三区C| 日韩精品视频一区二区三区|