1个不稳定版本

0.1.1 2022年3月27日

#812 in 调试

MIT/Apache

11KB
154

函数指标

收集标注函数的执行指标。

以下指标被收集

  • 执行时间。
  • 成功(如果函数返回类似core::result::Result的类型)。

这些指标被发送到记录器,这可以被视为后端,可以将指标发送到指标聚合服务,例如。

目前,已实现了以下记录器

  • 日志:简单记录指标。
  • Prometheus:收集指标以便将其发送到Prometheus。

lib.rs:

函数指标

收集标注函数的执行指标。

以下指标被收集

  • 执行时间。
  • 成功(如果函数返回类似core::result::Result的类型)。

用法

包含依赖项并启用所需的记录器。

例如,Prometheus记录器可以像以下这样启用

metrics-fn = { version = "0.1", features = [ "record-prometheus" ] }

之后,只需使用以下代码标注所需的函数 #[measure]

use std::thread::sleep;
use std::time::Duration;

use metrics_fn_codegen::measure;

#[measure]
pub fn super_slow_function(a: u64, b: u64) {
	sleep(Duration::from_millis(a * b));
}

请注意,由于指标收集对函数的每次调用都会有性能影响,因此建议仅在性能影响可以忽略的情况下使用该注解,例如在调用外部服务或数据库查询的函数上。

记录器

指标被收集并发送到记录器,可以与Prometheus等指标系统集成。

为了将依赖项保持到最小,为每个记录器都有一个相应的功能。这些功能由record-和它所启用的指标系统组成。默认情况下,所有记录器都未启用

目前支持以下指标系统

  • 日志(record-log):简单地使用log::info!记录收集到的指标;实际上不是一个指标收集系统。
  • Prometheus (record-prometheus): 将指标收集到默认的 Prometheus 指标注册表中,使用 Prometheus 包

日志记录器 (record-log)

日志记录器并不是非常有用:它是为了帮助开发而创建的。

它仅使用 log::info!log::error! 记录指标。

Prometheus 记录器 (record-prometheus)

Prometheus 记录器将带有 #[measure] 注解的函数的指标收集到 application_method_timings 历史图指标。

此指标具有以下标签

  • mod: 模块名称。
  • fn: 函数名称。
  • res: 结果(如果注解的函数结果命名为 Result,则为 OkErr;否则始终为 Ok)。

使用以下桶:0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0。

为了公开收集的指标,必须手动包含和配置 web 应用程序框架,例如 RocketActix Web

有关示例,请参阅 metrics-fn-example-prometheus

版本控制

使用 语义版本控制。收集的指标的变化也考虑在版本控制中。

待办事项列表

以下是有计划的功能,按优先级排序

此列表并非承诺:项目可能会被添加或从列表中删除。

  • [中]impl 关联的记录类型名称。
  • [低] 可配置的 Prometheus 指标名称和桶。

依赖关系

~1.2–6.5MB
~46K SLoC