python3 使用 zabbix_client模块

除了上一篇使用自己定义的函数,我们还可使用pipy提供的zabbix_client模块,这样就不用我们自己去写登录函数,只要在模块开始指定用户名密码即可,方便很多。

#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = ‘无名小妖‘
import time
from zabbix_client import ZabbixServerProxy

ZABBIX_URL = ‘http://alyz.zabbix.com‘
ZABBIX_USERNAME = "Admin"
ZABBIX_PASSWORD = "zabbix"

class Zabbix:

    def __init__(self):
        self.zb = ZabbixServerProxy(ZABBIX_URL)
        self.zb.user.login(user=ZABBIX_USERNAME, password=ZABBIX_PASSWORD)

    def get_hostgroup(self):
        """
        查询组所有组获取组id和name
        :return: groupid和name
        """
        data = {
           "output": [‘groupid‘, ‘name‘]   # "output": "extend",   查看所有字段
        }
        ret = self.zb.hostgroup.get(**data)
        return ret

    def get_hostid(self, groupids=None):
        """
        通过组id获取相关组内的所有主机
        :param groupids: None表示获取所有组的主机,可以通过列表,元组等传入多个组id
        :return: "hostid"和"name"
        """
        data = {
            "output": ["hostid", "name"],
            "groupids": groupids
        }
        ret = self.zb.host.get(**data)
        return ret

    def item_get(self, hostids=None):
        """
        通过获取的hostid查找相关监控想itemid
        :param hostids: None表示获取所有主机的item,可以通过列表,元组等传入多个itemid
        :return: "itemids", "key_"
        """
        data = {
            "output": ["itemids", "key_"],
            "hostids": hostids,
        }

        ret = self.zb.item.get(**data)
        return ret

    def history_get(self, itemid, i, limit=10):
        """
        通过itemid 获取相关监控项的历史数据
        :param itemid:
        :param i: 0 - numeric float; 1 - character; 2 - log; 3 - numeric unsigned; 4 - text.
        :param limit: 获取数据的数量
        :return:
        """
        data = {"output": "extend",
                "history": i,
                "itemids": [itemid],
                "limit": limit
                }
        ret = self.zb.history.get(**data)
        return ret

    def add_zabbix_host(self, hostname="test_zabbix", ip="192.168.10.100", groupid="2"):
        """
        添加主机并且指定到组(传入主机名,IP地址和组ID)
        :param hostname:
        :param ip:
        :param groupid:
        :return:
        """
        data = {
            "host": hostname,
            "interfaces": [
                {
                    "type": 1,
                    "main": 1,
                    "useip": 1,
                    "ip": ip,
                    "dns": "",
                    "port": "10050"
                }
            ],
            "groups": [
                {
                    "groupid": groupid
                }
            ]
        }
        ret = self.zb.host.create(data)
        return ret

    def get_template(self):
        """
        查看现有模板
        :return:
        """
        datalist = []
        datadict = {}
        data = {
            "output": ["templateid", "name"]
        }
        ret = self.zb.template.get(data)
        for i in ret:
            datadict[i[‘name‘]] = i[‘templateid‘]
            datalist.append(datadict)
        return datalist

    def link_template(self, hostid=10156, templateids=10001):
        """
        关联主机到模板
        :param hostid:
        :param templateids:
        :return:
        """
        data = {
            "hostid": hostid,
            "templates": templateids
        }

        ret = self.zb.host.update(data)
        return ret

    def create_maintenance(self, name="test", hostids=10156, time=2):
        """
        添加维护周期
        :param name:
        :param hostids:
        :param time:
        :return:
        """
        data = {
            "name": name,
            "active_since": 1458142800,
            "active_till": 1489678800,
            "hostids": [
                hostids
            ],
            "timeperiods": [
                {
                    "timeperiod_type": 0,
                    "period": 3600
                }
            ]
        }
        ret = self.zb.maintenance.create(data)
        self.host_status(10130, 1)
        return ret

    def get_maintenance(self):
        """
        获取维护周期
        :return:
        """
        data = {
            "output": "extend",
            "selectGroups": "extend",
            "selectTimeperiods": "extend"
        }
        ret = self.zb.maintenance.get(data)
        return ret
    #
    # def del_maintenance(self, maintenanceids):
    #     """
    #     获取维护周期之后,通过传入maintenanceid删除维护周期
    #     :param maintenanceids:
    #     :return:
    #     """
    #     return self.zb.maintenance.delete(maintenanceids)

    def host_status(self, hostid, status):
        """
        添加维护周期时候需要吧zabbix_host设置成非监控状态
        :param hostid:
        :param status:
        :return:
        """
        data = {
            "hostid": hostid,
            "status": status
        }
        return self.zb.host.update(data)

    # def host_del(self, hostids=10155):
    #     """
    #     通过hostids删除主机id,顺带也删除模板
    #     :param hostids:
    #     :return:
    #     """
    #     return self.zb.host.delete(hostids)

