【问题标题】:How to make Prometheus alert description give both ratio and absolute numbers?如何使 Prometheus 警报描述同时给出比率和绝对数字?
【发布时间】:2019-11-01 10:07:38
【问题描述】:

我目前有一个 Prometheus 警报,当我的成功率低于 85% 时会触发。

我想将比率的绝对数字添加到警报描述中。我该怎么做?

我的 YAML 目前看起来像这样(我清理了一些无关的细节):

groups:
  - name: recording_rules
    rules:
    - record: number_of_successes_24h
      expr: avg(sum by(instance)(my_status{kubernetes_name="my-prom",timeRange="1d",status=~"success"}))
    - record: number_of_total_24h
      expr: avg(sum by(instance)(my_status{kubernetes_name="my-prom",timeRange="1d"}))
    - record: success_rate_24h
      expr: clamp_max(number_of_successes_24h / number_of_total_24h * 100, 100)

  - name: alerting_rules
    rules:
    - alert: LowSuccessRate24H
      expr: success_rate_24h < 85
      labels:
        severity: critical
      annotations:
        summary: "CRITICAL: Low success rate 24h"
        description: "Success rate in the last 24 hours went below 85% (value: {{ $value }}%)"

我的问题是,如何将number_of_successes_24hnumber_of_total_24h 添加到描述中?
我在https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/阅读了官方文档,但我迷路了;我搜索了 SO,但没有找到任何相关内容。

我读到$labels 中提供了更多详细信息,因此我尝试将其打印为示例以查看其中的内容,但我得到了map[__name__:success_rate_24h],但我不知道如何查看其中的内容.

欢迎提供部分答案和指南。谢谢。

【问题讨论】:

    标签: alert prometheus prometheus-alertmanager


    【解决方案1】:

    这是我的TasksMissing警报的简化版本,它在摘要中输出丢失的任务数、任务总数和受影响的实例:

      - alert: TasksMissing
        expr: |
          job_env:up:ratio < .7
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: Tasks missing for {{ $labels.job }} in {{ $labels.env }}
          description:
           '{{ with printf `job_env:up:count{job="%s",env="%s"} - job_env:up:sum{job="%s",env="%s"}` $labels.job $labels.env $labels.job $labels.env | query }}
              {{- . | first | value -}}
            {{ end }}
            of
            {{ with printf `job_env:up:count{job="%s",env="%s"}` $labels.job $labels.env | query }}
              {{- . | first | value -}}
            {{ end }}
            {{ $labels.job }} instances are missing in {{ $labels.env }}:
            {{ range printf `up{job="%s",env="%s"}==0` $labels.job $labels.env | query }}
              {{- .Labels.instance }}
            {{ end }}'
    

    生成的描述应该是“prod 中缺少 3 个 foo-service 实例中的 2 个:foo01.prod.foo.org:8080 foo02.prod.foo.org:8080”。

    想法是您使用 Go 模板生成查询(通过使用 printf 使用来自 $labels 的值填充模板),然后将其通过管道传输到 Prometheus-defined query function 并返回任一结果(您可以使用with 处理)或多个值(您可以使用range 进行迭代)。然后您可以直接打印时间序列值或一些标签(例如实例名称)。

    【讨论】:

    • 非常感谢!我无法弄清楚我做错了什么。您的回答很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多