#!/usr/bin/env python
# -*-coding:utf-8 -*-
import requests
import json class AutoZabbix:
def __init__(self, hostname, visibleName, ip, groupname, template_name):
self.url = 'http://192.168.67.230/zabbix/api_jsonrpc.php'
self.headers = {'Content-Type': 'application/json'}
auth = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "admin", ###验证
"password": ""
},
"id": 1,
"auth": None,
}
response = requests.post(self.url, data=json.dumps(auth), headers=self.headers)
# print(response.text)
self.authid = json.loads(response.text)['result'] ### auth的id 也就是token
self.hostname = hostname
self.visibleName = visibleName
self.ip = ip
self.add_template = [] # 生成列表,用于给指定IP的主机添加模板
# self.add_group = [] # 给指定IP的主机添加组 self.group_name = groupname # 多个组以逗号分隔,组名不能包含逗号[不支持多个组??!]
self.template_name = list(template_name.split(',')) # 多个模板以逗号分隔,模板名不能包含逗号 def get_template(self):
"""
输入模版名,返回模版ID
:return:
"""
content = {
"jsonrpc": "2.0",
"method": "template.get",
"params": {
# "output": "extend",
# "output": ["host", "templateid"],
"output": "templateid",
"filter": {
"host": self.template_name
}
},
"auth": self.authid,
"id": 2
}
response = requests.post(self.url, data=json.dumps(content), headers=self.headers)
result = json.loads(response.text)['result']
# print(result)
for item in result:
for k, v in item.items():
self.add_template.append(v)
return self.add_template def get_group(self):
"""
输入组名,查询返回组ID
"""
content = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
# "output": "extend",
"output": "groupid",
"filter": {
"name": self.group_name
}
},
"auth": self.authid,
"id": 3
} response = requests.post(self.url, data=json.dumps(content), headers=self.headers)
response_dic = json.loads(response.text)
print(response_dic)
groupid = response_dic['result'][0]['groupid']
return groupid # def get_hosts(self):
# content = {
# "jsonrpc": "2.0",
# "method": "host.get",
# "params": {
# "output": [
# "hostid",
# "host"
# ],
# "selectInterfaces": [
# "interfaceid",
# "ip"
# ]
# },
# "id": 3,
# "auth": self.authid
# }
#
# response = requests.post(self.url, data=json.dumps(content), headers=self.headers)
# # response_dic = json.loads(response.text)
# print(response.text) def create_host(self):
"""
添加主机,链接模版、添加组
:return:
"""
print(self.get_template())
content = {
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": self.hostname,
"name": self.visibleName,
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": self.ip,
"dns": "",
"port": ""
}
],
"groups": [
{
"groupid": self.get_group()
}
],
"templates": [
{
"templateid": ''
},
{
"templateid": ''
},
{
"templateid": ''
}
]
# "inventory_mode": 0,
# "inventory": {
# "macaddress_a": "01234",
# "macaddress_b": "56768"
# }
},
"auth": self.authid,
"id": 21
}
# print(json.dumps(content))
response = requests.post(self.url, data=json.dumps(content), headers=self.headers)
return response.text hostname = '192.168.67.227'
visibleName = 'vpn'
ip = '192.168.67.227'
groupname = 'office_server'
template_name = 'disk-IO-status,Template ICMP Ping,Template OS Linux,Template Linux TCP Status' # 模板之间用逗号分隔 obj = AutoZabbix(hostname, visibleName, ip, groupname, template_name)
response = obj.create_host()
print(response)

https://www.jianshu.com/p/d5faa110e78e