if __name__ == "__main__":
    zabbix_server = Zabbix()
    print(zabbix_server.get_hostgroup())
    print(zabbix_server.get_hostid([2, 1]))
    print(zabbix_server.item_get())
    # data = zabbix_server.history_get("24889",0)
    # print(zabbix_server.add_zabbix_host())
    print(zabbix_server.get_template())
    # print(data[0][‘Template OS Linux‘])
    # print(zabbix_server.link_template())
    # print(zabbix_server.create_maintenance())
    # print(zabbix_server.host_del(10155))
    # print(zabbix_server.get_maintenance())
    # print(zabbix_server.del_maintenance(15)))

  

时间: 2024-11-06 00:51:29

python3 使用 zabbix_client模块的相关文章

python3使用csv模块读写csv文件

python3使用csv模块读写csv文件 读取csv文件: import csv #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() with open("XXX.csv","r",encoding="utf-8") as csvfile: #读取csv文件,返回的是迭代类型 read = csv.reader(csvfile) for i in read: print(i) 存

Python3 内建模块 hashlib、itertools、HTMLParser、urllib

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'.如果有人篡改了你的文章,并发表为'how to use pytho

Python3.4 asyncio模块简介

这个模块提供了在单个线程上使用协程,适用基于网络及其他资源,有关IO密集型的服务端及客户端程序. 模块细节如下: 适用于多系统可拆卸的事件循环(event loop)系统: 数据传输(transport)和协议抽象(类似于Twisted): 对TCP.UDP.SSL.子进程管道.延时调用(delayed calls)和其他一些系统特有的传输协议支持的实现: a Future class that mimics the one in the concurrent.futures module, b

Python3 内建模块 datetime/collections/base64/struct

datetime 我们先看如何获取当前日期和时间: >>> from datetime import datetime >>> now = datetime.now() # 获取当前datetime >>> print(now) 2015-05-18 16:28:07.198690 >>> print(type(now)) <class 'datetime.datetime'> 注意到datetime是模块,datetim

python3.7 time模块

#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 time模块 #time模块没有time.py文件,是内置到解释器中的模块 #三种时间表示方式 ''' 1.时间戳(timestamp): 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 2.格式化的时间字符串:"2018-09-03 10:02:01" 3.元组(struct_time):struct_time元组

python3.7 random模块

#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 random模块 import random #随机模块 # res0 = random.random() #从0~1中间随机产生一个小数点后16位的浮点数 # res1 = random.uniform(1,3) #从1~3中间随机产生一个小数点后16位的浮点数 # res2 = random.randint(1,3) #[1,3] # res3 = random.ra

python3.7 json模块

#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 json模块 ''' 要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式, 比如XML,但更好的方法是序列化为JSON, 因为JSON表示出来就是一个字符串,可以被所有语言读取, 也可以方便地存储到磁盘或者通过网络传输. JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便. ''' ''' 对象(变量)从内存中变成可存储或传输的过

python3.7 os模块

#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 os模块 #os模块是与操作系统交互的一个接口 # os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 # os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd # os.curdir 返回当前目录: ('.') # os.pardir 获取当前目录的父目录字符串名:('..') # os.m

Python3中正则模块re.compile、re.match及re.search

本文实例讲述了Python3中正则模块re.compile.re.match及re.search函数用法.分享给大家供大家参考,具体如下: re模块 re.compile.re.match. re.search re 模块官方说明文档 正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义. 比如表示 '\n',可以写 r'\n',或者不适用原生字符 '\n'. 推荐使用 re.match re.compile() 函数 编译正则表达式模式,