20个不稳定版本 (7个破坏性更新)
0.8.0 | 2024年6月21日 |
---|---|
0.7.1 | 2024年3月6日 |
0.6.0 | 2023年10月2日 |
0.6.0-rc.0 | 2023年12月18日 |
0.1.4 | 2021年9月27日 |
45 in 科学
4,999 每月下载量
105KB
2K SLoC
Prima Datadog
这是一个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