# 登录:
#!/usr/bin/env python
import urllib2
import json
#定义URL账户密码
url = 'http://zabbixip/zabbix/api_jsonrpc.php'
username = 'admin'
password = 'password'
#定义通过HTTP方式访问API地址的函数,后面每次请求API的各个方法都会调用这个函数
def requestJson(url,values):
data = json.dumps(values)
req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
response = urllib2.urlopen(req, data)
output = json.loads(response.read())
# print output
try:
message = output['result']
except:
message = output['error']['data']
print message
quit() return output['result'] #API接口认证的函数,登录成功会返回一个Token
def authenticate(url, username, password):
values = {'jsonrpc': '2.0',
'method': 'user.login',
'params': {
'user': username,
'password': password
},
'id': ''
}
idvalue = requestJson(url,values)
return idvalue # API
#!/usr/bin/env python
#coding=utf-8
import sys
import argparse
import urllib2
import json #定义更新action函数
def mediatypeupdate(mediatypeid,status,auth):
values = {'jsonrpc': '2.0',
'method': 'mediatype.update',
'params': {
"mediatypeid": mediatypeid,
"status": status
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
#定义读取状态函数
def triggerget(auth):
values = {'jsonrpc': '2.0',
"method":"trigger.get",
"params": {
"output": [
"triggerid",
"description",
"priority"
],
"filter": {
"value": 1
},
"expandData":"hostname",
"sortfield": "priority",
"sortorder": "DESC"
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output #定义通过ip获取主机id的函数
def ipgetHostsid(ip,url,auth):
values = {'jsonrpc': '2.0',
'method': 'host.get',
'params': {
'output': [ "host" ],
'filter': {
'ip': ip
},
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output #定义通过主机id获取开启关闭监控函数
def idupdatehost(status,hostid,url,auth):
values = {'jsonrpc': '2.0',
'method': 'host.update',
'params': {
"hostid": hostid,
"status": status
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output
#定义通过项目hostid获取itemid函数
def getHostsitemsid(hostid,itemsname,url,auth):
values = {'jsonrpc': '2.0',
'method': "item.get",
"params": {
"output": ["itemids"],
"hostids": hostid,
"filter":{
"key_": itemsname,
},
}, 'auth': auth,
'id': ''
}
output = requestJson(url,values)
if len(output)==0:
return output
else:
return output[0]['itemid'] #定义通过项目id获取监控项目最近值信息的函数
def getHostsitemsvalue(itemid,url,auth):
values = {'jsonrpc': '2.0',
'method': "history.get",
"params": {
"output": "extend",
"history":3,
"itemids":itemid,
"sortfield": "clock",
"sortorder": "DESC",
"limit":1,
}, 'auth': auth,
'id': ''
}
output = requestJson(url,values)
if len(output)==0:
return output
else:
return output[0]["value"] #定义更新读取状态action函数
def mediatypeget(mediatypeid,auth):
values = {'jsonrpc': '2.0',
'method': 'mediatype.get',
'params': {
"output": "extend", "filter": {
"mediatypeid":mediatypeid,
},
}, 'auth': auth,
'id': ''
}
output = requestJson(url,values)
if len(output)==0:
return output
else:
return output[0]['status'] #定义maintenance维修模式host函数
def maintenancecreate(maintenancename,active_since,active_till,hostid,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.create',
'params': {
"name": maintenancename,
"active_since": active_since,
"active_till": active_till,
"hostids": [
hostid
],
"timeperiods": [
{
"timeperiod_type": 0,
"every": 1,
"dayofweek": 64,
"start_time": 64800,
"period": 3600
}
]
},
'auth': auth,
'id': ''
}
output = requestJson(url,values) #定义通过模糊获取关闭主机信息函数
def disabledhostget(url,auth):
values = {'jsonrpc': '2.0',
'method': 'host.get',
"params": {
"output": ["host"],
'selectInterfaces': [ "ip" ],
"filter": {
"status":1
}
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output #定义maintenance维修模式group函数
def maintenancecreategroup(maintenancename,active_since,active_till,groupid,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.create',
'params': {
"name": maintenancename,
"active_since": active_since,
"active_till": active_till,
"groupids": [
groupid
],
"timeperiods": [
{
"timeperiod_type": 0,
"every": 1,
"dayofweek": 64,
"start_time": 64800,
"period": 3600
}
]
},
'auth': auth,
'id': ''
}
output = requestJson(url,values) #定义通过host groups named 获取groupid
def groupnameGroupid(groupname,auth):
values = {'jsonrpc': '2.0',
'method': 'hostgroup.get',
"params": {
"output": "extend",
"filter": {
"name": [
groupname
]
}
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output #定义模糊查询维护主机
def maintenanceget(url,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.get',
"params": {
"output": "extend",
},
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output #定义批量恢复处于维护主机
def maintenancedelete(maintenanceid,url,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.delete',
"params": [
maintenanceid
],
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output #定义通过hostid获取graphid的函数
def getgraphid(hostid,graphname,url,auth):
values = {'jsonrpc': '2.0',
'method': 'graph.get',
'params': {
"output": "name",
"hostids": hostid,
"sortfield": "name",
'filter': {
"name": graphname
}, },
'auth': auth,
'id': ''
}
output = requestJson(url,values)
return output # 调用:
#!/usr/bin/env python
#coding=utf-8
import urllib2
import sys
import json
import argparse
from login import *
from function import *
#登陆zabbix获取auth
auth = authenticate(url, username, password)
#状态0是启用监控,1是禁用监控
status=1
#定义操作ip
hostip='192.168.1.100'
#通过hostip获取zabbix hostid
hostids=ipgetHostsid(hostip,url,auth)
hostid=hostids[0]['hostid']
#通过主机id开启关闭监控
idupdatehost(status,hostid,url,auth)

zabbix api的更多相关文章

  1. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

  2. Zabbix Api的使用

    API使用 zabbix官网文档:https://www.zabbix.com/documentation/2.2/manual/api, Zabbix API是基于JSON-RPC 2.0规格,具体 ...

  3. 基于curl 的zabbix API调用

    1,认证并取得加密字段 curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0&q ...

  4. PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

    最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取 ...

  5. zabbix API基本使用方法介绍

    前言: 以下内容根据zabbix 3.2官方文档总结:https://www.zabbix.com/documentation/3.2/manual/api 此文档只是简单的介绍API的基本使用,关于 ...

  6. 利用zabbix api添加、删除、禁用主机

    python环境配置yum -y install python-pip安装argparse模块pip install -i https://pypi.douban.com/simple/ argpar ...

  7. python3调用zabbix api

    前言 今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西. 需求 我们需要查一个文件内容如下: cat /ops/flume_hosts node1 node2 需要把这个文件 ...

  8. python 调用zabbix api实现查询主机信息,输出所有主机ip

    之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...

  9. Python通过Zabbix API获得数据

    Zabbix API查询:https://www.zabbix.com/documentation/2.0/manual/appendix/api/api import json,urllib2 fr ...

  10. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

随机推荐

  1. 彻底解决 webpack 打包文件体积过大

    http://www.jianshu.com/p/a64735eb0e2b https://segmentfault.com/q/1010000006018592?_ea=985024 http:// ...

  2. Asynchronous HTTP Requests in Android Using Volley

    Volley是Android开发者新的瑞士军刀,它提供了优美的框架,使得Android应用程序网络访问更容易和更快.Volley抽象实现了底层的HTTP Client库,让你不关注HTTP Clien ...

  3. Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.

    EF6进行Insert操作的时候提示错误 Store update, insert, or delete statement affected an unexpected number of rows ...

  4. jquery ajax 传数据到后台乱码的处理方法

    前台页面先对中文进行编码,如下红色字体: function saveCommentTemplate() { $.ajax({ cache : false, type:'get', dataType:' ...

  5. Extjs3 combobox使用

    Combobox 在程序中应用十分普遍,每个combobox的选项 一般对应两个值:一个用于前台显示的值,一个与显示值对应的value值.在后台获取value的值需使用combobox的 Hidden ...

  6. Java 语言基础之函数

    函数的定义: 函数就是定义在类中的具有特定功能的一段独立小程序 函数也称为方法 函数定义格式: 修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2,...) { 执行语句; re ...

  7. MySQL 乐观锁与悲观锁

    悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁. 悲观锁: ...

  8. Android学习九---OpenCV4android org.opencv.feature2d

    不管是在识别,配准等应用中,提取图像的特征都是很关键的一环,提取特征是先找出图像的关键点(如角点,边缘点等),然后用描述子来描述这些点,最后整幅图像就可以表示成一个特征向量,特征向量就可以利用在后续识 ...

  9. Go 结构体和map等数据结构转json字符串

    Go语言中使用json包中的 Marshal() 函数将数据结构转成json字符串,源代码: func Marshal(v interface{}) ([]byte, error) { e := ne ...

  10. HDU1165: Eddy's research II(递推)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1165 果断不擅长找规律啊,做这种题静不下心来. Ackermann function can be def ...