太长了;博士
我在普罗米修斯中有一个名为“ignore”的标签,其值为“yes”:
metric_test{label1="label1",ignore="yes"} 1
Run Code Online (Sandbox Code Playgroud)
我想禁用带有此标签的任何指标的警报。我不想手动编辑 500 多个警报。警报不应出现在 prometheus GUI 中。
有没有一个解决方案可以本地执行此操作?
我有各种机器和服务,其指标是通过 kubernetes_exporter 或 node_exporter 等导出器收集的。
我有一个警报“正常运行时间”,当机器出现故障时会触发该警报。
所有机器都有此警报,警报如下:
- alert: Uptime
expr: up{} == 0
for: 2m
labels:
severity: critical
Run Code Online (Sandbox Code Playgroud)
有些机器我不关心。它们会在计划外的时间持续关闭,并且通常并不重要,因此我想将此类机器从上述警报中排除。
我发现有效的是修改上面的表达式,添加被忽略的机器:
- alert: Uptime
expr: up{ignore!="yes"} == 0
for: 2m
labels:
severity: critical
Run Code Online (Sandbox Code Playgroud)
假设我有一个我不关心的 kubernetes 命名空间,我可以添加namespace!="test",Prometheus 仍然会收集指标,但不会触发警报。
我发现它也可以通过在 expr 末尾添加来使用AND up{ignore!="yes"},同时保持表达式的其余部分不变。
惊人的!
此处讨论以下方法:禁用对特定主机的警报,同时对所有其他主机发出警报
但这种方法有一个问题,那就是随着添加的忽略规则越多,您必须添加的条件就越多。当然,您可以像上面讨论的那样将事物分组在一起,添加标签,enableAlert="true"以便每台机器都enableAlert="false"被忽略。这可以工作,但仍然需要手动工作,并且还需要为每个警报进行手动配置。
那么,让我们看看其他可能的解决方案:
正如此处讨论的Prometheus 配置忽略 Kubernetes 中特定命名空间的指标抓取,当存在某个标签的值(例如 kubernetes 命名空间)时,可以删除指标。
请参阅上述讨论中的一个示例:
relabel_configs:
# This will ignore …Run Code Online (Sandbox Code Playgroud)