python调用zabbix api接口实时展示数据

简介:

    近日公司准备自已做一个运维管理平台,其中的监控部分,打算调用zabbix api接口来进行展示。

经过思考之后,计划获取如下内容:

    1、  获得认证密钥

    2、  获取zabbix所有的主机组

    3、  获取单个组下的所有主机

    4、  获取某个主机下的所有监控项

    5、  获取某个监控项的历史数据

    6、  获取某个监控项的最新数据

 

计划最后展示框架如下内容(这只是值方面,其它的会再加):

主机组1 ----主机名1---监控项1----当前值

                  ---监控项2----当前值

       ----主机名2----监控项1----当前值

                 ----监控项2----当前值

主机组2 ----主机名3---监控项1----当前值

                  ---监控项2----当前值

       ----主机名4----监控项1----当前值

                  ----监控项2----当前值

 

进入正题

1.     user.login方法获取zabbix server的认证结果

官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/user/login

python脚本:

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
32
[root@yang python] # cat auth.py
#!/usr/bin/env python2.7
#coding=utf-8
import  json
import  urllib2
# based url and required header
url  =  "http://1.1.1.1/zabbix/api_jsonrpc.php"
header  =  { "Content-Type" : "application/json" }
# auth user and password
data  =  json.dumps(
{
    "jsonrpc" "2.0" ,
    "method" "user.login" ,
    "params" : {
    "user" "Admin" ,
    "password" "zabbix"
},
"id" 0
})
# create request object
request  =  urllib2.Request(url,data)
for  key  in  header:
    request.add_header(key,header[key])
# auth and get authid
try :
    result  =  urllib2.urlopen(request)
except  URLError as e:
    print  "Auth Failed, Please Check Your Name AndPassword:" ,e.code
else :
    response  =  json.loads(result.read())
    result.close()
print "Auth Successful. The Auth ID Is:" ,response[ 'result' ]

python脚本运行结果:

1
2
[root@yang python] # python auth.py
Auth Successful. The Auth  ID  Is: a0b82aae0842c2041386a61945af1180

curl命令:

1
2
3
curl  - - X POST  - 'Content-Type:application/json'  - d '{ "jsonrpc" :
"2.0" , "method" : "user.login" , "params" :{ "user" : "admin" , "password" : "zabbix" }, "auth" :
null, "id" : 0 }' http: / / 1.1 . 1.1 / zabbix / api_jsonrpc.php

curl命令运行结果:

1
{ "jsonrpc" : "2.0" , "result" : "b895ce91ba84fe247e444817c6773cc3" , "id" : 0 }

 

2.     hostgroup.get方法获取所有主机组ID

把认证密钥放到脚本中,每次获取数据时都需要认证。此处是获取zabbix server上的所有主机组名称与ID号。

官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/hostgroup/get

