Zabbix Api的使用
API使用
zabbix官网文档:https://www.zabbix.com/documentation/2.2/manual/api,
Zabbix API是基于JSON-RPC 2.0规格,具体实现可以选择任何自己爱好的编程语言,可以采用Perl、Ruby、PHP之类的。
本文已python为例。python zabbix api模块较多,使用较为方便。
下面是各个语言zabbix模块及github连接,可共参考。
数据流程
下面的流程图代表了Zabbix API 工作的典型工作流。验证(方法user.login)是获取验证ID的强制步骤。这个ID又允许我们调用API提供的任何权限允许的方法来进行操作。在之前的例子中没有提到user.logout方法,这也是一次验证ID能够重复使用的原因所在。使用user.logout方法后将会使验证ID失效,后面的操作将不能再使用此ID。

Python
py-zabbixby Alexey Dubkov - Zabbix Modules for Python (PyPI py-zabbix, no python3)
ZabbixPythonApiby Frank Yao - Zabbix API for Python (no python3)
zabbixby gescheit - a Python library (PyPI zabbix-api)
PyZabbixby Luke Cyca - a Python module (PyPI pyzabbix, depends-on requests)
zabbix_apiby Grigoriy Netsman - scripts for creating and deleting hosts (depends on zabbix-api)
zabbix-clientby Jesús Losada - a Python library (PyPI zabbix-client)
zabbix-api-erigonesby Erigones - a Python library (PyPI zabbix-api-erigones)
pyZabbixSenderby Kurt Momberg - a zabbix_sender replacement for Python.
Ruby
Zabbix APIby nelsonab (latest code seems to be on github) - a Ruby wrapper
Rubixby Dhruv Bansal - a Ruby library for working with the API and both retrieving and sending data to Zabbix server
zabbyby Farzad Farid - a Ruby library and client for Zabbix
Perl
Zabbix-APIby SFR-ZABBIX - Perl distribution to access the Zabbix API
ZabbixAPIby Tomohiro Ikeda - a Perl library
Zabipiby Andrey Konovalov - Monitoring::Zabipi module that lets you use official Zabbix API documentation to create Perl applications interacting with Zabbix. Contains additional methods (such as queue.get) and hacks (such as expandNames parameter for item.get). Many examples of usage included in distributive.
Net-Zabbixby ksyz - Perl wrapper for Zabbix API
Zabbix-API-Clientby Matsumoto Ryosuke - Zabbix API client for Perl
Java
zabbix-api by hengyunabc - Java library to access Zabbix API
zabbix-sender by hengyunabc - Java library to use Zabbix sender protocol
PHP
PhpZabbixApi by confirm IT solutions GmbH - a PHP wrapper class and a wrapper code generator
microzabbixapiconnector by Alex Kashin - a Micro-Zabbix-Api-Connector with proxy usage support
PowerShell
ZabbixPosh Api by simsaull - A Zabbix PowerShell Module
Zabbix by Benjamin RIOUAL - An other Zabbix module, based on Invoke-RestMethod
JavaScript
jqzabbix by Kodai Terashima - jQuery plugin for Zabbix API
zabbix.js by Kristoffer Berdal - a library based around request.js
C#
c# api library by cheezus - a C# library for .NET 2.0
C# Library by HenriqueCaires - a C# library for .NET 4.5
Go
zabbixby Ryan Day - Zabbix API for Go
go-zabbix "by Alexey Dubkov" - Zabbix Packages for Go
zabbix-senderAlexey Palazhchenko - push data to Zabbix server's trapper items from Go application
zabbix.goAlexey Palazhchenko - Zabbix API for Go
自动化简介
目前我们使用pyzabbix模块,用json定义template 文件。
下文讲解用法(api 参考官网手册):
#!/usr/bin/env python
#jiayun
#version 1.3
from pyzabbix import ZabbixAPI
import json
import os,sys
import re,time
import logging
rule = json.load(file('D:\pycharm\project\REGION Manage Script\qn_rolerule.json')) #template 文件
def login():
zapi= ZabbixAPI("http://10.4.0.247") #登录zabbix
zapi.login("admin","zabbix")
return zapi
def get_hostgroups(group_name):
return zapi.hostgroup.get(search={"name":group_name },output="extend") #搜索输入的组别,提取组id
def get_hosts(groupid):
groupids = [groupid]
return zapi.host.get(groupids=groupids,output="extend") #返回该组id 下的所有host 信息
def get_drules():
return zapi.drule.get(output="extend")
def get_templates_by_names(template_names):
return zapi.template.get(filter={"host": template_names})
def create_group(group_name): #创建组
if not zapi.hostgroup.exists(name=group_name):
zapi.hostgroup.create(name=group_name)
def create_host(group_name,host_name,ip): #创建主机并附加指定模板
groups=get_hostgroups(group_name)
host_name=host_name.lower()
ip_tail=ip.split(".")[-1]
domain = "server-"+ ip_tail +".0." + host_name + ".ustack.in"
for hostgroup in groups:
groupid=hostgroup['groupid']
ip_tail=ip.split(".")[-1]
role = None
for ru in rule:
range = rule[ru]['range']
if "-" in range:
head = range.split("-")[0]
tail = range.split("-")[1]
if int(ip_tail) <= int(tail) and int(ip_tail) >=int(head):
role = ru
else:
if ip_tail == range:
role = ru
template_names = rule[role]['templates']
template_ids = get_templates_by_names(template_names)
print domain,ip,groupid,template_ids
zapi.host.create(host=domain,interfaces=[{
"type":1,
"main":1,
"useip":1,
"ip":ip,
"dns":"",
"port":''
}],groups=[{"groupid":groupid}],templates=template_ids)
print "Add Successfull!!!!!"
#logging.info("%s,%s,%s,%s Add Successfull!!!!!"%(domain,ip,groupid,template_ids))
def create_macro(group_name,traffic,value): #创建macro,不同主机有不同的macro
groups=get_hostgroups(group_name)
for group in groups:
hosts=get_hosts(group['groupid'])
for host in hosts:
hostname=host["name"]
hostid=host["hostid"]
if not re.search("^server",hostname):continue
m=re.search("[0-9]+",hostname).group()
if m == "":continue
if m in ['','','','']:
zapi.host.update(hostid=hostid,macros=[{"macro":"{$INP}","value":""},
{"macro":"{$OUP}","value":""},
{"macro":"{$INT}","value":"%s"%traffic},
{"macro":"{$OUT}","value":"%s"%traffic},
{"macro":"{$PDISK}","value":"%s"%value}])
else:
zapi.host.update(hostid=hostid,macros=[{"macro":"{$PDISK}","value":"%s"%value}])
print hostname ,hostid,m,traffic,value
if __name__ == "__main__":
zapi=login()
region="qn"
host_list=["","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","",""] #添加主机,不建议用discovery
ip_list=host_list
if type(ip_list) == str:
print "%s Must be a list,please checking !!!"%sys.argv[2]
sys.exit()
group_name="Region [%s 0]"% region.upper()
if not zapi.hostgroup.exists(name=group_name):
create_group(group_name)
ip={"qn":"10.4.0."}
if region in ip:
for num in ip_list:
value=""
traffic="300M"
ipaddress=ip[region]+str(num)
print group_name,region,ipaddress
create_host(group_name,region,ipaddress) #传参至函数
time.sleep(5)
create_macro(group_name,traffic,value)
else:
print "you input region error,please checking"
Zabbix Api的使用的更多相关文章
- python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools() 调用zabbi ...
- 基于curl 的zabbix API调用
1,认证并取得加密字段 curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0&q ...
- PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息
最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取 ...
- zabbix API基本使用方法介绍
前言: 以下内容根据zabbix 3.2官方文档总结:https://www.zabbix.com/documentation/3.2/manual/api 此文档只是简单的介绍API的基本使用,关于 ...
- 利用zabbix api添加、删除、禁用主机
python环境配置yum -y install python-pip安装argparse模块pip install -i https://pypi.douban.com/simple/ argpar ...
- python3调用zabbix api
前言 今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西. 需求 我们需要查一个文件内容如下: cat /ops/flume_hosts node1 node2 需要把这个文件 ...
- python 调用zabbix api实现查询主机信息,输出所有主机ip
之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...
- Python通过Zabbix API获得数据
Zabbix API查询:https://www.zabbix.com/documentation/2.0/manual/appendix/api/api import json,urllib2 fr ...
- 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查
目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...
随机推荐
- 第二百四十一天 how can I 坚持
今天去了趟小米之家,红米note3感觉还好吧.小米,希望不会令人失望啊,很看好的,应该不算是米粉吧. 腾讯课堂. hadoop. 摄影. 没有真正的兴趣啊,一心只想着玩,什么事真正的兴趣,就是无时无刻 ...
- (转)Http协议经典详解
转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象 ...
- memcached全面剖析–3. memcached的删除机制和发展方向
memcached在数据删除方面有效利用资源 数据不会真正从memcached中消失 上次介绍过, memcached不会释放已分配的内存.记录超时后,客户端就无法再看见该记录(invisible,透 ...
- react-native 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
Q: A:
- Jquery EasyUi实战教程布局篇
转自:http://www.kwstu.com/ArticleView/kwstu_20139413501290 送给大家一个非常好的后台布局模板,本人后来就选择了这个模板http://www.kws ...
- java web,生成验证码图片的技术
偶然知道原来有些网站的验证码图片都是随机生成的,后来听人讲了一下,就做了这个小例子 生成图片,绘制背景,数字,干扰线用到了java.awt包,主要使用BufferedImage来生成图片,然后使用Gr ...
- Cocos2d-x——CocosBuilder官方帮助文档翻译2 多分辨率支持
Working with Multiple Resolutions 多分辨率设置 A common scenario when creating apps or games is to target ...
- copy and Xcopy 复制文件到另一地址
1. copy不能复制文件夹下的文件,而Xcopy可以. 2. Xcopy不能连接文件,而copy可以连接文件 eg : 将A盘中的A.TXT和B.TXT文件连接起来,连接后的文件名为C.TXT ...
- 使用synchronize同步关键字来同步代码快
1.synchronized关键字的作用域有二种: 1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有 ...
- Chrome Apps将可以打包成iOS或Android应用
Chrome Apps 将可以在 iOS 和 Android 设备上独立运行了.开发者只要使用 Google今天 提供的工具集(toolchain)将自己的 Web App 打包,并将生成的应用上传到 ...