迁移
根据我们的稳定性承诺,Prometheus 2.0 发布包含了一系列向下不兼容的变化。本文档提供从 Prometheus 1.8 迁移到 Prometheus 2.0 及更高版本的指引。
命令行功能标志
Prometheus 命令行功能标志(command-line feature flags)格式已改变。现在所有标志不再使用单个短划线,而使用双短划线。常见的标志(如--config.file
、--web.listen-address
和--web.external-url
)保持不变,但几乎所有与存储相关的标志都被移除。
一些值得注意的被移除的标志:
-alertmanager.url
:在 Prometheus 2.0 中,用于配置静态 Alertmanager URL 的命令行标志已被移除。Alertmanager 现在必须通过服务发现进行查找,详情见 [Alertmanager 服务发现](#Alertmanager 服务发现)。-log.format
:在 Prometheus 2.0 中日志只能通过标准错误流(standard error)传输。-query.staleness-delta
已重命名为--query.lookback-delta
;Prometheus 2.0 引入了处理过期的新机制,详情见过时标记(Staleness)。-storage.local.*
:Prometheus 2.0 引入了一个新的存储引擎;因此所有与旧引擎相关的标志都被移除了。有关新引擎的信息,请参阅存储。-storage.remote.*
:Prometheus 2.0 移除了废弃的远程存储标志。提供这些标志将会导致启动失败。要写入 InfluxDB、Graphite 或 OpenTSDB,应使用相应的存储适配器。
Alertmanager 服务发现
Alertmanager 服务发现于 Prometheus 1.4 被引入,允许 Prometheus 使用与 Target 相同的机制动态发现 Alertmanager 副本。在 Prometheus 2.0 中,静态 Alertmanager 配置的命令行标志已被移除,因此以下命令行标志:
被以下在prometheus.yml
配置文件中的设置所替代:
你还可以使用 Prometheus 中的所有常规服务发现的集成功能和 Alertmanager 配置中的relabel_config
。下面的代码片段告诉 Prometheus 搜索带有name: alertmanager
标签、位于default
命名空间内及端口非空的 Kubernetes 容器。
记录规则和告警
配置告警和记录规则(recording rules)的格式已更改为 YAML。以下是在旧格式下的示例记录规则和告警:
在新版本中,同样的配置看起来像这样:
为了帮助转换,promtool
工具提供了一种自动化规则转换的模式。给定一个.rules
文件,它会转换为一个符合新格式.rules.yml
文件。例如:
需要在 Prometheus 2.5 版本使用promtool
,因为后续版本不再包含上述子命令。
存储
Prometheus 2.0 的数据格式完全改变,与 1.8 及更早版本不兼容。为了保留对历史监控数据的访问,建议运行一个至少版本为 1.8.1 的不进行数据抓取的 Prometheus 实例,然后与你的 Prometheus 2.0 实例并行运行,并让新服务器通过 remote read 协议从旧实例中读取现有数据。
你的 Prometheus 1.8 实例应使用以下标志和仅包含external_labels
设置(如果有的话)的配置文件启动:
然后可以启动 Prometheus 2.0(在同一台机器上),使用以下标志:
其中prometheus.ym
除现有配置外还包含以下段落:
PromQL
PromQL 中以下功能已被移除:
drop_common_labels
函数 - 应使用without
聚合修饰符代替。keep_common
聚合修饰符 - 应使用by
修饰符代替。count_scalar
函数 - 其用例可通过absent()
或正确传播标签的操作来得到更好的处理。
更多详情见 issue #3060。
其他
Prometheus 非 root 用户
Prometheus Docker 映像现构建为以非 root 用户运行 Prometheus。如果你希望 Prometheus UI/API 监听较低端口(例如端口 80),则需要覆盖此行为。对于 Kubernetes,你可以使用以下 YAML:
更多详情见配置 Pod 或容器的安全上下文。
如果使用 Docker,则可以使用以下片段:
Prometheus 生命周期
如果你使用 Prometheus /-/reload
HTTP 端点自动在配置更改时重新加载你的 Prometheus 配置。在 Prometheus 2.0 中,由于安全原因默认禁用了这些端点。要启用它们,请设置--web.enable-lifecycle
命令行标志。
该文档基于 Prometheus 官方文档翻译而成。