特性标志

以下是一些默认禁用的功能列表,因为它们是破坏性更改或被认为是实验性的。它们的行为可能会在未来的版本中发生变化,这将通过发布变更日志进行沟通。

您可以使用 --enable-feature 标志和以逗号分隔的功能列表来启用它们。它们可能会在未来的版本中默认启用。

示例存储

--enable-feature=exemplar-storage

OpenMetrics 引入了抓取目标向某些指标添加示例的能力。示例是对 MetricSet 之外数据的引用。一个常见的用例是程序跟踪的 ID。

示例存储被实现为固定大小的循环缓冲区,用于存储所有序列的内存中的示例。启用此功能将启用存储 Prometheus 抓取的示例。配置文件块 存储/示例 可用于通过示例数量来控制循环缓冲区的大小。一个仅包含 trace_id=<jaeger-trace-id> 的示例通过内存中的示例存储大致使用 100 字节的内存。如果启用了示例存储,我们还将把示例附加到 WAL 以进行本地持久化(用于 WAL 持续时间)。

关闭时内存快照

--enable-feature=memory-snapshot-on-shutdown

这会在关闭时拍摄内存中的块以及序列信息的快照,并将其存储在磁盘上。这将减少启动时间,因为现在可以使用此快照和 m-mapped 块恢复内存状态,而只需要从磁盘重放 WAL 的快照中不包含的部分 WAL。

额外的抓取指标

--enable-feature=extra-scrape-metrics

启用后,对于每个实例抓取,Prometheus 将在以下附加时间序列中存储一个样本

  • scrape_timeout_seconds。目标的已配置 scrape_timeout。这允许您测量每个目标,以找出它们与超时有多接近,使用 scrape_duration_seconds / scrape_timeout_seconds
  • scrape_sample_limit。目标的已配置 sample_limit。这允许您测量每个目标,以找出它们与达到限制有多接近,使用 scrape_samples_post_metric_relabeling / scrape_sample_limit。请注意,如果没有配置限制,scrape_sample_limit 可以为零,这意味着上面的查询对于没有限制的目标可能会返回 +Inf(因为我们除以零)。如果您只想查询确实有样本限制的目标,请使用以下查询:scrape_samples_post_metric_relabeling / (scrape_sample_limit > 0)
  • scrape_body_size_bytes。如果抓取成功,则为最近一次抓取响应的未压缩大小。因超过 body_size_limit 而抓取失败的报告 -1,其他抓取失败的报告 0

每步统计信息

--enable-feature=promql-per-step-stats

启用后,在查询请求中传递 stats=all 将返回每步统计信息。目前,这仅限于 totalQueryableSamples。

如果在引擎或查询中禁用,则根本不计算每步统计信息。

原生直方图

--enable-feature=native-histograms

启用后,Prometheus 将摄取原生直方图(以前也称为稀疏直方图或高分辨率直方图)。原生直方图仍然是高度实验性的。预计会出现破坏性更改(包括使 TSDB 不可读的更改)。

原生直方图目前仅在传统的 Prometheus protobuf 暴露格式中受支持。因此,此特性标志还启用了一个新的(也是实验性的)protobuf 解析器,通过该解析器摄取所有指标(即,不仅仅是原生直方图)。Prometheus 将尝试首先协商 protobuf 格式。被检测的目标也需要支持 protobuf 格式,并且它需要暴露原生直方图。protobuf 格式允许并排暴露经典和原生直方图。如果禁用此特性标志,Prometheus 将继续解析经典直方图(尽管是通过文本格式)。如果启用此标志,Prometheus 仍然会摄取那些没有对应原生直方图的经典直方图。但是,如果存在原生直方图,Prometheus 将忽略相应的经典直方图,但示例除外,示例始终会被摄取。要保留经典直方图,请在抓取任务中启用 always_scrape_classic_histograms

实验性 PromQL 函数

--enable-feature=promql-experimental-functions

启用被认为是实验性的 PromQL 函数。这些函数可能会更改其名称、语法或语义。它们也可能会被完全删除。

创建时间戳零注入

--enable-feature=created-timestamp-zero-ingestion

启用创建时间戳的摄取。创建的时间戳会在适当的时候作为值为 0 的样本注入。有关详细信息,请参阅 PromCon 演讲

目前,Prometheus 仅在传统的 Prometheus Protobuf 协议上支持创建的时间戳(其他协议正在进行中)。因此,在启用此功能时,Prometheus protobuf 抓取协议将被优先考虑(有关更多详细信息,请参阅 scrape_config.scrape_protocols 设置)。

除了在 Prometheus 中启用此功能外,被抓取的应用程序还需要暴露创建的时间戳。

独立规则的并发评估

--enable-feature=concurrent-rule-eval

默认情况下,规则组会并发执行,但组内的规则会按顺序执行;这是因为规则可以使用前面规则的输出作为其输入。但是,如果规则之间没有可检测到的关系,则没有理由按顺序运行它们。启用 concurrent-rule-eval 特性标志后,规则组内没有任何依赖关系的规则将并发评估。这有可能提高规则组评估延迟和资源利用率,但会增加并发查询负载。

可以使用 --rules.max-concurrent-rule-evals 配置并发规则评估的数量,默认为 4

提供旧的 Prometheus UI

回退到提供旧的(Prometheus 2.x)Web UI,而不是新的 UI。作为 Prometheus 3.0 的一部分发布的新 UI 是一次完整的重写,旨在使底层更简洁、更少混乱和更现代化。但是,它尚未完全具备所有功能,并且尚未经过实战测试,因此某些用户可能仍然更喜欢使用旧的 UI。

--enable-feature=old-ui

元数据 WAL 记录

--enable-feature=metadata-wal-records

启用后,Prometheus 将在内存中存储元数据,并按序列跟踪元数据更改作为 WAL 记录。

如果您还使用远程写入 2.0,则必须使用此功能,因为它只会从 WAL 中收集元数据。

延迟压缩开始时间

--enable-feature=delayed-compaction

一个随机偏移量,最多为块范围的 10%,被添加到 Head 压缩开始时间。这有助于 Prometheus 实例避免同时进行压缩,并减少共享资源上的负载。

只有自动 Head 压缩和直接由此产生的操作才受此延迟的影响。

如果可能进行多个连续的 Head 压缩,则只有第一次压缩会受到此延迟的影响。

请注意,在此延迟期间,Head 继续其通常的操作,包括服务和追加序列。

尽管压缩存在延迟,但生成的块的时间对齐方式与没有延迟时相同。

延迟 PromQL 引擎的 name 标签删除

--enable-feature=promql-delayed-name-removal

启用后,Prometheus 将更改从 PromQL 查询结果中删除 __name__ 标签的方式(对于需要此操作的函数和表达式)。具体来说,它会将删除延迟到查询评估的最后一步,而不是每次评估创建派生指标的表达式或函数时。

这允许通过 label_replacelabel_join 函数选择性地保留 __name__ 标签,并有助于防止“向量不能包含具有相同标签集的指标”错误。当对 __name__ 标签应用正则表达式匹配器时,可能会发生此错误。

自动重载配置

--enable-feature=auto-reload-config

启用后,Prometheus 将按照指定的时间间隔自动重载其配置文件。该时间间隔由 --config.auto-reload-interval 标志定义,默认为 30s

配置重载是通过检测主配置文件或任何引用的文件(例如规则和抓取配置)的校验和变化来触发的。为了确保重载期间的一致性并避免问题,建议原子地更新这些文件。

本文档是开源的。请通过提交问题或拉取请求来帮助改进它。