Skip to Content
快速开始Rust 后端 SDK

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 统一 EventBatchPOST /v1/eventschannel="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:上报失败只丢弃、绝不影响业务请求

下一步