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.3 | 2020年7月22日 |
85 in 调试
364,322 每月下载量
在 89 个代码库中(58个直接) 使用
380KB
6.5K SLoC
metrics-exporter-prometheus
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