概述

Zabbix API 允许你以编程方式检索和修改 Zabbix 的配置,并提供对历史数据的访问。它广泛用于:

  • 创建新的应用程序以使用Zabbix;
  • 将Zabbix与第三方软件集成;
  • 自动执行常规任务。

Zabbix API 是基于 Web 的API,作为 Web 前端 的一部分提供。它使用 JSON-RPC 2.0 协议,这意味着两点:

  • 该 API 包含一组独立的方法;
  • 客户端和 API 之间的请求和响应使用 JSON 格式进行编码

环境

  zabbix-api

  open-ssl

  python3.6

  requests

安装

sudo apt install zabbix-api
sudo apt install open-ssl
pip3 install requests

api使用方法

在访问 Zabbix 中的任何数据之前,你需要登录并获取身份认证 token。这可以使用user.login方法完成。


zabbix_url='http://10.0.3.108:6588/api_jsonrpc.php'
zabbix_user = "Admin"
zabbix_pass = "passwd"
head={"Content-Type":"application/json"}
operate = ZabbixOperates(zabbix_url,zabbix_user,zabbix_pass)
data = {
"jsonrpc":"2.0",
"method":"user.login",
"params":{
"user":self.user,
"password":self.pwd
},
"id":1
}
res =requests.post(zabbix_url,headers=head,json=data)
token = res.json()['result']

获取host列表,这里我们可以筛选自己所需的属性

