Prometheus

55479
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

迁移


根据我们的稳定性承诺,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 -alertmanager.url=http://alertmanager:9093/

被以下在prometheus.yml配置文件中的设置所替代:

alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093

你还可以使用 Prometheus 中的所有常规服务发现的集成功能和 Alertmanager 配置中的relabel_config。下面的代码片段告诉 Prometheus 搜索带有name: alertmanager标签、位于default命名空间内及端口非空的 Kubernetes 容器。

alerting:
alertmanagers:
- kubernetes_sd_configs:
- role: pod
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_name]
regex: alertmanager
action: keep
- source_labels: [__meta_kubernetes_namespace]
regex: default
action: keep
- source_labels: [__meta_kubernetes_pod_container_port_number]
regex:
action: drop

记录规则和告警

配置告警和记录规则(recording rules)的格式已更改为 YAML。以下是在旧格式下的示例记录规则和告警:

job:request_duration_seconds:histogram_quantile99 =
histogram_quantile(0.99, sum by (le, job) (rate(request_duration_seconds_bucket[1m])))
ALERT FrontendRequestLatency
IF job:request_duration_seconds:histogram_quantile99{job="frontend"} > 0.1
FOR 5m
ANNOTATIONS {
summary = "High frontend request latency",
}

在新版本中,同样的配置看起来像这样:

groups:
- name: example.rules
rules:
- record: job:request_duration_seconds:histogram_quantile99
expr: histogram_quantile(0.99, sum by (le, job) (rate(request_duration_seconds_bucket[1m])))
- alert: FrontendRequestLatency
expr: job:request_duration_seconds:histogram_quantile99{job="frontend"} > 0.1
for: 5m
annotations:
summary: High frontend request latency

为了帮助转换,promtool工具提供了一种自动化规则转换的模式。给定一个.rules文件,它会转换为一个符合新格式.rules.yml 文件。例如:

$ promtool update rules example.rules

需要在 Prometheus 2.5 版本使用promtool,因为后续版本不再包含上述子命令。

存储

Prometheus 2.0 的数据格式完全改变,与 1.8 及更早版本不兼容。为了保留对历史监控数据的访问,建议运行一个至少版本为 1.8.1 的不进行数据抓取的 Prometheus 实例,然后与你的 Prometheus 2.0 实例并行运行,并让新服务器通过 remote read 协议从旧实例中读取现有数据。

你的 Prometheus 1.8 实例应使用以下标志和仅包含external_labels设置(如果有的话)的配置文件启动:

Terminal window
$ ./prometheus-1.8.1.linux-amd64/prometheus -web.listen-address ":9094" -config.file old.yml

然后可以启动 Prometheus 2.0(在同一台机器上),使用以下标志:

Terminal window
$ ./prometheus-2.0.0.linux-amd64/prometheus --config.file prometheus.yml

其中prometheus.ym除现有配置外还包含以下段落:

remote_read:
- url: "http://localhost:9094/api/v1/read"

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:

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo-2
spec:
securityContext:
runAsUser: 0
...

更多详情见配置 Pod 或容器的安全上下文

如果使用 Docker,则可以使用以下片段:

docker run -p 9090:9090 prom/prometheus:latest

Prometheus 生命周期

如果你使用 Prometheus /-/reload HTTP 端点自动在配置更改时重新加载你的 Prometheus 配置。在 Prometheus 2.0 中,由于安全原因默认禁用了这些端点。要启用它们,请设置--web.enable-lifecycle命令行标志。

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32