随笔 - 911  文章 - 5  评论 - 94  阅读 - 243万

Python3通过Zabbix API获取数据

Zabbix API官方文档:https://www.zabbix.com/documentation/2.0/manual/appendix/api/api

复制代码
#!/usr/bin/env python
#For Python3
import urllib.request,urllib.parse,json,sys,importlib,argparse
importlib.reload(sys)


class zbxAPI():
    def __init__(self):
        self.url = "http://10.10.2.2/zabbix/api_jsonrpc.php"
        self.headers = {
                'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
                'Content-Type':'application/json'
                }
        self.authdata = {
                    "jsonrpc":"2.0",
                    "method":"user.login",
                    "params":
                            {
                                "user":"uname",
                                "password":"password"
                            },
                    "id":0
                }

    #获取Token(auth data)
    def get_token(self):
        res = self.post_request(self.authdata)
        if 'result' in res:
            token = res['result']
            return token
        else:
            return res['error']['data']

    #发送参数到Zabbix服务器端请求数据
    def post_request(self,postdata):
        postdata = bytes(json.dumps(postdata),'utf8')
        try:
            request = urllib.request.Request(self.url,postdata,headers=self.headers)
            reponse = urllib.request.urlopen(request).read()
            content  = json.loads(reponse.decode('utf8'))
            return content
        except Exception as ErrorMsg:
            return ErrorMsg
            exit()

    #获取host列表
    def list_hosts(self):
        host_list=[]
        get_data = {
            "jsonrpc":"2.0",
            "method":"host.get",
            "params":{
                   "output": "extend",
            },
            "auth":self.get_token(),
            "id":1,
        }
        res = self.post_request(get_data)
        reslist = res['result']
        for res in reslist:
            host_list.append(res['host'])
        return(host_list)


    #获取template列表
    def list_templates(self):
        template_list=[]
        get_data = {
            "jsonrpc":"2.0",
            "method":"template.get",
            "params":{
                   "output": "extend",
            },
            "auth":self.get_token(),
            "id":1,
        }
        res = self.post_request(get_data)
        reslist = res['result']
        for res in reslist:
            print(res['templateid'] + ',' + res['host'])

    #测试认证是否成功,成功则打印auth data
    def Auth_test(self):
        print(self.get_token())

m=zbxAPI()
# m.Auth_test()
# print(m.list_hosts())
m.list_templates()


复制代码

 

posted on   momingliu11  阅读(2025)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2016-05-27 多进程、多线程处理文件对比
2016-05-27 大文件拆分
2014-05-27 读取xml格式文件
2013-05-27 Network Monitor
2013-05-27 循环while、foreach-object
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示