#!/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. 转载 web前端简历

    Web前端程序员简历模板 本简历模板由国内首家互联网人才拍卖网站「 JobDeer.com 」提供. (括号里的是我们的顾问编写的说明,建议在简历书写完成后统一删除) 先讲讲怎样才是一份好的技术简历 ...

  2. Linux下wc命令详解

    功能说明:计算字数. 语   法:wc [-clw][--help][--version][文件…] 补充说明:利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定任何文件名称,或是所给 ...

  3. IOS学习笔记28—SQLite3第三方库之FMDB

    本文转载至 http://blog.csdn.net/happyrabbit456/article/details/11609451 SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非 ...

  4. html ; css ; javascript ; json ;

    [说明]今天因为看到了前端的js页面和html页面,觉得有必要熟悉一下他们的基本语法,所以花了一天的时间去复习巩固了一下(之前学习过),包括html语法,css语法,javascript语法,对象.B ...

  5. grunt 相关知识

    /** * Created by lee on 2014.07.02 002. */ module.exports = function (grunt) { // 项目配置 grunt.initCon ...

  6. UNION ALL与UNION

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列 ...

  7. Spoken English Practice(not always estimating your status in other's hearts. you will lose yourself when you live in other's look. do your best and walk on you own way.)

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/7/8) 英 ...

  8. Powershell Function Get-PendingReboot

    获取系统中Restart Pending的计算机 $servers=get-content D:\serverlist.txt Get-PendingReboot -ComputerName $ser ...

  9. MyBatis 入门(一)

    1. MyBatis 概述 MyBatis 是一个半自动化的持久层框架; 核心SQL,开发人员可以进行优化; SQL和Java编码分开,功能边界清晰,一个专注业务,一个专注数据; JDBC: SQL ...

  10. SpringMVC 之拦截器和异常处理

    1. 文件上传 Spring 使用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类: CommonsMultipartResolver ...