【问题标题】:Populating a Date/Time in Prometheus Alert Manager E-mail在 Prometheus Alertmanager 电子邮件中填充日期/时间
【发布时间】:2016-12-09 22:33:03
【问题描述】:

所以我有一个警报规则,当队列长度在一段时间内很长时,它会在 prometheus 中触发。

通过警报管理器,我可以创建和接收电子邮件。

我现在的问题是,作为我的电子邮件正文的一部分,我想要知道警报管理器触发电子邮件或触发警报的日期和时间。

我不确定如何执行此操作。我是否可以在警报中创建一个标签并以某种方式使用当前日期/时间填充它,还是什么?有什么想法吗?

【问题讨论】:

    标签: time alert prometheus


    【解决方案1】:
    - alert: Alert
      for: 5m
      expr: ...
      annotations:
        timestamp: >
          time: {{ with query "time()" }}{{ . | first | value | humanizeTimestamp }}{{ end }}
    

    我仍然发现迭代警报和在警报文本中获取时间序列或时间戳的值很困难。所以我以上述方式解决了这个问题。它有效,我能够在电子邮件正文中获得警报的时间戳/时间序列。干杯!

    【讨论】:

    • 对你的代码的描述没有提供有用的信息,你能评论你的代码吗?
    • 嗨 Andronicus,我已经更新了规则文件。括号中的代码包含查询,prometheus 执行该查询并将其转换为人类可读的格式。 1)。注释部分应该有这个代码来收集时间戳。 2)。在 rule.yaml 文件中的 -alert details 下,在带有这部分“时间戳”的注释中附加摘要、描述。 3)。注释部分应该有这个代码来收集时间戳。 4)。重启 Prometheus 服务器。现在 Alertmanager 将拥有带有时间戳详细信息的警报。我的需要是收集它是电子邮件。它可以在另一个配置中收集,因为它是警报注释的一部分。
    • @Chintaman 能否在“注释”字段中添加警报的创建时间?
    【解决方案2】:

    Alertmanager 模板中的警报具有您可以使用的 StartsAt 属性。

    【讨论】:

    • 嗨,布赖恩,谢谢!但是目前我似乎无法增加 StartsAt 属性。我可能只是不知道如何正确引用警报数组:我可以得到 {{ .Alerts | len }} 这给了我 1,但如果我不确定如何获得 StartsAt 属性,它目前告诉我“<.alerts.startsat>: can't evaluate field StartsAt in type....”
    • 遍历 Alerts,然后从元素中获取 StartsAt。
    • 亲爱的@brian-brazil,如何在 alertmanager 模板中获取当前时间?我想获得仍然触发警报的持续时间,但是 {{ (.EndsAt.Sub .StartsAt).Truncate 1000000000 }} 不起作用,因为 .EndsAt 为空,结果为负。所以我需要用当前时间替换.EndsAt,我尝试了time.Now。但是,我得到错误'函数“时间”未定义'。是否可以在不修改每个警报规则的情况下通过添加时间戳来获取电子邮件中触发警报的持续时间?
    • {{ .StartsAt | since }} 也可以让我获得警报持续时间。
    • @brian-brazil 有什么建议如何将“StartAt”字段作为警报标签导入?
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2018-06-03
    • 2022-01-16
    • 1970-01-01
    • 2019-06-21
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多