18个版本 (9个重大更改)

0.10.1 2024年5月20日
0.10.0 2023年11月20日
0.10.0-rc.32022年6月23日
0.10.0-rc.12022年2月10日
0.3.0 2019年6月25日

#148 in 网络编程

Download history 1806/week @ 2024-04-23 1380/week @ 2024-04-30 1159/week @ 2024-05-07 1715/week @ 2024-05-14 1867/week @ 2024-05-21 1520/week @ 2024-05-28 1654/week @ 2024-06-04 1713/week @ 2024-06-11 1491/week @ 2024-06-18 1966/week @ 2024-06-25 1006/week @ 2024-07-02 1196/week @ 2024-07-09 2101/week @ 2024-07-16 1937/week @ 2024-07-23 1994/week @ 2024-07-30 1768/week @ 2024-08-06

每月下载 7,955次
用于 2 crates

MIT/Apache

27KB
231 代码行

Rocket Prometheus

Build Status docs.rs crates.io

Rocket应用程序的Prometheus仪表板。

使用方法

将此crate添加到与Rocket 0.5.0兼容的Cargo.toml

[dependencies]
rocket = "0.5.0"
rocket_prometheus = "0.10.1"

然后将一个PrometheusMetrics实例附加并挂载到您的Rocket应用中

use rocket_prometheus::PrometheusMetrics;

#[rocket::launch]
fn launch() -> _ {
    let prometheus = PrometheusMetrics::new();
    rocket::build()
        .attach(prometheus.clone())
        .mount("/metrics", prometheus)

这将使您的应用程序的/metrics端点公开以下指标

$ curl localhost:8000/metrics
# HELP rocket_http_requests_duration_seconds HTTP request duration in seconds for all requests
# TYPE rocket_http_requests_duration_seconds histogram
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.005"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.01"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.025"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.05"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.1"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.25"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="0.5"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="1"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="2.5"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="5"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="10"} 2
rocket_http_requests_duration_seconds_bucket{endpoint="/metrics",method="GET",status="200",le="+Inf"} 2
rocket_http_requests_duration_seconds_sum{endpoint="/metrics",method="GET",status="200"} 0.0011045669999999999
rocket_http_requests_duration_seconds_count{endpoint="/metrics",method="GET",status="200"} 2
# HELP rocket_http_requests_total Total number of HTTP requests
# TYPE rocket_http_requests_total counter
rocket_http_requests_total{endpoint="/metrics",method="GET",status="200"} 2

指标

默认情况下,此crate跟踪两个指标

  • rocket_http_requests_total(标签:端点、方法、状态):Rocket处理的总HTTP请求数量。
  • rocket_http_requests_duration_seconds(标签:端点、方法、状态):Rocket处理的全部HTTP请求的请求持续时间。

这些指标的'recket'前缀可以通过设置环境变量ROCKET_PROMETHEUS_NAMESPACE来更改。

自定义指标

可以通过在PrometheusMetrics实例的注册表中注册它们来跟踪更多指标

#[macro_use]
use once_cell::sync::Lazy;
use rocket::{get, launch, routes};
use rocket_prometheus::{
    prometheus::{opts, IntCounterVec},
    PrometheusMetrics,
};

static NAME_COUNTER: Lazy<IntCounterVec> = Lazy::new(|| {
    IntCounterVec::new(opts!("name_counter", "Count of names"), &["name"])
        .expect("Could not create NAME_COUNTER")
});

#[get("/hello/<name>")]
pub fn hello(name: &str) -> String {
    NAME_COUNTER.with_label_values(&[name]).inc();
    format!("Hello, {}!", name)
}

#[launch]
fn launch() -> _ {
    let prometheus = PrometheusMetrics::new();
    prometheus
        .registry()
        .register(Box::new(NAME_COUNTER.clone()))
        .unwrap();
    rocket::build()
        .attach(prometheus.clone())
        .mount("/", routes![hello])
        .mount("/metrics", prometheus)
}

依赖关系

~16–46MB
~785K SLoC