data={
"jsonrpc": "2.0",
"method":"host.get",
"params": {
"output": [
"hostid",
"host",
"interfaceid"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id":1,
"auth":token
}
res = requests.post(zabbix_url,json=data)
for host in value['result']:
print(host)
print('-------------------------------------------------------------')

得到以下输出

dark@dark:~/python$ /usr/bin/python3 /home/dark/python/zabbix-api/host.py
{'hostid': '10084', 'host': 'Zabbix server', 'interfaces': [{'interfaceid': '1', 'ip': '127.0.0.1'}]}
------------------------------------------------------------------------------
{'hostid': '10318', 'host': 'zabbix-agent', 'interfaces': [{'interfaceid': '2', 'ip': '10.0.3.108'}]}
------------------------------------------------------------------------------
{'hostid': '10319', 'host': 'Juniper-10.0.3.1', 'interfaces': [{'interfaceid': '3', 'ip': '10.0.3.1'}]}
------------------------------------------------------------------------------
{'hostid': '10320', 'host': 'ju_route', 'interfaces': [{'interfaceid': '4', 'ip': '10.0.0.1'}]}
------------------------------------------------------------------------------

使用item.create来创建item,我们需要使用以上获取到的hostid interfaceid属性

data={
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": 1.1.1.1-restime,
"key_": ping_restime[1.1.1.1],
"hostid": "10318",
"type": 0,
"value_type": 0,
"interfaceid": "2",
"delay": '20s',
'history': '90d',
'trends': '365d',
'units': "ms",
'lifetime': '30d',
},
"auth": token,
"id": 3
}
if 'result' in value:
for host in value['result']:
if isinstance(host,dict):
for k,v in host.items():
print(k,v)
else:
print(host)
print('------------------------------------------------------------------------------')
elif 'error' in value:
print(value['error'])

创建成功后会返回itemid,如果key存在会返回错误信息,可以做下异常处理

dark@dark:~/python$ /usr/bin/python3 /home/dark/python/zabbix-api/host.py
{'itemids': ['32918']} dark@dark:~/python$ /usr/bin/python3 /home/dark/python/zabbix-api/host.py {'code': -32602, 'message': 'Invalid params.', 'data': 'Item with key "ping_pkloss[1.1.1.1]" already exists on "zabbix-agent".'}

简单的操作就是这样,如果客户端使用证书加密码登录,只需要在requests.post附带证书信息就行

功能封装

为了日常工作使用起来更为便捷,我们对这些功能做下封装

zabbixoperates.py
只做了host.get和item.create模块,其他模块可根据日常添加习惯进行定义
import requests

class ZabbixOperates:
def __init__(self,zabbix_url,zabbix_user,zabbix_pass,verify_file=None,ssl_pem=None,ssl_key=None):
self.zabbix_url = zabbix_url
self.user=zabbix_user
self.pwd=zabbix_pass
self.verify_file,self.ssl_pem,self.ssl_key=verify_file,ssl_pem,ssl_key
self.head={"Content-Type":"application/json"}
self.token = self.get_token()
def get_token(self):
data = {
"jsonrpc":"2.0",
"method":"user.login",
"params":{
"user":self.user,
"password":self.pwd
},
"id":1
}
res = requests.post(self.zabbix_url,headers=self.head,json=data,verify=self.verify_file,cert=(self.ssl_pem,self.ssl_key))
return res.json()['result']
def reuqest(self,data):
res = requests.post(self.zabbix_url,json=data,verify=self.verify_file,cert=(self.ssl_pem,self.ssl_key))
self.show(res.json())
return(res.json())
def show(self,value):
if 'result' in value:
for host in value['result']:
if isinstance(host,dict):
for k,v in host.items():
print(k,v)
else:
print(host)
print('------------------------------------------------------------------------------')
elif 'error' in value:
print(value['error'])
#通用方法
def operate(self,data):
return self.reuqest(data)
#根据日常习惯定制方法
def get_host(self):
data={
"jsonrpc": "2.0",
"method":"host.get",
"params": {
"output": [
"hostid",
"host",
"interfaceid"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id":1,
"auth":self.token
}
return self.reuqest(data)
def show_item(self,*value):
hostid,key=value
data = {
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"output": "extend",
"hostids": hostid,
"search": {
"key_": key
},
"sortfield": "name"
},
"auth": self.token,
"id": 1
}
return self.reuqest(data)
def create_item(self,*value):
hostid,interfaceid,name,key,units=value
data={
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": name,
"key_": key,
"hostid": hostid,
"type": 0,
"value_type": 0,
"interfaceid": interfaceid,
"delay": '20s',
'history': '90d',
'trends': '365d',
'units': units,
'lifetime': '30d',
},
"auth": self.token,
"id": 3
}
return self.reuqest(data)

使用方法

from zabbixoperates import ZabbixOperates
if __name__ == '__main__':
verify_file = '/home/dark/dark.pem'
ssl_pem = '/home/dark/dark.pem'
ssl_key = '/home/dark/dark.key'
zabbix_url='https://ex.zabbix.com/api_jsonrpc.php'
zabbix_user = "Admin"
zabbix_pass = "passwd"
operate = ZabbixOperates(zabbix_url,zabbix_user,zabbix_pass,verify_file,ssl_pem,ssl_key)
#获取host
operate.get_host()
#创建item
for host in ['1.1.1.1','2.2.2.2']:
resvalue=operate.create_item('10318','2',host+'-restime','ping_restime[%s]'%host,'ms')
pktvalue=operate.create_item('10318','2',host+'-pkloss','ping_pkloss[%s]'%host,'%')
#原始数据,通过operate方法执行
data={
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"output": "extend",
"hostids": "11148",
"search": {
"key_": "ping_"
},
"sortfield": "name"
},
"auth": operate.token,
"id": 1
}
operate.operate(data)

确认结果

