4 个版本
0.2.0 | 2020年6月9日 |
---|---|
0.1.2 | 2020年2月14日 |
0.1.1 | 2020年2月14日 |
0.1.0 | 2020年2月14日 |
#5 in #apm
20KB
355 行代码(不包括注释)
datadog apm
非官方的 Rust Datadog APM。
基于 datadog 文档。
用法
查看 文档 以获取使用说明。
示例
查看 examples/ 文件夹!
许可证
本项目采用 MIT 许可证。
lib.rs
:
非官方的 Rust Datadog APM。
基于 datadog 文档。
概述
- 为高吞吐量而构建,不阻塞调用者(使用 tokio 通道);
- 高度可配置,并提供合理的默认值;
- 高效的网络和资源使用:
traces
缓冲加序列化到 messagepack; - 当缓冲队列满时丢弃 traces;
- 低级,因此它不会自动对你的代码进行 instrumentation;
用法
将 datadog_apm
和 tokio
添加到你的依赖项
tokio = { version = "0.2", features = ["full"] }
datadog-apm = "0.2"
- 创建客户端:(请记住,每次不要创建一个新的客户端,而是重用相同的客户端,以便缓冲可以工作)
use datadog_apm::{Client, Config};
let client = Client::new(Config {
env: Some("production".to_string()),
service: "my-crate".to_string(),
..Default::default()
});
- 使用 spans 创建 trace:(在这个示例中,有一个 http 请求的 span 和一个 sql 事务的子 span)
use datadog_apm::{Trace, Span, HttpInfo, ErrorInfo, SqlInfo};
use std::collections::HashMap;
use std::time::{Duration, SystemTime};
let trace = Trace {
id: 123,
priority: 1,
spans: vec![Span {
id: 1,
parent_id: None,
name: "request".to_string(),
resource: "GET /path".to_string(),
r#type: "web".to_string(),
start: SystemTime::now(),
duration: Duration::from_millis(50),
http: Some(HttpInfo {
url: String::from("/path/2?param=true"),
method: String::from("GET"),
status_code: String::from("500"),
}),
error: Some(ErrorInfo {
r#type: "unknown".to_string(),
msg: "Internal error".to_string(),
stack: "stack here".to_string(),
}),
sql: None,
tags: HashMap::new(),
}, Span {
id: 2,
parent_id: Some(1),
name: "database".to_string(),
resource: "select".to_string(),
r#type: "db".to_string(),
start: SystemTime::now(),
duration: Duration::from_millis(20),
http: None,
error: None,
sql: Some(SqlInfo {
query: "select 1".to_string(),
rows: "1".to_string(),
db: "test".to_string(),
}),
tags: HashMap::new(),
}]
};
- 发送 trace
client.send_trace(trace);
就这样!trace 将被缓冲并发送,而不会阻塞当前调用者。
配置
查看 Config
以获取所有可用的配置。
尚未包含的功能:(欢迎贡献!)
依赖项
~10MB
~169K SLoC