根据层级抑制Kapacitor警报
Kapacitor 允许您构建一个强大的监控和警报解决方案,具有多个“级别”或“层级”的警报。 然而,当一个事件同时触发高层和低层警报时,会出现一个问题,您最终会收到来自不同上下文的多个警报。 AlertNode的 .inhibit() 方法允许您在触发警报时抑制其他警报。
例如,假设您正在监控一组服务器。作为您警报架构的一部分,您有主机级别的警报,例如CPU使用率警报、RAM使用率警报、磁盘I/O等。您还有监控网络健康、主机正常运行时间等的集群级别警报。
如果集群中某个主机的CPU峰值使机器下线,则您将收到一个单一的警报——该节点下线的警报,而不是针对CPU峰值的主机级别警报和针对下线节点的集群级别警报。集群级别警报会抑制主机级别警报。
使用.inhibit()方法来抑制警报
该 .inhibit() 方法使用警报类别和标签来抑制或压制其他警报。
// ...
|alert()
.inhibit('<category>', '<tags>')
category
此警报抑制或禁止警报的类别。
tags
一个以逗号分隔的标签列表,必须匹配才能抑制或压制警报。
示例分层警报抑制
以下TICKscripts表示分层警报架构中的两个警报。第一个是主机特定的CPU警报,当空闲CPU使用率低于10%时,会向system_alerts类别触发警报。流数据点按host标签分组,该标签标识数据点来源的主机。
cpu_alert.tick
stream
|from()
.measurement('cpu')
.groupBy('host')
|alert()
.category('system_alerts')
.crit(lambda: "usage_idle" < 10.0)
以下的 TICKscript 是一个集群级别的警报,用于监控集群中主机的正常运行时间。
它使用 deadman() 函数来
当主机无响应或离线时创建警报。
在 deadman 警报中的 .inhibit() 方法抑制所有包含匹配 host 标签的 system_alerts
类别的警报,这意味着它们来自同一主机。
host_alert.tick
stream
|from()
.measurement('uptime')
.groupBy('host')
|deadman(0.0, 1m)
.inhibit('system_alerts', 'host')
通过这种警报架构,一个主机可能由于CPU瓶颈而无响应,但由于死人的警报抑制了来自同一主机的系统警报,因此您不会同时收到死人的警报和高CPU使用率的警报通知;只会收到该特定主机的死人的警报。