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]字符串。