Zabbix二次开发_02获取数据

最近准备写一个zabbix二次页面的呈现。打算调用zabbix api接口来进行展示。

具体流程以及获取的数据。

1、  获得认证密钥

2、  获取zabbix所有的主机组

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

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

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

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

认证获取

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

[[email protected] 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

[[email protected] python]# python auth.py

Auth Successful. The Auth ID Is: a0b82aae0842c2041386a61945af1180

curl命令:

1

2

3

curl -i -X POST -H ‘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}

主机ID获取

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

[[email protected] 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

[[email protected] 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 -i -X POST -H ‘Content-Type:application/json‘ -d
‘{"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}

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

[[email protected] 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

[[email protected] 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 -i -X POST -H‘Content-Type: application/json‘ -d
‘{"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}

获取主机数据

 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

[[email protected] 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

[[email protected] 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 -i -X POST -H ‘Content-Type:application/json‘ -d
‘{"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}

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

[[email protected] 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

[[email protected] 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 -i -X POST -H ‘Content-Type:application/json‘ -d
‘{"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}

history.get方法获取单个监控项最后的值只需把上个脚本中或curl中的limit参数改为1就可。

这样的话需要监控的数据就拿到了,下一步的就是前端页面的展示了。

时间: 2024-10-03 22:29:19

Zabbix二次开发_02获取数据的相关文章

李洪强iOS开发-网络新闻获取数据思路回顾

李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据  1.1 定义类方法返回单例对象 1.2 单例的实现,设置baseURL,设置超时时长等 02 创建一个分类, 传入一个类的参数返回一个数组,返回当前类的所有属性 用在模型中处理模型数据 03 创建图片轮播模型(model)类发送请求获取轮播图片的数据  3.1 定义属性: 标题,图片 定义两个类方法: (1)传入一个字典的参数

zabbix 二次开发之同步CMDB主机和模板绑定

最近在做zabbix的二次开发:发现zabbix在做自动化方便提供了强悍的支持,下面分享下CMDB和zabbix打通,把CMDB平台里面的所有机器同步到zabbix数据库,然后进行批量的模板绑定: 开发环境: zabbix :2.4 python:flask框架.前端bootstrap,jquey: 实现思路: 一. 在CMDB表和ZAbbix主机表里面建立第三张管理的表(定义叫缓存表):利用zabbix API把数据库里面的host插入到第三张缓存表:然后通过和CMDB库里面的比较把没有在缓存

zabbix 二次开发之调用api接口获取历史数据

前面一篇写了数据同步和模板绑定,zabbix其实能做的事还蛮多. zabbix提供了一个非常好的前端展示页面,但是我们总觉得不太好看:我们可以进一步调用他的api通过获取每一个监控项的历史数据,然后打到我们的监控平台上:主流的有rrdtool方式和highcharts方式:rrdtool略显复杂,还要学习rrdtool之类的几个聚合方式.相对而言我更喜欢highcharts的方式,出图简便,只需要提供数据和时间戳组成的json数据就够了,之前也介绍过具体:那么这里我们先拿出我们想要的数据. za

#IT明星不是梦# 自动化平台的构建与zabbix二次开发那些事

在前东家,我对于运维平台重新做了二次的改造,当然基于zabbix平台的功能也在不断的完善,相对于之前的基础架构,我们这次采用vue + element的前端架构,出图使用的是echart的方式.后端我们使用了restful的标准通信框架. 自动化架构 1.当然在讲到zabbix之前我们先看一下我们之前在老东家的时候做的相关的一些平台操作: 平台相关注解: 底层的数据主要使用CMDB来进行管理,CMDB开放APi接口给上层的发布系统.DB系统:当然各个子系统对接都是有权限审计. 数据录入统一使用脚

微信企业号开发:获取数据权限错误如何处理

开发微信企业号在调用获取成员时,总是提示没有权限的错误,自己知道是没有对应的权限,但如何分配权限呢? {"errcode":60011,"errmsg":"no privilege to access\/modify contact\/party\/agent "} 第一步登陆PC版企业号,点右侧击设置,再点击权限管理,再点击管理组,再点击通讯录权限的修改. 第二步 弹出选择权限的对话框,选择权限后点击确定,然后再测试就不会出现关于权限的错误了

Zabbix二次开发_03api列表

基于zabbix 3.0 https://www.zabbix.com/documentation/3.0/manual/api/reference Method reference This section provides an overview of the functions provided by the Zabbix API and will help you find your way around the available classes and methods. Monito

NX二次开发-UFUN获取显示在NX交互界面的对象UF_OBJ_is_displayable

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_disp.h> 5 #include <uf_obj.h> 6 #include <uf_part.h> 7 8 UF_initialize(); 9 10 //遍历当前显示部件 11 tag_t NextTag = NULL_TAG; 12 int Type1, SubType1; 13 do 14 { 15 NextTag = UF_OBJ_cycle_all

NX二次开发-UFUN获取对象的显示属性(图层,颜色,空白状态,线宽,字体,高亮状态)UF_OBJ_ask_display_properties

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_modl.h> 5 #include <uf_obj.h> 6 7 UF_initialize(); 8 9 UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔 10 double Corner_pt[3] = {0.0, 0.0, 0.0};//设置原点 11 char *Edge_Len[3] = {"100", &qu

NX二次开发-NXOpen获取边的端点NXOpen::Edge::GetVertices

1 NX9+VS2012 2 3 #include <NXOpen/Features_BlockFeatureBuilder.hxx> 4 #include <NXOpen/Features_FeatureCollection.hxx> 5 #include <NXOpen/NXException.hxx> 6 #include <NXOpen/Body.hxx> 7 #include <NXOpen/BodyCollection.hxx> 8