感谢本文译者张宇!欢迎更多资深用户翻译原厂博文!
张 宇 | 宏时数据技术工程师
- Zabbix高级认证专家ZCP
- Zabbix5.0、6.0中文手册官方译者,Zabbix 高级认证专家 ZCP
- 参与过国内多家银行、保险客户的Zabbix监控实施,经验丰富。
随着监控基础设施的发展,您可能会遇到无法避免使用Zabbix API的情况。Zabbix API可以用于自动化日常工作流程的一部分,排除监控故障或简单地分析或获取有关特定实体集的统计信息。
在这篇博文中,我们将看看一些更高级的API方法和特定的方法参数,并学习如何使用它们来改进你的API工作流。
1. 使用CountOutput计数实体
首先收集一些统计数据。假设您必须计算一些匹配实体的数量——这里我们可以使用CountOutput参数。那么更高级的用例——如果我们必须计算一段时间内的事件数量呢? 下面例子将countOutput与time_from和time_till(在unixtime中)结合起来,得到11月份创建的事件数量。让我们来看看11月份所有具有灾难严重性的事件 :
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "event.get",
"params": {
"output": "extend",
"time_from": "1635717600",
"time_till": "1638223200",
"severities": "5",
"countOutput": "true"
},
"auth": "xxxxxx",
"id": 1
}
2.使用API执行配置导出/导入
接下来,让我们看看如何使用配置。在yaml中导出一个模板:
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "configuration.export",
"params": {
"options": {
"templates": [
"10001"
]
},
"format": "yaml"
},
"auth": "xxxxxx",
"id": 1
}
现在,让我们复制并粘贴导出的结果,并将模板导入到另一个环境中。 非常重要的一点是要记住,为了让这个方法完全按照我们的意愿工作,我们需要包括指定配置字符串中包含的特定实体的行为的参数,例如项目/值映射/模板等。 例如,如果我在这里排除了templates参数,就不会导入任何模板。
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "configuration.import",
"params": {
"format": "yaml",
"rules": {
"valueMaps": {
"createMissing": true,
"updateExisting": true
},
"items": {
"createMissing": true,
"updateExisting": true,
"deleteMissing": true
},
"templates": {
"createMissing": true,
"updateExisting": true
},
"templateLinkage": {
"createMissing": true
}
},
"source": "zabbix_export:n version: '5.4'n date: '2021-11-13T09:31:29Z'n groups:n -n uuid: 846977d1dfed4968bc5f8bdb363285bcn name: 'Templates/Operating systems'n templates:n -n uuid: e2307c94f1744af7a8f1f458a67af424n template: 'Linux by Zabbix agent active'n name: 'Linux by Zabbix agent active'n
...
},
"auth": "xxxxxx",
"id": 1
}
3.使用扩展参数扩展触发器函数和宏
使用触发器。获取关于一组特定触发器的信息是一种相对常见的做法。需要特别注意的是,在默认情况下,触发器名称、表达式或描述中的宏是不会展开的。为了展开可用的宏,我们需要使用展开参数:
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "trigger.get",
"params": {
"triggerids": "18135",
"output": "extend",
"expandExpression":"1",
"selectFunctions": "extend"
},
"auth": "xxxxxx",
"id": 1
}
4.获取已发现项目的附加LLD信息
如果我们希望为发现的实体(在本例中是一个项目)显示额外的LLD信息,我们可以使用selectDiscoveryRule和selectItemDiscovery参数。 虽然selectDiscoveryRule将提供创建项目的LLD规则的ID,但selectItemDiscovery可以指向创建项目的父项目原型ID、最后发现时间、项目原型键等。
下面的例子将返回物品的详细信息,并将提供LLD规则和物品原型id,丢失的物品将被删除的时间,以及物品最后被发现的时间:
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"itemids":"36717",
"selectDiscoveryRule":"1",
"selectItemDiscovery":["lastcheck","ts_delete","parent_itemid"]
}, "auth":"xxxxxx",
"id": 1
}
5.使用搜索参数对匹配的实体进行搜索
Zabbix API提供了两个用于执行搜索的标准参数。使用搜索参数,我们可以搜索字符串或文本字段,并尝试基于单个或多个条目查找对象。searchByAny参数可以扩展搜索—如果设置为true,我们将根据搜索数组中的任何一个条件进行搜索,而不是试图找到一个匹配所有条件的实体(默认行为)。
下面的API调用将在一个特定的模板上找到匹配代理和Zabbix键的项:
代码语言:javascript复制{
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"output": "extend",
"templateids": "10001",
"search": {
"key_": ["agent.","zabbix"]
},
"searchByAny":"true",
"sortfield": "name"
},
"auth": "xxxxxx",
"id": 1
}
使用上面的示例,修改它们,使它们适合您的用例,并且您应该能够非常容易地在您的环境中实现它们。