#datadog #logging #metrics #opinionated #udp #approach #prima

prima_datadog

prima.it上共享Datadog日志的代码和方法的意见库

20个不稳定版本 (7个破坏性更新)

0.8.0 2024年6月21日
0.7.1 2024年3月6日
0.6.0 2023年10月2日
0.6.0-rc.02023年12月18日
0.1.4 2021年9月27日

45 in 科学

Download history 974/week @ 2024-04-20 908/week @ 2024-04-27 1085/week @ 2024-05-04 966/week @ 2024-05-11 818/week @ 2024-05-18 1318/week @ 2024-05-25 1126/week @ 2024-06-01 980/week @ 2024-06-08 950/week @ 2024-06-15 1107/week @ 2024-06-22 1026/week @ 2024-06-29 1099/week @ 2024-07-06 959/week @ 2024-07-13 1056/week @ 2024-07-20 1376/week @ 2024-07-27 1357/week @ 2024-08-03

4,999 每月下载量

MIT 许可证

105KB
2K SLoC

Prima Datadog

Build Status

这是一个prima.it上共享Datadog日志的代码和方法的意见库

有关如何在项目中设置库的帮助,请参阅官方文档

❕请注意,prima_datadog.rs 使用dogstatsd,这意味着指标将通过 UDP 协议发送,因此您需要指定包含IP和端口的完整地址(默认地址为 8125,但请注意,库不会为您提供它)。您可以在官方Datadog文档中找到更多信息。完整的URL可能是 10.1.2.3:8125


lib.rs:

这是一个prima.it上共享Datadog日志的代码和方法的意见库

入门

您需要在主二进制文件中调用 Datadog::init,为此您需要一个实现 [Configuration] 特性的类型作为参数。如果您在二进制文件中从未调用 Datadog::init,则不会发送任何指标。

在 [配置] 中,您可以找到一个针对 prima.it 需求量身定制的此特质的实现。

use prima_datadog::{*, configuration::Configuration};

// initializes the Configuration struct
let configuration = Configuration::new(
    "0.0.0.0:1234", // to address
    "namespace", // namespace for all metrics
);

// Initializes a Datadog instance
Datadog::init(configuration).unwrap();

然后您可以使用模块底层暴露的宏。所有宏都接受

  • 一个字符串值或实现 AsRef<str> 特性的类型的路径作为第一个参数。
  • 可以为需要更多数据的指标提供零个或多个参数,参数之间用逗号,分隔。例如,count!timing!接受一个数字,而service_check!接受一个[ServiceStatus]和一个[ServiceCheckOptions]
  • 一个标签列表(标签与其他参数之间用分号;分隔),形式为"name" => "value"

incr!("test");
decr!("test"; "some" => "data");
count!("test", 20);
count!("test", 10; "some" => "data");
time!("test", || { println!("expensive computation");});
time!("test", || { println!("expensive computation");}; "some" => "data");
timing!("test", 20; "some" => "data");
gauge!("test", "gauge value"; "some" => "data");
histogram!("test", "histogram value"; "some" => "data");
distribution!("test", "distribution value"; "some" => "data");
set!("test", "set value"; "some" => "data");
service_check!("test", ServiceStatus::OK);
service_check!("test", ServiceStatus::OK, ServiceCheckOptions::default());
event!("test", "test event"; "some" => "data");

这是一个自定义指标示例,在这种情况下基于枚举类型,但它可以是任何你想要的内容,只要它实现了AsRef<str>


enum Metric {
    John,
    Paul,
    George,
    Ringo,
}

impl AsRef<str> for Metric {
    fn as_ref(&self) -> &str {
        match self {
            Metric::John => "john",
            Metric::Paul => "paul",
            Metric::George => "george",
            Metric::Ringo => "ringo",
        }
    }
}

// now you can do
incr!(Metric::John; "play" => "guitar");
incr!(Metric::Paul; "play" => "bass");
incr!(Metric::George; "play" => "sitar");
incr!(Metric::Ringo; "play" => "drums");

注意 - 避免高标签基数!

避免为一个特定的标签传递大量值非常重要,因为Datadog将每个唯一的标签值组合追踪为一个单独的指标,这可能会显著影响计费。例如,避免传递用户ID、会话ID、请求ID或其他变化很大的值。更多信息请参阅https://docs.datadoghq.com/getting_started/tagging/

当指标基数超过阈值时,用户可以配置一些要执行的操作。有关更多信息,请参阅[TagTrackerConfiguration]。

参考文献

依赖项

~1.4–7MB
~45K SLoC