18个版本 (9个重大更改)
0.10.1 | 2024年5月20日 |
---|---|
0.10.0 | 2023年11月20日 |
0.10.0-rc.3 | 2022年6月23日 |
0.10.0-rc.1 | 2022年2月10日 |
0.3.0 | 2019年6月25日 |
#148 in 网络编程
每月下载 7,955次
用于 2 crates
27KB
231 代码行
Rocket Prometheus
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