[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

使用 Zabbix API 最快获取警报信息! 并走向自动化

你好。
我是Mandai,负责Wild 开发团队。

这次想写一下Zabbix的API。

这可能有点出乎意料,但是您认为 API 很麻烦吗?

老实说,我恰恰相反;API 非常简单。
Zabbix的管理屏幕有很多信息,所以如果你像我一样经常使用它,你经常会忘记所有东西在哪里。

警报信息出现在仪表板上,因此很容易迷路,但 API 仍然会更快!因此,我们研究了从 API 获取警报信息的最快方法。

API执行环境

这次,我使用了一个名为Postman的软件来运行API。
它最初是作为 Chrome 和 Firefox 的扩展发布的,但独立版本也已经发布了一段时间,所以我将使用该版本。

邮递员 | API 开发环境

我觉得试用版只要按照本文的内容去实现就没有问题。
用于API开发等也很方便,所以如果您喜欢它,请尝试切换到付费计划。
这在与团队一起开发时非常有用,因为您可以共享 URL 等。

 

检查 Zabbix API 版本

让我们从最简单的 API 开始。
Zabbix 仅提供一个 API 端点,因此所有 API 均从以下 URL 执行。

http[s]://[您的域名]/api_jsonrpc.php

 

请务必使用POST发送登录帐户信息等信息。

此外,内容类型指定为 application/json-rpc。

首先,我们来获取Zabbix信息。

// 请求体 { "jsonrpc": "2.0", "method": "apiinfo.version", "id": 1, "auth": null, "params": {} } // 响应 { "jsonrpc": “2.0”,“结果”:“3.4.14”,“id”:1}

 

如果版本像这样返回,则请求已正确发出。

如果出现错误,请检查下面的HTTP请求信息,看看是什么问题。

POST /api_jsonrpc.php HTTP/1.1 主机:[您的域] 内容类型:application/json-rpc {"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth ":null,"参数":{}}

 

如果请求 JSON 作为原始数据存储在正文中,似乎效果很好。
否则,URL可能不正确,请检查正确的URL。

步骤是:

  • 通过浏览器登录Zabbix管理界面
  • 检查首页的 URL(在本例中为 https://[您的域名]/zabbix.php?action=dashboard.view)
  • 由于 api_jsonrpc.php 与 zabbix.php 位于同一级别,因此将 zabbix.php?action=dashboard.view 替换为 api_jsonrpc.php

我认为您现在可以获得正确 API 的 URL。

 

登录

// 请求体 { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "[用户名]", "password": "[密码]" }, " id": 1, "auth": null } // 响应 { "jsonrpc": "2.0", "result": "[32 位哈希值]", "id": 1 }

 

通过将响应中获得的哈希值作为令牌放入每个请求的 auth key 中,可以获得详细信息。

 

获取主机信息

获取主机列表非常容易。
只需将 host.get 指定为方法,并将必要的信息指定为参数即可。

由于Zabbix从服务器检索大量数据,因此记住参数可能会比较困难。

// 请求体 { "jsonrpc": "2.0", "method": "host.get", "params": { "output": [ "hostid", "host" ], "selectInterfaces": [ "interfaceid" , "ip" ] }, "id": 2, "auth": "[32位哈希值]" } // 响应 { "jsonrpc": "2.0", "result": [ { "hostid": " 1", "主机": "Zabbix 服务器", "接口": [ { "interfaceid": "1", "ip": "127.0.0.1" } ] }, ... ], "id": 2 }

 

我认为您可以通过复制和粘贴来获取信息,除非您需要在 auth 部分填写通过 user.login API 获取的登录哈希。
请注意,如果您监控大量服务器,您将收到大量 JSON 数据。

如果记录较多,可以使用限制键缩小记录数。

 

获取提醒

现在,主要问题是获取警报,这与获取主机信息几乎相同。

// 请求 json // 获取 3 个最新警报 { "jsonrpc": "2.0", "method": "alert.get", "params": { "output": "extend", "limit": "3" , "sortfield": "alertid", "sortorder": "DESC" }, "auth": "xxxxxxxxxxxxxxxxxxxxxx", "id": 1 } // 响应 { "jsonrpc": "2.0", "result" : [ { “alertid”:“21496022”,“actionid”:“13”,“eventid”:“72481”,“userid”:“xxx”,“时钟”:“1557795687”,“mediatypeid”:“7”,“sendto” “:“...”,“主题”:“...”,“消息”:“...”,“状态”:“1”,“重试”:“0”,“错误”:“” , "esc_step": "1", "alerttype": "0", "p_eventid": "xxxxx", "acknowledgeid": "0" }, { "alertid": "21496021", "actionid": "13" ,“eventid”:“72481”,“userid”:“xxx”,“时钟”:“1557795687”,“mediatypeid”:“1”,“sendto”:“...”,“主题”:“.. ."、"消息":"..."、"状态":"1"、"重试":"0"、"错误":""、"esc_step":"1"、"警报类型":"0 ", "p_eventid": "xxxxx", "acknowledgeid": "0" }, { "alertid": "21496020", "actionid": "11", "eventid": "72481", "userid" : "xxx ”、“时钟”:“1557795687”、“mediatypeid”:“1”、“sendto”:“...”、“主题”:“...”、“消息”:“...”、“状态” “:“1”,“重试”:“0”,“错误”:“”,“esc_step”:“1”,“alerttype”:“0”,“p_eventid”:“xxxxx”,“acknowledgeid”:“ 0" } ], "id": 1 }

 

虽然详细信息已被删除,但可以检索的项目已在上面列出。
您可以使用此 API 来获取警报发生时间和解决时间。

没有明显的点,但如果我不得不猜测,我会说它按降序对警报进行排序。
使用 sortfield 指定要排序的数据,使用 sortorder 指定排序顺序。

排序顺序必须指定为 ASC | DESC 并且必须为大写。
我对这个有点卡住了。

 

结论

事实证明,为了从 API 获取警报信息,我们需要运行两个 API。

  1. 使用 user.login API 获取登录令牌
  2. 使用alert.get API获取警报信息

如果您稍微解析步骤 1 中的响应并提取令牌,您还可以执行步骤 2 中的 API,因此即使那些不熟悉编程的人也应该能够相对轻松地创建它。

 

id是什么?

id 是用户可以指定用于标识响应的任何整数。
但请注意,如果为null、非整数或不存在,则API返回值将无法正确接收。

 

概括

您可以从 Zabbix API 添加和更改监视器,因此大多数事情都可以从 API 完成。

此外,虽然它们不直接执行 API,但已经开发了插件,允许您从 ansible 和 terraform 注册主机(该软件使用 API 来反映设置),因此我们拥有一个可以自动化所有操作的环境施工到监测。

您可以定期从 AWS Lambda 或 Cloud Functions 访问它,或者从 cron 定期运行它,我希望越来越多地使用它来自动执行定期主机运行状况检查和更改设置。

在这里最新版本的Zabbix API文档,但是它只有英文版本,看起来不太友好,所以我认为首先需要进行一些尝试和错误。
在这种情况下,设置一个 Zabbix 服务器进行测试并检查执行情况会更安全。

就是这样。

如果您觉得这篇文章有帮助,请点赞!
2
加载中...
2 票,平均:1.00 / 12
11,700
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。