#prometheus-exporter #prometheus #exporter #prometheus-metrics #base #effort #outputs

prometheus_exporter_base

Prometheus Rust导出器基础包,可选无样板代码

19个版本 (7个稳定版)

1.4.0 2022年11月20日
1.3.0 2021年8月4日
1.2.0 2021年3月23日
1.1.0 2020年11月1日
0.4.0 2019年6月28日

#292数据库接口

Download history 755/week @ 2024-03-14 615/week @ 2024-03-21 1046/week @ 2024-03-28 1163/week @ 2024-04-04 1223/week @ 2024-04-11 1040/week @ 2024-04-18 760/week @ 2024-04-25 972/week @ 2024-05-02 1311/week @ 2024-05-09 1354/week @ 2024-05-16 1174/week @ 2024-05-23 1378/week @ 2024-05-30 1325/week @ 2024-06-06 1073/week @ 2024-06-13 1092/week @ 2024-06-20 743/week @ 2024-06-27

每月下载量 4,488
用于 6 个包

MIT 协议

89KB
682

Rust Prometheus导出器基础

Rust Prometheus导出器基础库

Rust

legal

release commitssince

Crate cratedown cratelastdown

目标

这个crate旨在以最小的努力编写一个合适的Prometheus导出器。它为你提供两件事。

  1. 创建符合Prometheus规范的输出的Rust风格、流畅的方式
PrometheusMetric::build()
     .with_name("folder_size")
     .with_metric_type(MetricType::Counter)
     .with_help("Size of the folder")
     .build()
     .render_and_append_instance(
         &PrometheusInstance::new()
             .with_label("folder", "/var/log")
             .with_value(total_size_log)
             .with_current_timestamp()
             .expect("error getting the UNIX epoch"),
     )
     .render()
  1. 它还提供可选的无样板代码Hyper服务器来暴露你的Prometheus度量。它处理大多数平凡的任务,例如设置Hyper服务器和进行一些基本检查(例如拒绝除GET以外的任何请求以及只响应以/metrics结尾的请求),所以你只需提供一个将处理你逻辑的Boxed future(记住在Cargo.toml中指定hyper_server功能标志)。

我在以下crate中使用它:prometheus_wireguard_exporterprometheus_iota_exporter,所以如果你想要查看真实世界的示例,请参考这些crate。更简单的示例可在示例文件夹中找到。

用法

PrometheusMetric

使用PrometheusMetric结构体,通过实例化它,然后“渲染”头和值(可选指定标签)。以下是从文档中摘取的示例

PrometheusMetric::build()
     .with_name("folder_size")
     .with_metric_type(MetricType::Counter)
     .with_help("Size of the folder")
     .build()
     .render_and_append_instance(
         &PrometheusInstance::new()
             .with_label("folder", "/var/log")
             .with_value(total_size_log)
             .with_current_timestamp()
             .expect("error getting the UNIX epoch"),
     )
     .render()

这将给出类似以下的内容

对于更完整的示例,请参阅示例文件夹

Hyper服务器

要使用Hyper服务器,只需指定hyper_server功能标志并调用render_prometheus函数。此函数要求你传入

  1. 监听的地址/端口。例如 ([0, 0, 0, 0], 32221).into() 在端口 32221 上监听所有接口。
  2. 授权类型。目前可以是允许所有连接或使用基本认证(密码)进行认证。
  3. 一个任意的结构体,将被传递回你的代码(用于命令行参数)。如果你不需要它,请传递一个空的结构体。
  4. 你的导出器应该执行的 代码。它采取的形式是一个返回装箱未来的闭包。闭包本身将接收上述提到的结构体(第2点)以及 http 请求数据。期望输出是一个字符串。

例如

let addr: SocketAddr = ([0, 0, 0, 0], 32221).into();
let password = "SimplePassword".to_owned();

let server_options = ServerOptions {
    addr,
    authorization: Authorization::Basic(password),
};

render_prometheus(server_options, MyOptions::default(), |request, options| {
    async {
    	Ok("it works!".to_owned())
    }
}).await;

如你所见,为了保持简单,Hyper 服务器不对输出进行任何强制。你需要使用上述提到的结构体返回有意义的字符串。

测试

一旦启动,使用任何启用 GET 的工具(如浏览器)在 http://127.0.0.1:<your_exporter_port>/metrics 测试你的导出器。

变更日志

  • 从版本 1.4.0 开始,Hyper 服务器支持基本认证。如果你启用了它,请确保通过指定 basic_auth 来相应地配置 Prometheus,无论是 password 还是 password_file。此外,请注意,授权头总是包含用户名(此处未使用),因此如果你手动传递它,请在对密码进行 base 64 编码之前在其前面加上冒号字符。Prometheus 会自动这样做,你不需要为此做任何事情。最后,基本认证不会加密密码,所以如果你需要保密性,请确保使用 TLS。

许可

请参阅 LICENSE 文件(剧透:它是 MIT 许可证)。

依赖项

~4–18MB
~244K SLoC