zabbix如何zabbix监控api接口口是不是可用

Zabbix 发现功能中文文档 | Linux运维部落
您还未登录,请登录后再进行相关操作!
400-080-6560
在线咨询:
工作时间:周一至周五,9:30-18:30,节假日同时也值班首页 & 开源软件利用zabbix api 添加监控 众所周知,zabbix是一款强大的分布式监控系统,集各家所长于一体,得到了广大SA的认可。其强大的管理界面也极其方便,但是美中不足的是,如果同时有大批量(50台+)的服务器需要添加监控时,这时,其图形界面反而显得有些臃肿了,好在zabbix 提供了一套强大的API管理接口,我们可以使用它快速地添加成千上万台服务器。 根据日常工作中常用到zabbix的功能,整理以下功能 1.基于zabbix 官方 api 2.提供查询单个或者多个host、hostgroup、template功能 3.提供增加host,hostgroup功能 4.提供disable host功能 5.增加删除host 功能 代码如下:#!/usr/bin/python
#coding:utf-8
import json
import urllib2
from urllib2 import URLError
import sys,argparse
class zabbix_api:
def __init__(self):
self.url = 'http://localhost/api_jsonrpc.php' #修改URL
self.header = {"Content-Type":"application/json"}
def user_login(self):
data = json.dumps({
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin", #修改用户名
"password": "zabbix" #修改密码
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
print "33[041m 用户认证失败,请检查 !33[0m", e.code
response = json.loads(result.read())
result.close()
#print response['result']
self.authID = response['result']
return self.authID
def host_get(self,hostName=''):
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": "extend",
"filter":{"host":hostName}
"auth": self.user_login(),
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
elif hasattr(e, 'code'):
print 'The server could not fulfill the request.'
print 'Error code: ', e.code
response = json.loads(result.read())
#print response
result.close()
print "主机数量: 33[31m%s33[0m"%(len(response['result']))
for host in response['result']:
status={"0":"OK","1":"Disabled"}
available={"0":"Unknown","1":"available","2":"Unavailable"}
#print host
if len(hostName)==0:
print "HostID : %st HostName : %st Status :33[32m%s33[0m t Available :33[31m%s33[0m"%(host['hostid'],host['name'],status[host['status']],available[host['available']])
print "HostID : %st HostName : %st Status :33[32m%s33[0m t Available :33[31m%s33[0m"%(host['hostid'],host['name'],status[host['status']],available[host['available']])
return host['hostid']
def hostgroup_get(self, hostgroupName=''):
data = json.dumps({
"jsonrpc":"2.0",
"method":"hostgroup.get",
"params":{
"output": "extend",
"filter": {
"name": hostgroupName
"auth":self.user_login(),
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
#print result.read()
response = json.loads(result.read())
result.close()
#print response()
for group in response['result']:
len(hostgroupName)==0:
print "hostgroup:
33[31m%s33[0m tgroupid : %s" %(group['name'],group['groupid'])
print "hostgroup:
33[31m%s33[0mtgroupid : %s" %(group['name'],group['groupid'])
self.hostgroupID = group['groupid']
return group['groupid']
def template_get(self,templateName=''):
data = json.dumps({
"jsonrpc":"2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"name":templateName
"auth":self.user_login(),
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
response = json.loads(result.read())
result.close()
#print response
for template in response['result']:
if len(templateName)==0:
print "template : 33[31m%s33[0mt
id : %s" % (template['name'], template['templateid'])
self.templateID = response['result'][0]['templateid']
print "Template Name :
33[31m%s33[0m "%templateName
return response['result'][0]['templateid']
def hostgroup_create(self,hostgroupName):
if self.hostgroup_get(hostgroupName):
print "hostgroup
33[42m%s33[0m is exist !"%hostgroupName
sys.exit(1)
data = json.dumps({
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": hostgroupName
"auth": self.user_login(),
request=urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
response = json.loads(result.read())
result.close()
print "33[042m 添加主机组:%s33[0m
hostgroupID : %s"%(hostgroupName,response['result']['groupids'])
def host_create(self, hostip, hostgroupName, templateName):
if self.host_get(hostip):
print "33[041m该主机已经添加!33[0m"
sys.exit(1)
group_list=[]
template_list=[]
for i in hostgroupName.split(','):
var['groupid'] = self.hostgroup_get(i)
group_list.append(var)
for i in templateName.split(','):
var['templateid']=self.template_get(i)
template_list.append(var)
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.create",
"params":{
"host": hostip,
"interfaces": [
"type": 1,
"main": 1,
"useip": 1,
"ip": hostip,
"dns": "",
"port": "10050"
"groups": group_list,
"templates": template_list,
"auth": self.user_login(),
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
response = json.loads(result.read())
result.close()
print "添加主机 : 33[42m%s31[0m tid :33[31m%s33[0m" % (hostip, response['result']['hostids'])
def host_disable(self,hostip):
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.update",
"params": {
"hostid": self.host_get(hostip),
"status": 1
"auth": self.user_login(),
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
response = json.loads(result.read())
result.close()
print '----主机现在状态------------'
print self.host_get(hostip)
def host_delete(self,hostid):
hostid_list=[]
#print type(hostid)
for i in hostid.split(','):
var['hostid'] = self.host_get(i)
hostid_list.append(var)
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.delete",
"params": hostid_list,
"auth": self.user_login(),
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
result = urllib2.urlopen(request)
except Exception,e:
result.close()
print "主机 33[041m %s33[0m
已经删除 !"%hostid
if __name__ == "__main__":
zabbix=zabbix_api()
parser=argparse.ArgumentParser(description='zabbix
api ',usage='%(prog)s [options]')
parser.add_argument('-H','--host',nargs='?',dest='listhost',default='host',help='查询主机')
parser.add_argument('-G','--group',nargs='?',dest='listgroup',default='group',help='查询主机组')
parser.add_argument('-T','--template',nargs='?',dest='listtemp',default='template',help='查询模板信息')
parser.add_argument('-A','--add-group',nargs=1,dest='addgroup',help='添加主机组')
parser.add_argument('-C','--add-host',dest='addhost',nargs=3,metavar=('192.168.2.1', 'test01,test02', 'Template01,Template02'),help='添加主机,多个主机组或模板使用分号')
parser.add_argument('-d','--disable',dest='disablehost',nargs=1,metavar=('192.168.2.1'),help='禁用主机')
parser.add_argument('-D','--delete',dest='deletehost',nargs='+',metavar=('192.168.2.1'),help='删除主机,多个主机之间用分号')
parser.add_argument('-v','--version', action='version', version='%(prog)s 1.0')
if len(sys.argv)==1:
print parser.print_help()
args=parser.parse_args()
if args.listhost != 'host' :
if args.listhost:
zabbix.host_get(args.listhost)
zabbix.host_get()
if args.listgroup !='group':
if args.listgroup:
zabbix.hostgroup_get(args.listgroup)
zabbix.hostgroup_get()
if args.listtemp != 'template':
if args.listtemp:
zabbix.template_get(args.listtemp)
zabbix.template_get()
if args.addgroup:
zabbix.hostgroup_create(args.addgroup[0])
if args.addhost:
zabbix.host_create(args.addhost[0], args.addhost[1], args.addhost[2])
if args.disablehost:
zabbix.host_disable(args.disablehost)
if args.deletehost:
zabbix.host_delete(args.deletehost[0])
点此下载上面的代码 用法如下:直接执行 python zabbix_api.py
usage: zabbix_api.py [options]
zabbix api
optional arguments:
-h, --help
show this help message and exit
-H [LISTHOST], --host [LISTHOST]
-G [LISTGROUP], --group [LISTGROUP]
查询主机组
-T [LISTTEMP], --template [LISTTEMP]
查询模板信息
-A ADDGROUP, --add-group ADDGROUP
添加主机组
-C 192.168.2.1 test01,test02 Template01,Template02, --add-host 192.168.2.1 test01,test02 Template01,Template02
添加主机,多个主机组或模板使用分号
-d 192.168.2.1, --disable 192.168.2.1
-D 192.168.2.1 [192.168.2.1 ...], --delete 192.168.2.1 [192.168.2.1 ...]
删除主机,多个主机之间用分号
-v, --version
show program's version number and exit 示例:#!/usr/bin/python
#新增帮助信息,可直接执行脚本
zabbix=zabbix_api()
#获取所有主机列表
zabbix.host_get()
#查询单个主机列表
zabbix.host_get('192.168.2.1')
#获取所有主机组列表
zabbix.hostgroup_get()
#查询单个主机组列表
zabbix.hostgroup_get('test01')
#获取所有模板列表
zabbix.template_get()
#查询单个模板信息
zabbix.template_get('Template OS Linux')
#添加一个主机组
zabbix.hostgroup_create('test01')
#添加一个主机,支持将主机添加进多个组,多个模板,多个组、模板之间用逗号隔开,如果添加的组不存在,新创建组
zabbix.host_create('192.168.2.1', 'test01', 'Template OS Linux')
zabbix.host_create('192.168.2.1', 'Linux servers,test01 ', 'Template OS Linux,Template App MySQL')
#禁用一个主机
zabbix.host_disable('192.168.2.1')
#删除host,支持删除多个,之间用逗号
zabbix.host_delete('192.168.2.1,192.168.2.2')注:以上代码摘自互联网,个人感觉还是有点糙,主要同未实现增加主机别名和IP对应的功能。这里记下,以后在此基础上再做些优化。
本站的发展离不开您的资助,金额随意,欢迎来赏!
分类: 开源软件 monitor, zabbix您可能也喜欢serverchan微信告警推送 zabbix告警事件归档与提取 RHEL7性能监控之pcp smokeping告警配置 (2)nginx+smokeping安装配置 捐助本站 如您感觉本博客有用,可扫码捐赠本站!近期文章 omnibus方式安装gitlab-ce私有源 vsftpd系统虚拟帐户大乱斗 wkhtmltopdf html转pdf工具的使用 Tesseract图文识别与百度AI OpenResty连接mysql文章归档 文章归档 选择月份 2018年六月 &(1) 2018年五月 &(4) 2018年四月 &(4) 2018年三月 &(4) 2018年二月 &(2) 2018年一月 &(6) 2017年十二月 &(3) 2017年十一月 &(2) 2017年十月 &(1) 2017年九月 &(5) 2017年八月 &(3) 2017年七月 &(4) 2017年六月 &(2) 2017年五月 &(3) 2017年三月 &(4) 2017年二月 &(6) 2017年一月 &(5) 2016年十二月 &(4) 2016年十一月 &(6) 2016年十月 &(5) 2016年九月 &(5) 2016年八月 &(9) 2016年七月 &(5) 2016年六月 &(10) 2016年五月 &(18) 2016年四月 &(5) 2016年三月 &(4) 2016年二月 &(7) 2016年一月 &(8) 2015年十二月 &(8) 2015年十一月 &(10) 2015年十月 &(17) 2015年九月 &(10) 2015年八月 &(25) 2015年七月 &(11) 2015年六月 &(15) 2015年五月 &(23) 2015年四月 &(14) 2015年三月 &(22) 2015年二月 &(15) 2015年一月 &(24) 2014年十二月 &(14) 2014年十一月 &(16) 2014年十月 &(19) 2014年九月 &(19) 2014年八月 &(18) 2014年七月 &(20) 2014年六月 &(21) 2014年五月 &(24) 2014年四月 &(18) 2014年三月 &(29) 2014年二月 &(22) 2014年一月 &(22) 2013年十二月 &(24) 2013年十一月 &(20) 2013年十月 &(18) 2013年九月 &(16) 2013年八月 &(17) 2013年七月 &(20) 2013年六月 &(21) 2013年五月 &(19) 2013年四月 &(18) 2013年三月 &(24) 2013年二月 &(21) 2013年一月 &(18) 2012年十二月 &(24) 2012年十一月 &(18) 2012年十月 &(17) 2012年九月 &(17) 2012年八月 &(18) 2012年七月 &(26) 2012年六月 &(36) 2012年五月 &(36) 2012年四月 &(28) 2012年三月 &(46) 2012年二月 &(23) 2012年一月 &(16) 2011年十二月 &(27) 2011年十一月 &(59) 2011年十月 &(19) 2011年九月 &(16) 2011年八月 &(46)zabbix API二次开发使用与介绍 - losbyday - 博客园
一名热爱开源、朴实的搬运工
欢需要理由吗?需要吗?当然需要,的那么多功能足以让你喜欢她,现在还有zabbix API,zabbix真让我疯了,太牛逼了,太让人喜欢了。有zabbix API我们可以做很多,自己开发web界面、开发手机端zabbix、获取zabbix指定数据、创建zabbix监控项等等。
zabbix API开发库
zabbix API请求和响应都是json,并且还提供了各种语法的lib库,http://zabbix.org/wiki/Docs/api/libraries,包含、c#、、、go等等语言,简单看了下phpzabbixapi,使用非常方便。
请求zabbix API
post json数据到api接口地址,例如你得zabbix地址是http://company.com/zabbix,那么你得接口地址是:http: //company.com/zabbix/api_jsonrpc.php,必须包含content-type头,值为application/json-rpc, application/json or application/jsonrequest之一。
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
zabbix API登陆
获取auth token(登陆)
在操作zabbix之前,我们必须先登陆zabbix,得到token,以后的操作带着这个token即可,要不然肯定没权限。
请求的json如下:
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
"auth": null
jsonrps - JSON-RPC版本,基本上用2.0就行了;
method - 调用的API方法,方法列表请上官网;
params - 需要传递的参数,这边是user和
id - 请求标志;
auth - 用户token,这边使用null,因为还没通过验证
验证成功,会返回如下json数据
"jsonrpc": "2.0",
"result": "d",
result便是我们要德token数据,id对应请求的id。
zabbix api检索主机
通过验证之后,我们带着token使用host.get获取主机列表,请求的json如下:
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"selectInterfaces": [
"interfaceid",
"auth": "d"
获取到如下数据
"jsonrpc": "2.0",
"result": [
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
"interfaceid": "1",
"ip": "127.0.0.1"
请使用你的程序处理一下即可。
zabbix API就是这么简单,请求、响应然后处理,更多API方法请直接上官方文档,里面有几百个方法等着你。如果你使用zabbix二次开发,千万不要直接操作zabbix数据,运维笔记之zabbix-API接口简单介绍运维笔记之zabbix-API接口简单介绍智慧未来百家号什么是API接口API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。简单的说,就是通过某一预先定义的渠道读/写数据的方式。定义: 所有的API接口都是一个网址把某些功能封装好,方便其他人调用。调用的人可以很方便使用这些功能,并且可以不需要知道这些功能的具体实现过程。API规范去调接口的时候要不要做一个验证为什么要做验证合法性我们一个接口没有做验证安全性的问题 ip 攻击ip 破解密码 信息被泄露出去 信息可以卖钱的负载的问题 ddos强度 要低几倍的情况下面 www.baidu.com nginx静态页面处理 retrun index.html api返回一个 去数据库里面查询 处理 json 处理的字典 返回给用户 字典 转换成json html 字典 htmljson 高很多倍验证码的处理早前的API接口 每次去请求的时候 请带上你的user password账号密码是不是会泄露最流行的API接口请求方式第一次请求的时候 user passwordreturn key以后每次请求用这个key 验证之前CMDB 一个key只能使用30sapi接口调用第一步 获取我们的身份证令牌第二步 参考官方文档 来创建我们的用户curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc": "2.0","method":"user.login","params":{"user":"Admin","password":"zabbix"},"id": 1}' //172.16.102.19/api_jsonrpc.php自动化监控的三种方式zabbix agent 自动注册自动添加到监控里面vim /etc/zabbix/zabbix_agentd需要改的地方ServerActive=10.0.0.1端口10051hostname=linux-nde2.example.com 唯一hostMetadata=模板 自动注册需要添加的模板HostMetadataItem=监控项目 system.uname 167行 zabbix_get -s 10.0.0.1 system.uname我这个metadata可以通过监控项目来设定设置一个动作来触发条件actions event source auto registrationAgent自动注册conditions 条件proxy=proxy-node1host metadata like liunxoperations 操作add hostadd to host grouplink to templatezabbix server 自动发现discovery 自动发现在server 端修改一般的接口都是这样的 发送账号密码请求一个key 通过这个key去进行其他的请求zabbix apiapi_jsonrpc.php rpc json api验证https://www.zabbix.com/documentation/3.2/manual/api/reference/user/login curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc": "2.0","method":"user.login","params":{"user":"Admin","password":"zabbix"},"id": 1}' //192.168.1.11/api_jsonrpc.phphost{ "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["hostid"], "selectGroups": "extend", "filter": { "host": [ "Zabbix server" ] } }, "auth": "038e1d7b6ee9eae095879e", "id": 2 }请求API 获取serssion id auth keyzabbix server agentd之间设置一个主动模式zabbix proxy 自动发现通过zabbix api接口 去添加一台机器hostid hostname修改zabbix监控系统里面主机的名字 流程可以使用ip来获取zabbix里面的信息业务库当中获取所有的Ip获取zabbix里面所有的ip循环我们的业务库当中的ip 来获取所有的hostid第一个步骤 获取我们的token第二个请求API接口 来更新我们hostname作业 先做业务库和zabbix里面库的对比 然后再更新我们的数据脚本里面2种方法都有本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。智慧未来百家号最近更新:简介:为寻找存在感而混迹于互联网的一位屌丝作者最新文章相关文章新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
家境小康, 积分 1190, 距离下一级还需 810 积分
论坛徽章:1
比如host和hostinterface是两个不同的项,如果我要得到host对应的interface,似乎只有先获取到这个host的ID,然后把interface全部获取到,查看哪个interface中的hostid是我这个host对应的ID。有没有更加快捷的方法直接获得这个host对应的interface呢?
另外,trigger,event,alert之间的关系又是怎样的呢,如果我想得到某个item关联的alert,需要怎样做呢?
白手起家, 积分 65, 距离下一级还需 135 积分
论坛徽章:0
本帖最后由 guobiao_cn 于
16:05 编辑
可以考虑用mysql来用表关联与字段对应, 字段即是你的hostid 对应interface id 。
家境小康, 积分 1190, 距离下一级还需 810 积分
论坛徽章:1
有办法只通过api的调用,不直接读取mysql表来实现吗。
另外使用API获取信息和直接读它的mysql的数据库相比,哪种是比较好的方式呢?
白手起家, 积分 65, 距离下一级还需 135 积分
论坛徽章:0
当然是读取MYSQL数据库快些。 如通过API的话还是得PHP通过数据库连接驱动去找数据库,API来读这里多了二个步骤。
API比较规范和直接,因为这里不是涉及到后面的逻辑关系,详细可以看host.get接口规范。
但是从数据库是快,自定义定制查询效率高, 缺点你要懂得ZABBIX数据库的结构关系与的表业务关系,这些东西你可以看PHP源代码查询得到。
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处}

我要回帖

更多关于 zabbix监控api接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信