1. 如何更高效的应用标签
小伙伴们对于 Zabbix 内的标签一定都很熟悉了。标签确实非常灵活,配置好了能大大提高运维工作的效率,但一个个模板、甚至一个个指标的去维护标签也是件痛苦的事情。
Argus运维平台,一个基于 Zabbix 的 IT 运维监控平台,能针对大量模板内的指标实现标签的自动化添加,并基于此提供基于标签的、跨模板的指标 Top N 功能。
2. 官方推荐的标签使用准则
这里将分使用场景来介绍具体的标签使用准则。
注意,这些标签使用准则都是 Zabbix 官方所推荐的。
2.1 模板配置
2.1.1 名称
标签的名称和值大小写敏感,比如“Zabbix server”。
注意,这里所说的只是强制性的要求,所以看起来很宽松。但为了更好的效果,建议遵从下文的 2.1.3 标签名和标签值的格式。
2.1.2 标签
用下面推荐的标签模型使用标签来对模板进行逻辑分组。
请注意,在 Zabbix 未来的发行版中,该标签模型可能会变为强制性的。不遵循该规则的模板需要更新后才能继续使用。
模板标签
例如,模板 Huawei VRP by SNMP 包含下列标签:
class: network; target: huawei; target: huawei-vrp
2.1.3 标签名和标签值的格式
-
必须小写
-
允许下列字符:a-z, 0-9, -, _, .(字母,数字,减号,下划线,英文句号)
-
对于单词分隔,首选连字符(减号)而不是下划线(“cloud-region”,而不是“cloud_region”)
-
首选 ASCII 编码,但也支持 UTF-8
-
当使用普通名词作为标签值时,以单数形式使用,除非该名词仅以复数形式使用(“pipeline”,而不是“pipelines”)
-
每个标签名称或值的长度限制为 255 个字符
2.2 监控项
2.2.1 标签
用下面推荐的标签模型使用标签来对监控项进行逻辑分组。
请注意,在 Zabbix 未来的发行版中,该标签模型可能会变为强制性的。不遵循该规则的模板需要更新后才能继续使用。
监控项标签
例如,监控项 ICMP ping 包含下列标签:
component: health; component: network
2.2.2 更新间隔,历史和趋势数据的存储周期
如果监控项包含标签“data: raw”(主监控项或仅被其它计算型监控项所需的监控项,详见上面的表格)——那么设置历史和趋势数据的存储周期为 0 即可,因为用不着保存这些中间值。
2.3 低级自动发现规则
低级自动发现(LLD)里的监控项和触发器可以包含标签,就像常规监控项和触发器一样,但 LLD 监控项还可以有包含 LLD 宏的标签。
例如,低级自动发现监控项 Interface {#IFNAME}({#IFALIAS}) 可能包含以下标签:
component: network; description: {#IFALIAS}; interface: {#IFNAME}
如果适用,可配置 LLD 主机发现规则,将主机标签 service
分配给发现的主机,以指定资源引用。
例如,发现的主机“load_balancer”、“web01”、“web02”、“webforum”都包含下列标签:
service:webserver
2.4 触发器
用下面推荐的标签模型使用标签来对触发器进行逻辑分组。
触发器标签
例如,触发器 High ICMP ping loss 包含下列标签:
scope: availability; scope: performance
2.5 创建 webhook
2.5.1 参数
Webhook 使用参数来获取配置和宏的值。
以下与标签有关的宏可用于实现附加逻辑或提供补充信息:
-
{EVENT.TAGS} 或 {EVENT.TAGSJSON} - webhook 可使用这些宏以所需的格式(纯文本或结构化数据)将事件标签传递给外部系统。
2.5.2 webhook 标签
标签用于存储事件的数据(仅用于基于触发器的事件,即告警)。webhook 使用标签来存储从外部系统接收的令牌 ID、链接或任何其它信息,应该将这些信息存储为事件标签。创建标签名时应考虑以下规则:
-
应避免使用触发器级别上的常用词例如,触发器会有一个 URL 标签,以记录与触发器相关的系统地址。如果 webhook 还使用 URL 标签名来存储从令牌系统检索到的链接,这将会导致混乱(将出现两个同名的标签,并且 webhook 逻辑可能会受到影响)。
-
标签名应以唯一字符串作为前缀,以避免在不同的 webhook 中重复例如,如果 Redmine 和 Jira webhook 具有完全相同的 ticket_id 标签名(不带前缀),那么当两个 webhook 在同一动作中使用时,标签值可能会混淆。
2.5.3 返回值
虽然没有返回特定值的要求,但在定义 webhook 的响应时,应使用下列方法之一:
-
如果 webhook 不使用标签:建议返回一个通用字符串(例如 OK),以表示执行成功。
-
如果 webhook 使用标签(选中了 Process tags 复选框):webhook 应始终返回一个 JSON 对象,该对象至少包含一个空的标签对象:{tags: {}}。
示例
如果 webhook 正在使用基于令牌的系统,并希望在事件标签中存储令牌 ID,那么它仍应返回空标签以进行更新/恢复操作。这是确保 Zabbix 服务器在解析 webhook 结果时不会产生错误的唯一方法,也是确保在不需要解析现有标签时不会产生开销的唯一方法。请注意,JSON 应该作为字符串返回,而不是作为对象返回,因为 Zabbix 服务器会将对象转换为[Object object]字符串。