Rust 后端 SDK 快速开始
让 Rust 后端服务(actix / axum / tonic / 批处理)上报应用日志 + 分布式 trace span,并经 W3C
traceparent 与端上 SDK 端到端贯通。核心仅依赖 sha2 / hmac / base64 / getrandom,编译轻快;
HTTP transport 经 Transport trait 注入。
对应 SDK:sdks/rust-backend(crate argus-backend)。
跨语言 API 对照见 后端 SDK API 矩阵 。
Rust 后端 SDK 不提供 metric API(对照矩阵中标注为未实现)——如需 metric 请用 Go / Node 后端 SDK。日志与 trace span 已完整可用。
引入依赖
启用内置 HTTP transport(含 TLS):
# Cargo.toml
argus-backend = { version = "0.0.1", features = ["ureq-transport"] }配置数据源名称(DSN)——格式详见 DSN 与 HMAC 签名:
export ARGUS_DSN='argus://<public_key>:<secret_key>@<host:port>/<project_id>'初始化
use argus_backend::{Client, Config, UreqTransport};
let dsn = std::env::var("ARGUS_DSN").unwrap();
let client = Client::new(
&dsn,
UreqTransport,
Config { service_name: Some("checkout-api".into()), ..Config::default() },
)?;不启用 ureq-transport feature 时,实现 Transport trait 注入自有 HTTP 客户端(reqwest / hyper 等)。
上报日志与 trace span
client.log("info", "order created", &[("order_id", "o-123")], None);
client.log("error", "payment failed", &[("reason", "card_declined")], None);
// trace span:离开作用域自动结束并上报;错误状态显式 set_status
{
let mut span = client.start_span("process_payment", "server", &[("order.id", "o-123")], None);
// 子 span:传 span.context() 继承同一条 trace
let _child = client.start_span("charge_card", "client", &[], Some(&span.context()));
span.set_attribute("amount", "19.9");
} // span / child drop → end → 上报
// drop(client) 会停止后台 flush 并最后上报一次端到端 Trace:把链路传给下游
start_span 产生的 span 上下文可注入出站请求头,下游服务的 Argus SDK 会继承同一条 trace。trace span
包成 JSON 统一 EventBatch 发 POST /v1/events(channel="trace"),与 go / node 后端 SDK 一致。
详见 分布式追踪。
行为约定
| 方面 | 行为 |
|---|---|
| 批量 | log() 只入缓冲,后台线程按 flush_interval 批量上报(设 Duration::ZERO 关闭),或显式 flush() |
| 重试 | 5xx / 网络错误指数退避重试(默认 3 次);4xx(鉴权 / payload)立即丢弃不重试 |
| 背压 | 缓冲超 max_buffer 时 drop-oldest(保留最新窗口),dropped() 可查 |
| HMAC | 每批按 METHOD\nPATH\nTS\nsha256hex(BODY) canonical 做 HMAC-SHA256 签名 |
所有上报均为 best-effort:上报失败只丢弃、绝不影响业务请求。