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

MIT 许可证

20KB
355 行代码(不包括注释)

datadog apm

MIT licensed crates.io Released API docs

非官方的 Rust Datadog APM。

基于 datadog 文档

用法

查看 文档 以获取使用说明。

示例

查看 examples/ 文件夹!

许可证

本项目采用 MIT 许可证


lib.rs:

非官方的 Rust Datadog APM。

基于 datadog 文档

概述

  • 为高吞吐量而构建,不阻塞调用者(使用 tokio 通道);
  • 高度可配置,并提供合理的默认值;
  • 高效的网络和资源使用:traces 缓冲加序列化到 messagepack;
  • 当缓冲队列满时丢弃 traces;
  • 低级,因此它不会自动对你的代码进行 instrumentation;

用法

datadog_apmtokio 添加到你的依赖项

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