#prometheus-metrics #metrics #tokio #prometheus #tokio-task

tokio-metrics-collector

提供从 Tokio 运行时和任务收集 Prometheus 兼容指标的工具

6 个版本

新版本 0.2.2 2024年8月17日
0.2.1 2023年11月28日
0.2.0 2023年5月8日
0.1.0 2023年4月20日
0.1.0-beta.02023年4月19日

80开发工具 中排名

Download history 1180/week @ 2024-05-03 1532/week @ 2024-05-10 1431/week @ 2024-05-17 1379/week @ 2024-05-24 1557/week @ 2024-05-31 769/week @ 2024-06-07 818/week @ 2024-06-14 871/week @ 2024-06-21 804/week @ 2024-06-28 858/week @ 2024-07-05 1149/week @ 2024-07-12 1187/week @ 2024-07-19 1169/week @ 2024-07-26 876/week @ 2024-08-02 1569/week @ 2024-08-09 5210/week @ 2024-08-16

每月下载量 9,075
用于 静态Web服务器

MIT/Apache 许可

52KB
909 行(不包括注释)

Tokio Prometheus 指标收集器

tokio-metrics-collector on GitHub Action codecov tokio-metrics-collector on crates.io tokio-metrics-collector on docs.rs

提供从 Tokio 运行时和任务收集 Prometheus 兼容指标的工具。

[dependencies]
tokio-metrics-collector = { version = "0.2.2" }

文档

快速入门

use prometheus::Encoder;

#[tokio::main]
async fn main() {
    // register global runtime collector
    prometheus::default_registry()
        .register(Box::new(
            tokio_metrics_collector::default_runtime_collector(),
        ))
        .unwrap();

    // register global task collector
    let task_collector = tokio_metrics_collector::default_task_collector();
    prometheus::default_registry()
        .register(Box::new(task_collector))
        .unwrap();

    // construct a TaskMonitor
    let monitor = tokio_metrics_collector::TaskMonitor::new();
    // add this monitor to task collector with label 'simple_task'
    // NOTE: duplicate labels in multiple monitors cause incorrect data aggregation.
    // It is recommended to use unique labels for each monitor and
    // instrument multiple tasks by the `instrument` function.
    task_collector.add("simple_task", monitor.clone());

    // spawn a background task and instrument
    tokio::spawn(monitor.instrument(async {
        loop {
            // do something
            tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;
        }
    }));

    // print metrics every tick
    for _ in 0..5 {
        tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;

        let encoder = prometheus::TextEncoder::new();
        let mut buffer = Vec::new();
        encoder
            .encode(&prometheus::default_registry().gather(), &mut buffer)
            .unwrap();
        let data = String::from_utf8(buffer.clone()).unwrap();

        println!("{}", data);
    }
}

以及一个 http 服务器示例,您可以在 examples/server.rs 中找到。

运行时指标

此不稳定功能需要 tokio_unstablert 包功能。要启用 tokio_unstable,需要在编译时将 --cfg tokio_unstable 传递给 rustc。您可以通过在编译应用程序之前设置 RUSTFLAGS 环境变量来完成此操作;例如。

RUSTFLAGS="--cfg tokio_unstable" cargo build

或者,在您的包根目录中创建文件 .cargo/config.toml。如果您使用的是工作区,请将此文件放在工作区的根目录中。

[build]
rustflags = ["--cfg", "tokio_unstable"]
rustdocflags = ["--cfg", "tokio_unstable"]

任务指标

许可证

tokio-metrics-collector 根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款分发。

请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT 以获取详细信息。

依赖项

~5–12MB
~130K SLoC