#metrics #prometheus #open-telemetry

autometrics

轻松将指标添加到代码中,以帮助您在生产环境中发现和调试问题。基于 Prometheus 和 OpenTelemetry 构建。

17 个版本 (3 个稳定版)

2.0.0 2024年7月25日
1.0.1 2024年2月12日
1.0.0 2023年12月1日
0.6.0 2023年8月8日
0.3.2 2023年3月22日

#32调试

Download history 3850/week @ 2024-05-03 3350/week @ 2024-05-10 4269/week @ 2024-05-17 3029/week @ 2024-05-24 3191/week @ 2024-05-31 4085/week @ 2024-06-07 4238/week @ 2024-06-14 5844/week @ 2024-06-21 5438/week @ 2024-06-28 5871/week @ 2024-07-05 3728/week @ 2024-07-12 4341/week @ 2024-07-19 3761/week @ 2024-07-26 3416/week @ 2024-08-02 3334/week @ 2024-08-09 2832/week @ 2024-08-16

每月下载量 14,368
用于 6 个代码包

MIT/Apache

125KB
2K SLoC

GitHub_headerImage

Documentation Crates.io Discord Shield

指标是了解生产环境中代码健康和性能的强大且成本效益的工具。但很难决定跟踪哪些指标,编写查询来理解数据则更加困难。

Autometrics 提供了一个宏,可以轻松地将最有用的指标(请求速率、错误率和延迟)应用于任何函数。它标准化了这些指标,然后根据您的函数详细信息生成强大的 Prometheus 查询,以帮助您快速识别和调试生产环境中的问题。

优点

  • #[autometrics] 宏向任何函数或 impl 块添加有用的指标,而无需您思考要收集哪些指标
  • 💡 生成强大的 Prometheus 查询,以帮助快速识别和调试生产环境中的问题
  • 🔗 将直接链接到每个函数的文档注释中的实时 Prometheus 图表
  • 📊 Grafana 仪表板 无需配置即可可视化函数和 SLO 的性能
  • 🔍 将代码的版本与指标相关联,以帮助识别引入错误或延迟的提交
  • 📏 标准化服务和团队之间的指标,以改善调试
  • ⚖️ 函数级指标提供了有用的粒度,而不会爆炸基数
  • ⚡ 最小的运行时开销

高级功能

有关 autometrics 背后思想的更多详情,请参阅 autometrics.dev

示例 Axum 应用程序

Autometrics 与任何 Web 框架无关,但这个例子展示了如何在 Axum 服务器中使用这个库。

use std::error::Error;
use autometrics::{autometrics, prometheus_exporter};
use axum::{routing::*, Router};
use std::net::Ipv4Addr;
use tokio::net::TcpListener;

// Instrument your functions with metrics
#[autometrics]
pub async fn create_user() -> Result<(), ()> {
    Ok(())
}

// Export the metrics to Prometheus
#[tokio::main]
pub async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
    prometheus_exporter::init();

    let app = Router::new()
        .route("/users", post(create_user))
        .route(
            "/metrics",
            get(|| async { prometheus_exporter::encode_http_response() }),
        );


    let listener = TcpListener::bind((Ipv4Addr::from([127, 0, 0, 1]), 0)).await?;
    axum::serve(listener, app).await?;
    Ok(())
}

快速入门

请参阅 Github 仓库 README,以快速将 autometrics 添加到您的项目中。

贡献

问题、功能建议和拉取请求都非常欢迎!

如果您有兴趣参与其中

依赖项

~2–20MB
~295K SLoC