Python 后端 SDK 快速开始
让 Python 后端服务(Django / Flask / FastAPI / Celery / 脚本)上报应用日志 + 分布式 trace
span,并经 W3C traceparent 与端上 SDK 端到端贯通。v0 为纯标准库实现,无第三方依赖。
对应 SDK:sdks/python-backend(包名 argus-backend)。
跨语言 API 对照见 后端 SDK API 矩阵 。
安装
pip install argus-backend配置数据源名称(DSN)——从 Console 项目设置获取,格式详见 DSN 与 HMAC 签名:
export ARGUS_DSN='argus://<public_key>:<secret_key>@<host:port>/<project_id>'初始化
import argus_backend
# 读 ARGUS_DSN 环境变量
client = argus_backend.init(service_name="checkout-api")或显式传 DSN 并调参:
client = argus_backend.ArgusClient(
"argus://pub:sec@ingest.argus-tools.app/myproj",
service_name="worker",
flush_interval=5.0, # 后台每 5s flush;设 0 则不起后台线程(需手动 flush)
max_batch=512, # 单批最多条数(服务端硬上限 1000)
max_buffer=10000, # 缓冲上限;溢出 drop-oldest(保留最新窗口)
)上报日志与 trace span
client.log("info", "order created", attributes={"order_id": "o-123"})
client.log("error", "payment failed", attributes={"reason": "card_declined"})
# trace span:with 块结束自动 end,块内抛异常自动标记 error 状态
with client.start_span("process_payment", kind="server", attributes={"order.id": "o-123"}) as span:
span.set_attribute("amount", 19.9)
# 子 span:传 parent=span.context() 继承同一条 trace
with client.start_span("charge_card", parent=span.context()) as child:
...
client.close() # 停止后台 flush 并最后上报一次端到端 Trace:把链路传给下游
start_span 产生的 span 上下文可注入出站请求头,下游服务的 Argus SDK 会继承同一条 trace。trace
span 经统一 EventBatch 上报到 POST /v1/events(channel="trace"),与 go / node / java / rust
后端 SDK 的 JSON wire 逐字节一致。详见 分布式追踪。
行为约定
| 方面 | 行为 |
|---|---|
| 批量 | log() 只入缓冲,后台线程按 flush_interval 批量上报,或显式 flush() |
| 重试 | 5xx / 网络错误指数退避重试(默认 3 次);4xx(鉴权 / payload)立即丢弃不重试 |
| 背压 | 缓冲超 max_buffer 时 drop-oldest(保留最新窗口),client.dropped 可查丢弃数 |
| HMAC | 每批按 METHOD\nPATH\nTS\nsha256hex(BODY) canonical 做 HMAC-SHA256 签名 |
所有上报均为 best-effort:上报失败只丢弃、绝不影响业务请求。