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 必须将 MetricReader 的 temporality 设置为所有 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 将继续保持兼容。