21次发布

0.8.5 2022年8月23日
0.8.4 2022年1月19日
0.8.3 2021年10月18日
0.8.2 2021年4月26日
0.3.0 2019年3月14日

HTTP服务器 中排名 116

Download history 2806/week @ 2024-04-21 2705/week @ 2024-04-28 2328/week @ 2024-05-05 4611/week @ 2024-05-12 4764/week @ 2024-05-19 4594/week @ 2024-05-26 4736/week @ 2024-06-02 4101/week @ 2024-06-09 4256/week @ 2024-06-16 4093/week @ 2024-06-23 3529/week @ 2024-06-30 4441/week @ 2024-07-07 4294/week @ 2024-07-14 4812/week @ 2024-07-21 5272/week @ 2024-07-28 4825/week @ 2024-08-04

每月下载量 19,393
17 crates 中使用

MIT 许可证

26KB
319

prometheus_exporter

Build Status crates.io docs.rs

使用 tiny-http 导出 Prometheus度量值的辅助库。它旨在帮助编写 Prometheus导出器,无需设置和维护 HTTP 网络服务器。如果程序还使用 HTTP 服务器执行其他目的,此包可能不是最佳方式,应直接使用 rust-prometheus

它使用 rust-prometheus 来收集和渲染 Prometheus度量值,以及 tiny-http 来通过 HTTP 公开度量值。

注意:您必须使用与此包相同的 Prometheus crate 版本。此 crate 当前使用全局注册表中存储的度量值。不同的 Prometheus crate 将注册到不同的全局注册表中。这意味着用于注册新度量值的宏不会将度量值公开给此导出器。

此 crate 重新导出 Prometheus crate,以便更容易保持版本同步(请参阅示例)。目前此 crate 使用 Prometheus 版本 0.13

有关如何从旧版 crate 版本迁移的信息,请参阅 MIGRATION

注意 版本 0.8.0 使用的 tiny_http 版本存在漏洞,请升级到版本 0.8.1 或更高版本。有关更多信息,请参阅问题 #18

用法

将其添加到您的 Cargo.toml

[dependencies]
prometheus_exporter = "0.8"

使用此 crate 的最基本方式是运行以下命令

prometheus_exporter::start("0.0.0.0:9184".parse().expect(
"failed to parse binding",
))
.expect("failed to start prometheus exporter");

这将启动导出器并将HTTP服务器绑定到 0.0.0.0:9184。之后,您可以按照自己的意愿更新指标。只要这些指标放入全局Prometheus注册表中,更改后的指标就会被导出。

使用此crate的另一种方法如下

let exporter = prometheus_exporter::start("0.0.0.0:9184".parse().expect(
"failed to parse binding",
))
.expect("failed to start prometheus exporter");

let guard = exporter.wait_request()

这将阻塞当前线程,直到在HTTP服务器上接收到请求。它还返回一个保护器,使HTTP服务器等待直到保护器被释放。这在始终导出一致的指标时非常有用,因为在它们被导出之前,所有指标都可以更新。

有关如何使用此crate的更多信息,请参阅文档示例

基本示例

您需要在您的Cargo.toml中包含以下内容

[dependencies]
prometheus_exporter = "0.8"
env_logger = "0.9"
log = "0.4"
reqwest = { version = "0.11",features = ["blocking"] }

一个非常简单的示例如下(来自examples/simple.rs

// Will create an exporter with a single metric that does not change

use env_logger::{
    Builder,
    Env,
};
use log::info;
use prometheus_exporter::prometheus::register_gauge;
use std::net::SocketAddr;

fn main() {
    // Setup logger with default level info so we can see the messages from
    // prometheus_exporter.
    Builder::from_env(Env::default().default_filter_or("info")).init();

    // Parse address used to bind exporter to.
    let addr_raw = "0.0.0.0:9184";
    let addr: SocketAddr = addr_raw.parse().expect("can not parse listen addr");

    // Create metric
    let metric = register_gauge!("simple_the_answer", "to everything")
        .expect("can not create gauge simple_the_answer");

    metric.set(42.0);

    // Start exporter
    prometheus_exporter::start(addr).expect("can not start exporter");

    // Get metrics from exporter
    let body = reqwest::blocking::get(&format!("http://{}/metrics", addr_raw))
        .expect("can not get metrics from exporter")
        .text()
        .expect("can not body text from request");

    info!("Exporter metrics:\n{}", body);
}

依赖项

~3–9MB
~108K SLoC