4 个版本 (2 个重大更新)
0.3.1 | 2020 年 10 月 24 日 |
---|---|
0.3.0 | 2020 年 10 月 24 日 |
0.2.0 | 2019 年 12 月 23 日 |
0.0.1 | 2019 年 8 月 23 日 |
#12 in #statsd
330KB
417 行
actix-web-metrics-mw
适用于 actix-web 指标聚合的通用中间件库,可以将指标发送到各种出口。
![构建状态](https://github.com/Igosuki/actix-web-metrics-mw/workflows/build.yml/badge.svg
使用 metrics-rscrate 对 actix-web 进行指标中间件配置。
默认跟踪两个指标(假设命名空间为 actix_web_metrics_mw
)
可用的导出器
- Statsd:使用 statsd rust 客户端通过 UDP 缓存指标,支持 dogstats 格式作为指标标签
默认指标
http_requests_total
(标签:endpoint、method、status):每个端点和方法的请求计数器。http_requests_duration
(标签:endpoint、method、status):每个端点的请求持续时间的直方图。
依赖项
- actix 2
- futures 0.3
- metrics 0.12
问题
请随时提交您认为必要的进化问题。
使用方法
首先将 actix_web_metrics_mw
添加到您的 Cargo.toml
[dependencies]
actix_web_metrics_mw = "0.2.0"
然后实例化 Prometheus 中间件并将其传递给 .wrap()
use actix_web::{web, App, HttpResponse, HttpServer};
use actix_web_metrics_mw::Metrics;
fn health() -> HttpResponse {
HttpResponse::Ok().finish()
}
fn main() -> std::io::Result<()> {
let metrics = Metrics::new("/metrics", "actix_web_mw_test");
HttpServer::new(move || {
App::new()
.wrap(metrics.clone())
.service(web::resource("/health").to(health))
})
.bind("127.0.0.1:8080")?
.run();
Ok(())
}
以上为例,有几件事情需要说明
api
是指标命名空间/metrics
将自动公开(仅支持 GET 请求)
调用 /metrics 端点将公开您的指标
$ curl https://127.0.0.1:8080/metrics
{"http_requests_total":"1570","http_requests_duration":"[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"}
自定义指标
您可以实例化 Metrics
并使用其 sink 注册您的自定义指标。
您还可以使用 metrics 库宏或整个 metrics 运行时来添加新的指标和标签,以满足您的需求。
use actix_web::{web, App, HttpResponse, HttpServer};
use actix_web_metrics_mw::Metrics;
fn health() -> HttpResponse {
counter!("endpoint.method.status", 1);
HttpResponse::Ok().finish()
}
fn main() -> std::io::Result<()> {
let metrics = Metrics::new("/metrics", "actix_web_mw_test");
HttpServer::new(move || {
App::new()
.wrap(metrics.clone())
.service(web::resource("/health").to(health))
})
.bind("127.0.0.1:8080")?
.run();
Ok(())
}
实时功能测试
使用docker-compose文件。实际结果
特别感谢
- 中间件集成受到了nlopes/actix-web-prom项目工作的启发。
依赖项
~30MB
~621K SLoC