在以前的博客中谈到了利用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'])

如上图所示

最新文章

  1. 使用curl命令获取文件下载速度
  2. Software Development Principle
  3. php 对象中连贯执行方法
  4. XHR2 和[FromBody]使用说明
  5. Win7 登入提示临时漫游档案
  6. sql 2000 NOLOCK 和 ROWLOCK 和 UPDLOCK
  7. python(6)-shutil模块
  8. AJAX 原理(转摘)
  9. Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details. ShareSDK 也有这种错误
  10. Swift - 使用NSURLSession同步获取数据(通过添加信号量)
  11. String.Split()功能
  12. hashMap_使用
  13. Python求解登楼梯问题(京东2016笔试题)
  14. Compare Version Numbers leetcode
  15. ansible工具
  16. Ubuntu 安装 Redis和phpredis扩展
  17. 坚持:学习Java后台的第一阶段,我学习了那些知识
  18. mysql-5.7.17-winx64压缩版的安装包下载和安装配置
  19. ubuntu 16.04 安装中文语言包
  20. Ubuntu无法连接WiFi

热门文章

  1. 反射 go
  2. ORA-39095: Dump file space has been exhausted
  3. kvm网络虚拟化(vlan,bond,vlan+bond)(3)
  4. linux之磁盘管理,网络,计时任务
  5. 整合Django的信息显示框架messages framework
  6. flask 之(二) --- 视图|模版|模型
  7. Tensorflow实战第十一课(RNN Regression 回归例子 )
  8. 【Linux开发】linux设备驱动归纳总结(七):1.时间管理与内核延时
  9. C++学习笔记-多态
  10. NoSQL--couchdb