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接口 对 主机.主机组.模板.应用集.监控项. ...
随机推荐
- 执行原始的 SQL 查询
The Entity Framework Code First API includes methods that enable you to pass SQL commands directly t ...
- 从根源上解析 Java volatile 关键字的实现
1.解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析Volatile关键字 使用volatile关键字的场景 2.内存模型的相关概念 缓存一致性问题.通常称这种被多个线程 ...
- IIS中使用PUT方法錯誤記錄
在IIS7.5中使用PUT,DELETE方法時會遇到404,405錯誤,特記錄解決辦法:404: 405: 在web.config的system.webServer節點中加入 <modules ...
- JAVA中的常见面试题1
1.线程同步的方法的使用. sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常. wait():使一个线程处于等待状态,并且 ...
- DB2 VALUES用法详解
都知道Oracle有一个虚表(dual),我们可以用select sysdate from dual获取寄存器中的值.在DB2中,可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄 ...
- Spring Autowiring by Constructor
In Spring, "Autowiring by Constructor" is actually autowiring by Type in constructor argum ...
- 总结:常用的Linux系统监控命令
记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令: ps -mp pid -o THREAD,tid,time 或者 ps -Lf ...
- Flask框架获取用户IP地址的方法
本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最 ...
- javascript 工具方法(长期更新)
//密码强度判断,低级:不到八位:中级:八位以上:高级:八位以上并加入了特殊符号. function pwdStrength(pwd) { var pwdLevel; if ((pwd &&a ...
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...