python脚本:

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
32
33
34
35
36
37
38
39
40
[root@yang python] # catget_hostgroup_list.py
#!/usr/bin/env python2.7
#coding=utf-8
import  json
import  urllib2
# based url and required header
url  =  "http://1.1.1.1/zabbix/api_jsonrpc.php"
header  =  { "Content-Type" : "application/json" }
# request json
data  =  json.dumps(
{
    "jsonrpc" : "2.0" ,
    "method" : "hostgroup.get" ,
    "params" :{
        "output" :[ "groupid" , "name" ],
    },
    "auth" : "3c0e88885a8cf8af9502b5c850b992bd" # theauth id is what auth script returns, remeber it is string
    "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:
    if  hasattr (e,  'reason' ):
        print  'We failed to reach a server.'
        print  'Reason: ' , e.reason
    elif  hasattr (e,  'code' ):
        print  'The server could not fulfill the request.'
        print  'Error code: ' , e.code
else :
    response  =  json.loads(result.read())
    result.close()
    print  "Number Of Hosts: " len (response[ 'result' ])
    #print response
    for  group  in  response[ 'result' ]:
        print  "Group ID:" ,group[ 'groupid' ], "\tGroupName:" ,group[ 'name' ]

python脚本执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@yang python] # pythonget_hostgroup_list.py
Number Of Hosts:   12
Group  ID 11     Group Name: DB Schedule
Group  ID 14     Group Name: DG - WY - KD - Server
Group  ID 5      Group Name: Discovered hosts
Group  ID 7      Group Name: Hypervisors
Group  ID 2      Group Name: Linux servers
Group  ID 8      Group Name: monitored_linux
Group  ID 9      Group Name: qsmind
Group  ID 12     Group Name: qssec
Group  ID 13     Group Name: switch
Group  ID 1      Group Name: Templates
Group  ID 6      Group Name: Virtual machines
Group  ID 4      Group Name: Zabbix servers

curl命令:

1
curl  - - X POST  - 'Content-Type:application/json'  - '{"jsonrpc": "2.0","method":"hostgroup.get","params":{"output":["groupid","name"]},"auth":"11d2b45415d5de6770ce196879dbfcf1","id": 0}'  http: / / 1.1 . 1.1 / zabbix / api_jsonrpc.php

curl执行结果:

1
{ "jsonrpc" : "2.0" , "result" :[{ "groupid" : "11" , "name" : "DBSchedule" },{ "groupid" : "14" , "name" : "DG-WY-KD-Server" },{ "groupid" : "5" , "name" : "Discoveredhosts" },{ "groupid" : "7" , "name" : "Hypervisors" },{ "groupid" : "2" , "name" : "Linuxservers" },{ "groupid" : "8" , "name" : "monitored_linux" },{ "groupid" : "9" , "name" : "qsmind" },{ "groupid" : "12" , "name" : "qssec" },{ "groupid" : "13" , "name" : "switch" },{ "groupid" : "1" , "name" : "Templates" },{ "groupid" : "6" , "name" : "Virtualmachines" },{ "groupid" : "4" , "name" : "Zabbixservers" }], "id" : 0 }

 

3.     host.get方法获取单个主机组下所有的主机ID

根据标题2中获取到的主机组id,把主机组id填入到下边脚本中,就可以获得该主机组下所有的主机id

官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/host/get

python脚本:

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
32
33
34
35
36
37
38
39
40
[root@yang python] # cat get_group_one.py
#!/usr/bin/env python2.7
#coding=utf-8
import  json
import  urllib2
# based url and required header
url  =  "http://1.1.1.1/zabbix/api_jsonrpc.php"
header  =  { "Content-Type" : "application/json" }
# request json
data  =  json.dumps(
{
    "jsonrpc" : "2.0" ,
    "method" : "host.get" ,
    "params" :{
        "output" :[ "hostid" , "name" ],
        "groupids" : "14" ,
    },
    "auth" : "3c0e88885a8cf8af9502b5c850b992bd" # theauth id is what auth script returns, remeber it is string
    "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:
    if  hasattr (e,  'reason' ):
        print  'We failed to reach a server.'
        print  'Reason: ' , e.reason
    elif  hasattr (e,  'code' ):
        print  'The server could not fulfill the request.'
        print  'Error code: ' , e.code
else :
    response  =  json.loads(result.read())
    result.close()
    print  "Number Of Hosts: " len (response[ 'result' ])
    for  host  in  response[ 'result' ]:
        print  "Host ID:" ,host[ 'hostid' ], "HostName:" ,host[ 'name' ]

python脚本执行结果:

1
2
3
4
5
6
[root@yang python] # pythonget_group_one.py  
Number Of Hosts:   4
Host  ID 10146  Host Name: DG - WY - KD - 3F3B - 00
Host  ID 10147  Host Name: DG - WY - KD - 3F3B - 01
Host  ID 10148  Host Name: DG - WY - KD - 3F3B - 02
Host  ID 10149  Host Name: DG - WY - KD - 3F3B - 03

curl命令:

1
2
curl  - - X POST  - H 'Content-Type: application/json'  - '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid","name"],"groupids":"14"},"auth":"11d2b45415d5de6770ce196879dbfcf1","id": 0}' 
http: / / 1.1 . 1.1 / zabbix / api_jsonrpc.php

curl命令执行结果:

1
{ "jsonrpc" : "2.0" , "result" :[{ "hostid" : "10146" , "name" : "DG-WY-KD-3F3B-00" },{ "hostid" : "10147" , "name" : "DG-WY-KD-3F3B-01" },{ "hostid" : "10148" , "name" : "DG-WY-KD-3F3B-02" },{ "hostid" : "10149" , "name" : "DG-WY-KD-3F3B-03" }], "id" : 0 }

 

4.     itemsid.get方法获取单个主机下所有的监控项ID

根据标题3中获取到的所有主机id与名称,找到你想要获取的主机id,获取它下面的所有items

官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/item

python脚本:

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
32
33
34
35
36
37
38
39
40
41
[root@yang python] # cat get_items.py
#!/usr/bin/env python2.7
#coding=utf-8
import  json
import  urllib2
# based url and required header
url  =  "http://1.1.1.1/zabbix/api_jsonrpc.php"
header  =  { "Content-Type" : "application/json" }
# request json
data  =  json.dumps(
{
    "jsonrpc" : "2.0" ,
    "method" : "item.get" ,
    "params" :{
        "output" :[ "itemids" , "key_" ],
        "hostids" : "10146" ,
    },
    "auth" : "3c0e88885a8cf8af9502b5c850b992bd" # theauth id is what auth script returns, remeber it is string
    "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:
    if  hasattr (e,  'reason' ):
        print  'We failed to reach a server.'
        print  'Reason: ' , e.reason
    elif  hasattr (e,  'code' ):
        print  'The server could not fulfill the request.'
        print  'Error code: ' , e.code
else :
    response  =  json.loads(result.read())
    result.close()
    print  "Number Of Hosts: " len (response[ 'result' ])
    for  host  in  response[ 'result' ]:
        print  host
        #print "Host ID:",host['hostid'],"HostName:",host['name']

python脚本运行结果:

1
2
3
4
5
6
7
8
9
10
[root@yang python] # python get_items.py
Number Of Hosts:   54
{u 'itemid' : u '24986' , u 'key_' :u 'agent.hostname' }
{u 'itemid' : u '24987' , u 'key_' :u 'agent.ping' }
{u 'itemid' : u '24988' , u 'key_' :u 'agent.version' }
{u 'itemid' : u '24989' , u 'key_' :u 'kernel.maxfiles' }
{u 'itemid' : u '24990' , u 'key_' :u 'kernel.maxproc' }
{u 'itemid' : u '25157' , u 'key_' :u 'net.if.in[eth0]' }
{u 'itemid' : u '25158' , u 'key_' :u 'net.if.in[eth1]' }
… …

curl命令:

1
2
curl  - - X POST  - 'Content-Type:application/json'  - '{"jsonrpc":"2.0","method":"item.get","params":{"output":"itemids","hostids":"10146","search":{"key_":"net.if.out[eth2]"}},"auth":"11d2b45415d5de6770ce196879dbfcf1","id": 0}'  http: / / 1.1 . 1.1 / zabbix / api_jsonrpc.php
#此处加上了单个key的名称

curl命令执行结果:

1
{ "jsonrpc" : "2.0" , "result" :[{ "itemid" : "25154" }], "id" : 0 }

5.     history.get方法获取单个监控项的历史数据

根据第4项的获取到的所有items id的值,找到想要监控的那项,获取它的历史数据。

官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/history/get

python脚本:

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
32
33
34
35
36
37
38
39
40
41
42
43
[root@yang python] # catget_items_history.py
#!/usr/bin/env python2.7
#coding=utf-8
import  json
import  urllib2
# based url and required header
url  =  "http://1.1.1.1/zabbix/api_jsonrpc.php"
header  =  { "Content-Type" : "application/json" }
# request json
data  =  json.dumps(
{
    "jsonrpc" : "2.0" ,
    "method" : "history.get" ,
    "params" :{
        "output" : "extend" ,
        "history" : 3 ,
        "itemids" : "25159" ,
        "limit" : 10
    },
    "auth" : "3c0e88885a8cf8af9502b5c850b992bd" # theauth id is what auth script returns, remeber it is string
    "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:
    if  hasattr (e,  'reason' ):
        print  'We failed to reach a server.'
        print  'Reason: ' , e.reason
    elif  hasattr (e,  'code' ):
        print  'The server could not fulfill the request.'
        print  'Error code: ' , e.code
else :
    response  =  json.loads(result.read())
    result.close()
    print  "Number Of Hosts: " len (response[ 'result' ])
    for  host  in  response[ 'result' ]:
        print  host
        #print "Host ID:",host['hostid'],"HostName:",host['name']

python脚本执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
[root@yang python] # pythonget_items_history.py
Number Of Hosts:   10
{u 'itemid' : u '25159' , u 'ns' : u '420722133' ,u 'value' : u '3008' , u 'clock' : u '1410744079' }
{u 'itemid' : u '25159' , u 'ns' : u '480606614' ,u 'value' : u '5720' , u 'clock' : u '1410744139' }
{u 'itemid' : u '25159' , u 'ns' : u '40905600' ,u 'value' : u '6144' , u 'clock' : u '1410744200' }
{u 'itemid' : u '25159' , u 'ns' : u '175337062' ,u 'value' : u '2960' , u 'clock' : u '1410744259' }
{u 'itemid' : u '25159' , u 'ns' : u '202705084' ,u 'value' : u '3032' , u 'clock' : u '1410744319' }
{u 'itemid' : u '25159' , u 'ns' : u '263158421' ,u 'value' : u '2864' , u 'clock' : u '1410744379' }
{u 'itemid' : u '25159' , u 'ns' : u '702285081' ,u 'value' : u '7600' , u 'clock' : u '1410744439' }
{u 'itemid' : u '25159' , u 'ns' : u '231191890' ,u 'value' : u '3864' , u 'clock' : u '1410744499' }
{u 'itemid' : u '25159' , u 'ns' : u '468566742' ,u 'value' : u '3112' , u 'clock' : u '1410744559' }
{u 'itemid' : u '25159' , u 'ns' : u '421679098' ,u 'value' : u '2952' , u 'clock' : u '1410744619' }

curl命令:

1
curl  - - X POST  - 'Content-Type:application/json'  - '{"jsonrpc":"2.0","method":"history.get","params":{"history":3,"itemids":"25154","output":"extend","limit":10},"auth":"11d2b45415d5de6770ce196879dbfcf1","id": 0}'  http: / / 1.1 . 1.1 / zabbix / api_jsonrpc.php

curl命令运行结果:

1
{ "jsonrpc" : "2.0" , "result" :[{ "itemid" : "25154" , "clock" : "1410744134" , "value" : "4840" , "ns" : "375754276" },{ "itemid" : "25154" , "clock" : "1410744314" , "value" : "5408" , "ns" : "839852515" },{ "itemid" : "25154" , "clock" : "1410744374" , "value" : "7040" , "ns" : "964558609" },{ "itemid" : "25154" , "clock" : "1410744554" , "value" : "4072" , "ns" : "943177771" },{ "itemid" : "25154" , "clock" : "1410744614" , "value" : "8696" , "ns" : "995289716" },{ "itemid" : "25154" , "clock" : "1410744674" , "value" : "6144" , "ns" : "992462863" },{ "itemid" : "25154" , "clock" : "1410744734" , "value" : "6472" , "ns" : "152634327" },{ "itemid" : "25154" , "clock" : "1410744794" , "value" : "4312" , "ns" : "479599424" },{ "itemid" : "25154" , "clock" : "1410744854" , "value" : "4456" , "ns" : "263314898" },{ "itemid" : "25154" , "clock" : "1410744914" , "value" : "8656" , "ns" : "840460009" }], "id" : 0 }

 

6.     history.get方法获取单个监控项最后的值

只需把上个脚本中或curl中的limit参数改为1就可。



此时监控项的数据已拿到了,接下来的把它传给前台展示就行了。





     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1559123,如需转载请自行联系原作者




相关文章
|
4天前
|
数据采集 JSON API
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
|
4天前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
4天前
|
存储 缓存 监控
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。
|
4天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
5天前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
5天前
|
存储 监控 API
1688平台API接口实战:Python实现店铺全量商品数据抓取
本文介绍如何使用Python通过1688开放平台的API接口自动化抓取店铺所有商品数据。首先,开发者需在1688开放平台完成注册并获取App Key和App Secret,申请“商品信息查询”权限。接着,利用`alibaba.trade.product.search4trade`接口,构建请求参数、生成MD5签名,并通过分页机制获取全量商品数据。文中详细解析了响应结构、存储优化及常见问题处理方法,还提供了竞品监控、库存预警等应用场景示例和完整代码。
|
7天前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
8天前
|
JSON API 数据格式
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
|
13天前
|
数据采集 供应链 API
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
|
17天前
|
JSON API 数据格式
淘宝商品评论数据API接口详解及JSON示例返回
淘宝商品评论数据API接口是淘宝开放平台提供的一项服务,旨在帮助开发者通过编程方式获取淘宝商品的评论数据。这些数据包括评论内容、评论时间、评论者信息、评分等,对于电商分析、用户行为研究、竞品分析等领域都具有极高的价值。

热门文章

最新文章