#prometheus-metrics #metrics-exporter #metrics #prometheus #prometheus-exporter #telemetry

metrics-exporter-prometheus

用于将指标发送到Prometheus的指标兼容导出器

31个版本

0.15.3 2024年7月13日
0.15.1 2024年6月24日
0.14.0 2024年3月16日
0.13.0 2023年12月24日
0.1.0-alpha.32020年7月22日

85 in 调试

Download history 92953/week @ 2024-05-03 97716/week @ 2024-05-10 94140/week @ 2024-05-17 98187/week @ 2024-05-24 105471/week @ 2024-05-31 93047/week @ 2024-06-07 87950/week @ 2024-06-14 97023/week @ 2024-06-21 84640/week @ 2024-06-28 83536/week @ 2024-07-05 77482/week @ 2024-07-12 84972/week @ 2024-07-19 83510/week @ 2024-07-26 83174/week @ 2024-08-02 90135/week @ 2024-08-09 90484/week @ 2024-08-16

364,322 每月下载量
89 个代码库中(58个直接) 使用

MIT 许可证

380KB
6.5K SLoC

metrics-exporter-prometheus

conduct-badge downloads-badge release-badge docs-badge license-badge

metrics-exporter-prometheus 是一个与 metrics 兼容的导出器,用于提供Prometheus抓取端点。

行为准则

注意:本项目所有对话和贡献都应遵守 行为准则


lib.rs:

一个用于将指标发送到Prometheus的与 metrics 兼容的导出器。

基本内容

metrics-exporter-prometheus 是一个与 metrics 兼容的导出器,可以公开一个HTTP端点供Prometheus抓取,或者可以将指标推送到Prometheus推送网关。

高级功能

  • 抓取端点支持
  • 推送网关支持
  • 基于IP的抓取端点允许列表
  • 可以将直方图以汇总摘要或汇总直方图的形式推送,并可以配置分位数/桶
  • 可以按指标控制桶配置
  • 可配置的全局标签(应用于所有指标,如果存在则覆盖指标的标签)

行为

通常,与导出器的交互应该与任何其他Prometheus抓取端点或推送网关实现相似,但在指标命名方面有一些小的注意事项。

我们努力使 Prometheus 的数据模型和暴露格式规范保持一致,但由于 metrics 的解耦特性,导出器在确保与规范的一致性时,在指标名称和标签键方面做出了一些特定的权衡。以下是一个矩阵,说明了导出器将修改指标名称或标签键的场景

  • 指标名称以无效字符开头或包含无效字符:用下划线替换字符
  • 标签键以无效字符开头或包含无效字符:用下划线替换字符
  • 标签键以两个下划线开头:添加额外的下划线(总共三个下划线)

这种行为可能一开始会让人困惑,因为 metrics 本身允许任何有效的 UTF-8 字符串作为指标名称或标签,但在使用 Prometheus 导出器时,无法向用户报告指标名称或标签键无效,因此我们只能在运行时替换无效字符来应对这些情况。

用法

使用导出器非常简单

// First, create a builder.
//
// The builder can configure many aspects of the exporter, such as changing the
// listen address, adjusting how histograms will be reported, changing how long
// metrics can be idle before being removed, and more.
let builder = PrometheusBuilder::new();

// Normally, most users will want to "install" the exporter which sets it as the
// global recorder for all `metrics` calls, and installs either an HTTP listener
// when running as a scrape endpoint, or a simple asynchronous task which pushes
// to the configured push gateway on the given interval.
//
// If you're already inside a Tokio runtime, this will spawn a task for the
// exporter on that runtime, and otherwise, a new background thread will be
// spawned which a Tokio single-threaded runtime is launched on to, where we then
// finally launch the exporter:
builder.install().expect("failed to install recorder/exporter");

// Maybe you already have an HTTP endpoint that you want to expose a metrics
// endpoint on.. no problem!  You can build the recorder and install it, and get
// back a handle that can be used to generate the Prometheus scrape output on
// demand:
let handle = builder.install_recorder().expect("failed to install recorder");

// Maybe you have a more complicated setup and want to be handed back the recorder
// object and a future that can run the HTTP listener / push gateway so you can
// install/spawn them in a specific way.. also not a problem!
//
// As this is a more advanced method, it _must_ be called from within an existing
// Tokio runtime when the exporter is running in HTTP listener/scrape endpoint mode.
let (recorder, exporter) = builder.build().expect("failed to build recorder/exporter");

// Finally, maybe you literally only want to build the recorder and nothing else,
// and we've got you covered there, too:
let recorder = builder.build_recorder();

功能

两个主要的功能标志控制导出器可以运行的模式

  • http-listener:允许将导出器作为抓取端点运行(默认启用)
  • push-gateway:允许以推送网关模式运行导出器(默认启用)

这两个标志都不是创建或安装记录器的必要条件。但是,为了创建或构建导出器,必须至少启用这些功能标志之一。需要某些功能标志的构建方法将被记录。

依赖

~3–15MB
~197K SLoC