今天我们发布了 Prometheus 2.0 的第三个 alpha 版本。除了新的存储层中的各种错误修复之外,它还包含一些计划内的重大更改。
Flag 更改
首先,我们迁移到了一个新的 flag 库,该库使用更常见的双破折号 --
作为 flag 的前缀,而不是 Prometheus 至今使用的单破折号。部署必须相应地进行调整。此外,一些 flag 在此 alpha 版本中被删除。自 Prometheus 1.0.0 以来的完整列表是:
web.telemetry-path
- 所有
storage.remote.*
flag - 所有
storage.local.*
flag query.staleness-delta
alertmanager.url
Recording Rules 更改
告警和记录规则是 Prometheus 的关键特性之一。但它们也存在一些设计问题和缺失的功能,即:
所有规则都以相同的间隔运行。我们可能有一些最好以 10 分钟间隔运行的繁重规则,以及一些可以以 15 秒间隔运行的规则。
所有规则都是并发评估的,这实际上是 Prometheus 最古老的 未解决的错误。这有两个问题,一个明显的问题是,如果您有很多规则,则每次评估间隔负载都会激增。另一个问题是,相互依赖的规则可能会被提供过时的数据。例如:
instance:network_bytes:rate1m = sum by(instance) (rate(network_bytes_total[1m]))
ALERT HighNetworkTraffic
IF instance:network_bytes:rate1m > 10e6
FOR 5m
这里我们正在对 instance:network_bytes:rate1m
进行告警,但是 instance:network_bytes:rate1m
本身是由另一个规则生成的。只有在记录 instance:network_bytes:rate1m
的当前值后,运行告警 HighNetworkTraffic
,我们才能获得预期的结果。
- 规则和告警要求用户学习另一种 DSL。
为了解决上述问题,规则分组在 很久以前就被提出,但直到最近才 作为 Prometheus 2.0 的一部分 实现。作为此实现的一部分,我们还将规则移至众所周知的 YAML 格式,这也使得基于用户环境中常见的模式生成告警规则更加容易。
这是新格式的样子:
groups:
- name: my-group-name
interval: 30s # defaults to global interval
rules:
- record: instance:errors:rate5m
expr: rate(errors_total[5m])
- record: instance:requests:rate5m
expr: rate(requests_total[5m])
- alert: HighErrors
# Expressions remain PromQL as before and can be spread over
# multiple lines via YAML’s multi-line strings.
expr: |
sum without(instance) (instance:errors:rate5m)
/
sum without(instance) (instance:requests:rate5m)
for: 5m
labels:
severity: critical
annotations:
description: "stuff's happening with {{ $labels.service }}"
每个组中的规则按顺序执行,并且您可以为每个组设置评估间隔。
由于此更改是重大更改,我们将在 2.0 版本中发布它,并为 promtool 添加了一个用于迁移的命令:promtool update rules <filenames>
。转换后的文件会附加 .yml
后缀,并且您的 Prometheus 配置中的 rule_files
子句必须进行调整。
请通过测试这个新的 alpha 版本,帮助我们向 Prometheus 2.0 稳定版本迈进!您可以在我们的 问题跟踪器 上报告错误,并通过我们的 社区渠道 提供一般反馈。