利用zabbix api 带入 组ID 和 监控项目键值 获取所有主机的值

简介:

1
2
3
def   chaxun(groupid,items_value):  是自己写的,带入组 ID  和 监控项目键值,返回 主机和值的结果。
 
做了判断,如果这个主机没有想要的监控项目,就去除掉。
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/usr/bin/env python
#coding=utf-8
import  urllib.request
import  json
import  re
 
url  =  'http://XXXXXXXXXXXXXXXX/api_jsonrpc.php'
username  =  'Admin'
password  =  'XXXXX'
 
#登陆
def  requestJson(url,values):
     data  =  json.dumps(values).encode( 'utf-8' )
     req  =  urllib.request.Request(url, data, { 'Content-Type' 'application/json-rpc' })
     response  =  urllib.request.urlopen(req, data)
     =  response.read().decode(encoding = 'utf-8' )
     output  =  json.loads(a)
     try :
         message  =  output[ 'result' ]
     except :
         message  =  output[ 'error' ][ 'data' ]
         print (message)
         quit()
     return  output[ 'result' ]
 
 
##登陆的API
def  authenticate(url, username, password):
     values  =  { 'jsonrpc' '2.0' ,
               'method' 'user.login' ,
               'params' : {
                   'user' : username,
                   'password' : password
               },
               'id' '0'
               }
     idvalue  =  requestJson(url,values)
     return  idvalue
 
auth = authenticate(url,username,password)
 
 
 
##查询组ID {'groupid': '8', 'name': 'Switch'}
def  groups(auth):
     values  =  {
             "jsonrpc" : "2.0" ,
             "method" : "hostgroup.get" ,
               "params" :{
                     "output" :[ "groupid" , "name" ],
             },
               'auth' : auth,
               'id' '1'
               }
     output  =  requestJson(url,values)
     return  output
 
##查询主机
def  hosts(auth,a):
     values  =  {
             "jsonrpc" : "2.0" ,
             "method" : "host.get" ,
               "params" :{
                     "output" :[ "groupid" , "name" ],
                     "groupids" : a,
             },
               'auth' : auth,
               'id' '1'
               }
     output  =  requestJson(url,values)
     return  output
 
 
 
 
##查询主机项目
def  items(auth,a):
     values  =  {
             "jsonrpc" : "2.0" ,
             "method" : "item.get" ,
               "params" :{
                   "output" : [ "itemids" "key_" ],
                   "hostids" : a,
                   },
               'auth' : auth,
               'id' '1'
               }
     output  =  requestJson(url,values)
     return  output
 
##查询项目的历史值  'lastvalue': '-14760.0000'
def  his(auth,itemids):
     values  =  {
             "jsonrpc" : "2.0" ,
             "method" : "item.get" ,
               "params" :{
                     "output" "extend" ,
                       "history" 0 ,
                       "itemids" : itemids,
                       "sortfield" "itemid" ,
                       "sortorder" "DESC" ,
                       "limit" 1
                   },
               'auth' : auth,
               'id' '1'
               }
     output  =  requestJson(url,values)
     return  output
 
##查询触发项目值和监控项目
def  trigger(auth):
     values  =  {
               "jsonrpc" : "2.0" ,
               "method" "trigger.get" ,
               "params" : {
                       "output" : [
                         "description" ,
               ],
               "filter" : {
                   "hostid" "10108" ,
               },
               "selectItems" :"",
               "sortfield" "hostname" ,
               "sortorder" "DESC"
               },
               'auth' : auth,
               'id' '1'
               }
     output  =  requestJson(url,values)
     return  output
 
 
def   chaxun(groupid,items_value):
 
     host  =  hosts(auth, groupid)  ##获取所有主机
 
     host_name  =  []
     host_id  =  []
 
     for  in  host:
         host_id.append(i[ 'hostid' ])
         host_name.append(i[ 'name' ])
     hostall  =  dict ( zip (host_id, host_name))   ## 所有主机     '10118': '云主机:10.8.8.65','10119': '云主机:10.8.8.66',
 
 
     host_names  =  []
     host_ids  =  []
     for  in  host_id:     ##筛选,  有监控项目的   符合要求的主机ID,和主机名字
         host_id_value  =  items(auth, i)  ## [{'itemid': '29272', 'key_': 'BiosDate'},{'itemid': '29272', 'key_': 'BiosDate'}]
         for  index, value  in  enumerate (host_id_value):
             for  k, v  in  value.items():
                 if   items_value   in  v:            ## items_value
                     host_ids.append(host_id_value[index][ 'itemid' ])
                     host_names.append(i)
 
                     
                     
 
     host_names_list  =  []
     for  in    host_names:   ## 用符合要求的主机  获取它的名字
         for  k, v  in  hostall.items():
             if  in  k:
                 host_names_list.append(v)
 
 
     history_value  =  []
     for  in  host_ids:          ##查询主机ID的最新历史值
         history  =  his(auth, i)
         history_value.append(history[ 0 ][ 'lastvalue' ])
     host_value  =  dict ( zip (host_names_list, history_value))
 
     return   host_value   #返回主机和值的对应关系
 
ret  =  chaxun( 5 "ProcThreadCount.[2]" ) #  组ID 和 想要查询的监控项目
print (ret)









本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1955480,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
数据可视化 API 开发者
通俗易懂:一步步教你 Flask 项目自动生成 API 文档
Flasgger,作为一款强大的 Flask 扩展,自动从 Flask 应用中提取并生成 OpenAPI 规范文档,配备 SwaggerUI,为开发者提供了一条快捷通道,让 API 的文档编制和交互式测试变得简单易行。Flasgger 的设计原则是简化开发流程,通过与 Flask 框架的无缝整合,让开发者可以更专注于应用逻辑的构建。
|
4月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
38 3
|
3月前
|
数据采集 监控 测试技术
如何为数据采集项目选择合适的API
摘要: 在数据采集项目中,选择合适的API对于实现高效、可靠的数据集成至关重要。本文为技术人员和技术经理提供了一个综合指南,以便评估和选择满足特定业务需求的API。 引言: 在数字化转型的浪潮中,企业依靠数据驱动决策变得越来越重要。有效的数据采集策略可以提供深入的洞见,并推动业务增长。API作为连接不同服务和数据的桥梁,在此过程中扮演着关键角色。
|
4月前
|
前端开发 API Docker
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
43 0
|
8天前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用之阿里函数计算中。将本地电脑上的项目文件部署到阿里云函数计算(FC)上并实现对外提供API和WebUI如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
27 1
|
17天前
|
SQL 自然语言处理 数据挖掘
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
|
1月前
|
API 开发者
怎样获取某手根据ID取商品详情 API 返回值说明
根据ID取商品详情的API一般会返回商品的基本信息和销售信息
|
2月前
|
JSON Java API
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
25 1
|
2月前
|
NoSQL Java API
SpringBoot项目中防止表单重复提交的两种方法(自定义注解解决API接口幂等设计和重定向)
SpringBoot项目中防止表单重复提交的两种方法(自定义注解解决API接口幂等设计和重定向)
56 0
|
2月前
|
数据采集 监控 数据库
请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
【2月更文挑战第25天】请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
26 2

推荐镜像

更多