百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Zabbix API——开启运维监控自动化之路

toyiye 2024-06-24 19:31 14 浏览 0 评论

随着互联网对监控需求的升级与扩大,Zabbix API 在监控中的角色也愈来愈重要,尤其是在集成第三方软件和自动化日常任务时。想象一下,如果没有自动化技术,管理数千台服务器是多么的困难!

Zabbix API 为自动化的批量操作和第三方软件集成以及其他作用提供可编程接口,从而提升了Zabbix功能上的各种可能性。安全性上,Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。

Zabbix API典型工作流

使用 API 的基本步骤

  1. 准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。
  2. 采用POST方法向http://example.com/zabbix/apijsonrpc.php发送此JSON对象. http://example.com/zabbix/是Zabbix前端地址。apijsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。
  3. 获取 SESSIONID
  4. 通过 SESSIONID 建立后续的连接
  5. 提交 POST 数据,格式为 JSON,其中放对应的方法,获取需要的数据。

Zabbix API功能与应用

Zabbix API 提供两项主要功能

  1. 远程管理 Zabbix 配置
  2. 远程检索配置和历史数据

Zabbix API允许以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问;

它被广泛用于:

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

例如:1)使用zabbix进行批量管理,比如:我们要添加1000台主机。

2)使用zabbix结合微信、email、钉钉等进行移动端的报警。

Zabbix API的使用

使用 curl 模拟 API 的使用

1.获取认证

在访问Zabbix内部的任何数据之前,需要登录并获取身份验证令牌。这可以使用该user.login方法完成。假设要以标准Zabbix Admin用户身份登录。JSON请求如下所示:

$ curl -s -X POST -H 'Content-Type:application/json' -d '
> {
> "jsonrpc": "2.0",
> "method": "host.get",
> "params": {
> "user": "Admin",
> "password": "zabbix"
> },
> "id": 1
> }' http://172.16.241.130/zabbix/api_jsonrpc.php | python -m json.tool
{
 "jsonrpc": "2.0",
 "result": "581cc92624202bddaeff3a90cca181dc",
 "id": 1
}

请求对象的具体属性:

  • jsonrpc- API使用的JSON-RPC协议版本; Zabbix API实现了JSON-RPC 2.0版;
  • method- 被调用的API方法;
  • params- 将传递给API方法的参数;
  • id - 请求的任意标识符;
  • auth - 用户认证令牌; 既然还没有,那就设定了null。

2.用获取的 SESSIONID 去调用 API 的 host.get 方法请求 hostid

$ curl -s -X POST -H 'Content-Type:application/json' -d '
> {
> "jsonrpc": "2.0",
> "method": "host.get",
> "params": {
> "output": ["hostid"]
> },
> "auth": "581cc92624202bddaeff3a90cca181dc",
> "id": 1
> }' http://172.16.241.130/zabbix/api_jsonrpc.php | python -m json.tool
{
 "jsonrpc": "2.0",
 "result": [
 {
 "hostid": "10084"
 }
 ],
 "id": 1
}

响应对象的属性:

  • jsonrpc - 再次,JSON-RPC协议的版本;
  • result - 方法返回的数据;
  • id - 相应请求的标识符。

python 调用 zabbix api 接口的自动化实例

1.获取 KEY

!/usr/bin/env python2.7
#coding=utf-8
import json
import urllib2
# based url and required header
url = "http://monitor.example.com/api_jsonrpc.php"
header = {"Content-Type": "application/json"}
# auth user and password
data = json.dumps(
{
 "jsonrpc": "2.0",
 "method": "user.login",
 "params": {
 "user": "Admin",
 "password": "zabbix"
},
"id": 0
})
# create request object
request = urllib2.Request(url,data)
for key in header:
 request.add_header(key,header[key])
# auth and get authid
try:
 result = urllib2.urlopen(request)
except URLError as e:
 print "Auth Failed, Please Check Your Name And Password:",e.code
else:
 response = json.loads(result.read())
 result.close()
 print "Auth Successful. The Auth ID Is:",response['result']

2.获取 hostlist

#!/usr/bin/env python2.7
#coding=utf-8
import json
import urllib2
#xiaorui.cc
url = "http://10.10.10.61/api_jsonrpc.php"
header = {"Content-Type": "application/json"}
# request json
data = json.dumps(
{
 "jsonrpc":"2.0",
 "method":"host.get",
 "params":{
 "output":["hostid","name"],
 "filter":{"host":""}
 },
 "auth":"dbcd2bd8abc0f0320fffab34c6d749d3",
 "id":1,
})
# create request object
request = urllib2.Request(url,data)
for key in header:
 request.add_header(key,header[key])
# get host list
try:
 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
else:
 response = json.loads(result.read())
 result.close()
 print "Number Of Hosts: ", len(response['result'])
 for host in response['result']:
 print "Host ID:",host['hostid'],"Host Name:",host['name']

目前已支持25个API接口,更多的应用请查看API官方文档。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码