在警报时添加 Alertmanager 表达式查询

问题描述 投票:0回答:3

我的目的是添加当alertmanager通过警报媒介发出警报时要在描述或摘要中显示的查询表达式。 可能是下面这样的吗?

- alert: OutOfDiskSpace
expr: node_filesystem_free_bytes / node_filesystem_size_bytes * 100 < 10
for: 1m
labels:
  severity: Critical
annotations:
  description: "Disk is almost full. The expr query  is {{ $labels.expr }}"
prometheus grafana prometheus-alertmanager promql
3个回答
1
投票

我认为您正在寻找的是

$value
它将显示表达式计算的值。例如,考虑以下规则

      - alert: service_down
        expr: (probe_http_status_code - 0) != 200
        for: 1m
        labels:
          severity: 3
          threshold: danger
        annotations:
          summary: "HTTP : {{ $value }} for URL *{{ $labels.instance }}*."
          description: "*{{ $labels.instance }}* of job *{{ $labels.job }}* is down"

在摘要中,您将获得已关闭的 API 的状态代码。

在您的情况下,以下内容应该有效

- alert: OutOfDiskSpace
expr: node_filesystem_free_bytes / node_filesystem_size_bytes * 100 < 10
for: 1m
labels:
  severity: Critical
annotations:
  description: "Disk is almost full. The expr query  is $value"

1
投票

是的,这是可能的。

Prometheus 模板语言基于 Go 模板 系统。

您可以利用这一点将 Prometheus 查询结果放入注释模板中。例如,在

alert.rules.yml
文件中,您可以在
annotations.summary
字段上使用以下内容:

      - 
        alert: TestAlert
        expr: go_info == 1
        for: 5s
        labels:
          severity: warning
        annotations:
          summary: "go_info value: {{ printf `go_info{instance=\"%s\"}` $labels.instance | query | first | value }}"
          description: "value: {{ $value }}"

警报时,这将执行

go_info
的 promQL 查询(在本例中)格式为
metric{instance=[alerted instance]}
,它返回一个元组,您可以使用如上所示的处理管道过滤到值。

来源:普罗米修斯文档


0
投票

由于您明确要求在警报管理器通知中显示表达式,例如通过 slack,我可以向您提供以下解决方法。我将使用 Alertmanager 文档

的概念

Alertmanager 移交给通知模板的数据包含每个组的警报数组,该数组包含该组中所有警报对象的列表。由于我按

alertname
进行分组,并且我的警报名称(如果您有基于警报名称的适当抑制规则,也可以工作)是唯一的,该组中的所有警报对象都将具有相同的
GeneratorURL
,其中包含表达式,但解析为 URL 字符串。由于我没有找到反函数
urlquery
(请参阅Go模板化默认函数),我使用以下自制的部分反函数作为模板:

{{ (index .Alerts 0).GeneratorURL | reReplaceAll ".*expr=" "" | reReplaceAll "&g0.*" "" | reReplaceAll "%7B" "{" | reReplaceAll "%3D" "=" | reReplaceAll "%3E" ">" | reReplaceAll "%3C" "<" | reReplaceAll "%22" "\"" | reReplaceAll "%2C" "," | reReplaceAll "%21" "!" | reReplaceAll "%7D" "}" | reReplaceAll "\\+" " " | reReplaceAll "%2A" "*" | reReplaceAll "%2F" "/" | reReplaceAll "%28" "(" | reReplaceAll "%29" ")" | reReplaceAll "%5E" "^" | reReplaceAll "%5B" "[" | reReplaceAll "%5D" "]" }}

这将打印出表达式。如果您在表达式中使用其他符号(将由

urlquery
转换),您可能需要添加一些替换步骤。

© www.soinside.com 2019 - 2024. All rights reserved.