使用用户名密码或ssl证书获取zabbix-api token,批量操作管理zabbix-server的更多相关文章

  1. tornado SSL 证书获取与服务器配置

    转载注明出处: http://www.cnblogs.com/ityoung/p/8296088.html 自动化测试/持续集成/测试开发 QQ交流群: 70160503 服务端生成证书 进入 ope ...

  2. Let’s Encrypt Wildcard 免费泛域名SSL证书获取安装

    2018 年 1 月Let’s Encrypt CA 宣布免费提供通配符证书(Wildcard certificate).通配符证书是一种可被多个子域使用的公钥证书.这意味着,单个证书可用于提供多台服 ...

  3. 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)

    简单说明: 目前多个大型网站都实现全站HTTPS,而SSL证书是实现HTTPS的必要条件之一. StartSSL是StartCom公司旗下的.提供免费SSL证书服务并且被主流浏览器支持的免费SSL.包 ...

  4. startssl,免费的ssl证书申请及注意事项

    免费的ssl证书,https://www.startssl.com/ 安装到IIS和Nginx有所不同.原文 http://blog.newnaw.com/?p=1232 ------------转自 ...

  5. WCF 安全性之 自定义用户名密码验证

    案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...

  6. 实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题

    最近需要https这里看到一份不错的博客,收录一下! Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust ...

  7. 申请Let's Encrypt永久免费SSL证书

    Let's Encrypt简介 Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust.EFF等组织人员发起 ...

  8. 申请Let’s Encrypt永久免费SSL证书过程教程及常见问题

    配置证书https://easy.zhetao.com/   虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用,为了考虑到文章的真 ...

  9. 转载免费的SSL证书

    目前我知道的有2种方式进行免费的SSL证书的获取 第一种:腾讯云申请 第二种:Let's Encrypt (国外在) 我一直使用第一种,还可以,有效期1年. 以下转载第二种: 实战申请Let's En ...

随机推荐

  1. Linux基础学习 | gcc、g++的安装和使用

    安装gcc 1.apt-get命令是debain Linux发新版的APT软件包管理工具. dabian.ubuntu.deepin等Linux系统通过以下命令: 安装gcc:Shell输入sudo ...

  2. Numpy实现多项式曲线拟合

    Numpy实现多项式曲线拟合 这里可以对比matlab中的拟合方式看看matlab拟合函数的三种方法,和第一种方式很像 问题定义:对于一堆数据点(x, y),能否只根据这些数据,找出一个函数,使得函数 ...

  3. 高速PCB设计名词解析

    1.吸芯效应 "芯吸效应"是超细纤维特有的性能,是指超细纤维中孔细,接近真空时,近水端纤维管口与水分子接触形成纤维中真空孔隙,此时大气压值超过纤维内部的真空,水就自然压积进入纤维孔 ...

  4. 一步步搭建物联网系统——无处不在的CSS

    无处不在的CSS 或许你觉得CSS一点儿也不重要,而事实上,如果说HTML是建筑的框架,CSS就是房子的装修.那么Javascript呢,我听到的最有趣的说法是小三--还是先让我们回到代码上来吧. C ...

  5. html5 canvas基础10点

    本文主要讲解下一些canvas的基础 1.<canvas id="canvas">若此浏览器不支持canvas会显示该文字</canvas> //创建个ht ...

  6. H5优化:canonical标签该如何正确使用

    对一组内容完全相同或高度相似的网页,通过使用Canonical标签可以告诉搜索引擎哪个页面为规范的网页,能够规范网址并避免搜索结果中出现多个内容相同或相似的页面,帮助解决重复内容的收录问题,避免网站相 ...

  7. 基于Yeoman实现自定义脚手架

    什么是脚手架? Yeoman是什么? 实现自定义脚手架 基于Yeoman实现Vue-cli 一.什么是脚手架? 手脚架从功能上来讲就是创建项目初始文件,这其中包括生成功能模块配置.自动安装依赖.自动生 ...

  8. 【Python打包成exe方法】——已解决导入第三方包无法打包的问题

    ​ 前言 在我们写代码的过程中,我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安 ...

  9. mysql发展历程 各分支版本溯源

    首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本 ...

  10. Blazor 组件库 BootstrapBlazor中 Ajax 组件的使用

    组件解决的问题 由于Blazor在与服务器连接时使用了Websocket,仅在第一次连接时会走原MVC的连接逻辑.所以,我们无法在这个过程中完成例如身份认证.cookie处理等操作. 此组件即为解决此 ...