python3 调用zabbix API实现批量增加删除主机,主机各种监控项------实战
在以前的博客中谈到了利用zabbix接口来对主机进行批量的增删改查
这里在不用环境中实战遇到了不同问题,这里记录下来以便后续review
以下为实战中获取token的代码,在zabbix标准接口文档中 写道
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
但是由于部署的方式不同 在生产环境中
http://XXX/api_jsonrpc.php 应该是这个地址(这里卡了很久 由于不是本人部署)
import requests
import json
def getToken():
url = 'http://XXX/api_jsonrpc.php' headers = {'Content-Type': 'application/json'}
auth = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "XXXXX", ###验证
"password": "XXXXX#123"
},
"id": 1,
"auth": None
}
response = requests.post(url, data=json.dumps(auth), headers=headers)
authid = json.loads(response.text)['result'] ### auth的id 也就是token print(authid) getToken()
结果如下
获取到token
获取到token之后由于需要批量加聚合图形,所以我们先看下加聚合图形需要那些参数 https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/screen/create
{
"jsonrpc": "2.0",
"method": "screen.create",
"params": {
"name": "Graphs",
"hsize": ,
"vsize": ,
"screenitems": [
{
"resourcetype": ,
"resourceid": "",
"rowspan": ,
"colspan": ,
"x": ,
"y":
}
]
},
"auth": "038e1d7b1735c6a5436ee9eae095879e",
"id":
}
上图是一个典型的request,其中 jsonrpc method 数固定的
hsize:水平尺寸 可以简单的理解为 这个聚合图形最多可以有多少行
vsize:垂直尺寸 同理,这个聚合图形最多可以有多少列
resourcetye :图形的类型 0 代表graph 1 简单graph 2 文本 。。。。
resourceid :ID of the screen that the item belongs to. 也就是说需要加入的图形它的ID是多少,那么图形ID怎么获取呢? 接下来讲解
rowspan:屏幕项目将跨越的行数。
colspan:屏幕项目将跨越的列数。 意思就是图形占多少行多少列 这里 默认为0就行(1行1列) 不需要太大
x: 代表列!!!!!!!!!!!!!不是行
y: 这里的x y代表的是图形的坐标 0 0 就是第一行第一列 0 1 第一行第二列 依次类推(这里需要依靠前面设置的hsize,vsize不能超过了),测试的时候这里面体比较大,想要把多个监控放在一行:解决办法是x相同y不同
auth : 认证信息
id : 识别方法
下面是我的代码
def create_screen():
neirong = {
"jsonrpc": "2.0",
"method": "screen.create",
"params": {
"name": "Graphsall(disk,cpu,mem)",
"hsize": 3, ###代表创建的时候 有多少列
"vsize": 45, ## 行
"screenitems": [
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 0},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 0},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 0},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 1},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 1},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 1},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 2},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 2},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 2},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 3},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 3},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 3},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 4},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 4},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 4},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 5},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 5},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 5},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 6},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 1, 'y': 6},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 2, 'y': 6},
{'resourcetype': 0, 'resourceid': '', 'rowspan': 1, 'colspan': 1, 'x': 0, 'y': 7},
]
},
"auth": authid,
"id": 4
}
这里用的是笨办法 将所有数据想办法生成统一格式,然后批量加,其实可以潜逃变量来完成
这里面有个resourceid 获取的方法如下
def get_graid():
global graphid
graphid = []
for i in hostidlist:
neirong = {
"jsonrpc": "2.0",
"method": "graph.get",
"params": {
"output": "extend",
"hostids": i,
"sortfield": "name"
},
"auth": authid,
"id": 1
}
response1 = requests.post(url, data=json.dumps(neirong), headers=headers)
result1 = (response1.text)
result2 = json.loads(result1)
#print("zhujiname is %s"%i)
#print("reeeeeeeeee is %s"%result2) graphid11 = []
#result2['result']代表的是一个主机的全部图形
# print(result2)
for i in result2['result']:
if i['name']=='CPU utilization' or i['name']=='Memory usage' or i['name']=='Disk space usage /' :
graphid11.append(i['graphid']) if(len(graphid11)) == 3: ## 如果等于3 那么再次循环把这些记录下来。。 比较笨拙 需要改进
for i in result2['result']:
if i['name']=='CPU utilization' or i['name']=='Memory usage' or i['name']=='Disk space usage /' :
graphid.append(i['graphid'])
#获取到的图形id的列表
print(graphid)
上面的程序对每个主机的图形数量进行了比较,因为我们目的是 每台主机在聚合图形中显示一行 分别是CPU utilization Memory usage Disk space usage
上图上还有个hostid变量这个变量需要gethost来获取
import requests
import json url = 'http://zabbix.XXXXX.com.cn/api_jsonrpc.php'
headers = {'Content-Type': 'application/json'}
def getToken():
url = 'http://zabbix.pagoda.com.cn/api_jsonrpc.php' headers = {'Content-Type': 'application/json'}
auth = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "XXXX", ###验证
"password": "XXX"
},
"id": 1,
"auth": None
}
response = requests.post(url, data=json.dumps(auth), headers=headers)
global authid
authid = json.loads(response.text)['result'] ### auth的id 也就是token def getHosts():
neirong = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": authid
}
response = requests.post(url, data=json.dumps(neirong), headers=headers)
result1=(response.text)
result2=json.loads(result1) global hostidlist
hostidlist=[]
for i in result2['result']:
#将主机放到一个列表里面
hostidlist.append(i['hostid'])
如上图所示
python3 调用zabbix API实现批量增加删除主机,主机各种监控项------实战的更多相关文章
- 利用python3 调用zabbix接口完成批量加聚合图形(screens)
在上一篇博客中,我们完成的利用python3 调用zabbix接口批量增加主机,增加主机的item,增加主机的图形! 接下来我们完成批量增加主机的screen 首先我们要增加screen需要哪些参数呢 ...
- python3调用zabbix api
前言 今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西. 需求 我们需要查一个文件内容如下: cat /ops/flume_hosts node1 node2 需要把这个文件 ...
- python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools() 调用zabbi ...
- python 调用zabbix api实现查询主机信息,输出所有主机ip
之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...
- 关于python调用zabbix api接口
因公司业务需要,引进了自动化运维,所用到的监控平台为zbbix3.2,最近正在学习python,计划使用python调用zabbix api接口去做些事情,如生成报表,我想最基本的是要取得zabbix ...
- Zabbix Agent active批量调整客户端为主动模式监控
Zabbix Agent active批量调整客户端为主动模式监控 zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下: 1. ...
- zabbix模板的自动发现规则(ldd)实现被监控项自动发现
zabbix模板的自动发现规则(ldd)实现被监控项自动发现 自动发现规则(ldd)用途说明 在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem disco ...
- 使用Python调用Zabbix API
Zabbix API官方文档: https://www.zabbix.com/documentation/4.0/zh/manual/api 1.向 api_jsonrpc.php 发送HTTP_PO ...
- Python调用zabbix API批量添加主机 (读取Excel)
本文转载自:http://blog.mreald.com/178 Zabbix可以通过自发现添加主机,不过有时候不准确,通过API添加会更加准确! 脚本使用的跟zabbix相关的内容.参考的是zabb ...
随机推荐
- hibernate映射配置
1. 普通字段类型 2. 主键映射 单列主键映射 多列作为主键映射 主键生成策略,查看api: 5.1.2.2.1. Various additional generators 数据库: Q:一个 ...
- [redis]redis实现分页的方法
每个主题下的用户的评论组装好写入Redis中,每个主题会有一个topicId,每一条评论会和topicId关联起来,大致的数据模型如下:{ topicId: 'xxxxxxxx', comments: ...
- SAS数据挖掘实战篇【一】
SAS数据挖掘实战篇[一] 1数据挖掘简介 1.1数据挖掘的产生 需求是一切技术之母,管理和计算机技术的发展,促使数据挖掘技术的诞生.随着世界信息技术的迅猛发展,信息量也呈几何指数增长,如何从巨量.复 ...
- springboot集成springcloud,启动时报错java.lang.AbstractMethodError: null
出现这个问题是springboot和springcloud的版本不匹配. 我此处使用了springboot 2.0.4.RELEASE,springcloud 使用了Finchley.SR2. 修改方 ...
- gin框架教程:代码系列demo地址
gin框架教程代码地址: https://github.com/jiujuan/gin-tutorial demo目录: 01quickstart 02parameter 03route 04midd ...
- CTF—攻防练习之HTTP—SQL注入(SSI注入)
主机:192.168.32.152 靶机:192.168.32.161 ssI是赋予html静态页面的动态效果,通过ssi执行命令,返回对应的结果,若在网站目录中发现了.stm .shtm .shtm ...
- python基础知识(正则表达式)
使用正则表示式分割字符串 split() re.split(pattern,string,[maxsplit],[flags]) re.split(指定一个模式字符串,要匹配的字符串,最大的拆分次数, ...
- C++学习笔记-C++对C语言的函数拓展
内联函数 内联函数是指用inline关键字修饰的函数.在类内定义的函数被默认成内联函数.内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质 inline关键字只是给编译器一个建议,编译 ...
- 牛客小白月赛12-C(欧拉筛解积性方程)
题目链接:https://ac.nowcoder.com/acm/contest/392/C 题意:给定n,求: 思路:令res[i]=iN (%MOD),因为xn是一个积性函数,即(x*y)n=x ...
- [转帖]超能课堂:Intel平台芯片组变迁史
https://www.expreview.com/69419.html 现在我们在购买电脑时一个最重要的硬件就是主板了.作为承载CPU等主要硬件的平台,其最重要的功能就是连接外围设备,扩展计算机.但 ...