Metrics Exporter - Prometheus

状态: 开发中

Prometheus Exporter 必须是一个 Pull Metric Exporter,它以适当的格式响应 Prometheus 指标的 HTTP 请求。

OpenTelemetry 指标必须根据 Prometheus 兼容性规范 转换为 Prometheus 指标。

Prometheus Exporter 应使用 Prometheus 客户端库 来提供 Prometheus 指标。这允许 Prometheus 客户端使用 Content-Type 标头来协商响应的 格式。如果使用了 Prometheus 客户端库,OpenTelemetry Prometheus Exporter 应被建模为 自定义 Collector,以便与现有的 Prometheus 检测库结合使用。

无论是否使用 Prometheus 客户端库,Prometheus Exporter 都必须支持 文本格式0.0.4 版本。Prometheus Exporter 可以支持 Exemplars 和 Exponential Histograms,它们 目前不被 Prometheus 文本格式支持,通过支持其他协议来实现,但不是必需的。

OpenTelemetry 指标 SDK 的 Prometheus Exporter **不得** 使用 Prometheus Remote Write 格式OpenMetrics protobuf 格式

OpenTelemetry 指标 SDK 的 Prometheus Exporter **不得** 在 Metric 点上添加 显式时间戳

SDK Prometheus Exporter 暴露的 target info 指标最多只能有一个。

Prometheus Exporter 必须将 MetricReadertemporality 设置为所有 instrument kinds 的 cumulative

配置

Prometheus Exporter 应支持一个配置选项来设置指标服务的宿主。该选项可以命名为 host,默认值为 localhost

Prometheus Exporter 应支持一个配置选项来设置指标服务的端口。该选项可以命名为 port,默认值为 9464

Prometheus Exporter 应支持一个配置选项来设置 MetricReader 默认的 aggregation,作为 instrument kind 的函数。该选项可以命名为 default_aggregation,默认使用 默认聚合

Prometheus Exporter 可以提供配置来将资源属性添加为指标属性。默认情况下,它**不得**将任何资源属性添加为指标属性。配置应允许用户选择要复制的资源属性(例如,包含/排除或基于正则表达式)。复制的资源属性**不得**从 target info 指标中排除。该选项可以命名为 with_resource_constant_labels

Prometheus Exporter 可以支持一个配置选项,用于控制将指标名称从 OpenTelemetry 命名约定转换为 Prometheus 命名约定。如果 Prometheus Exporter 支持此类配置,其名称必须类似于 Prometheus 配置选项 translation_strategy,并且翻译选项必须是:

  • UnderscoreEscapingWithSuffixes,默认选项。此选项完全转义指标名称以兼容经典的 Prometheus 指标名称,并附加类型和单位后缀。
  • UnderscoreEscapingWithoutSuffixes,指标名称将继续将特殊字符转义为 _,但不会附加后缀。
  • NoUTF8EscapingWithSuffixes 将禁用将特殊字符更改为 _。将附加单位和计数器使用的 _total 等特殊后缀。
  • NoTranslation。此策略绕过所有指标和标签名称翻译,直接传递。

Prometheus Exporter 可以支持一个配置选项,用于生成不带 scope 标签 的指标。该选项可以命名为 without_scope_info,默认值为 false

Prometheus Exporter 可以支持一个配置选项,用于生成不带 target info 指标的指标。该选项可以命名为 without_target_info,默认值为 false

内容协商

Prometheus Exporter 必须支持内容协商,允许客户端根据 HTTP 请求中的 Accept 标头请求不同格式的指标。内容协商必须遵循 Prometheus 内容协商指南

与翻译策略的交互

尽管 Prometheus Exporter 可以配置 translation_strategy 来进行内部指标处理,但最终的输出格式和字符转义必须遵循内容协商过程根据客户端的 Accept 标头确定的结果。在确定最终输出格式时,内容协商的要求必须优先于配置的翻译策略。

示例

  • 如果配置为 NoTranslation 但客户端请求 escaping=underscores,则 Exporter 必须应用下划线转义。
  • 如果配置为 UnderscoreEscapingWithSuffixes 但客户端请求 escaping=allow-utf8,则无需撤销已翻译的内容,因为 Exporter 将继续保持兼容。