Rust应用监控:`tracing`库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 tracing?

tracing 是一个用于 Rust 应用程序的结构化日志记录、性能分析和监控的强大框架。与简单的日志记录器(如 log)不同,tracing 允许创建带有上下文的层次化跨度 (span) 和事件 (event),非常适合跟踪请求、事务和异步操作。

为什么 Rust 需要监控?

Rust 应用程序通常用于对性能和稳定性要求极高的高负载系统。没有监控,您将无法:

  • 追踪慢速请求
  • 发现内存泄漏或恐慌
  • 理解微服务为何崩溃

tracing 通过提供统一的 API 来收集指标、进行追踪和日志记录,解决了这个问题。

安装

在 Cargo.toml 中添加:

[dependencies]tracing = "0.1"tracing-subscriber = "0.3"tracing-appender = "0.2"

对于高级监控(OpenTelemetry),请使用 tracing-opentelemetry。

主要功能

  • 跨度 (spans) — 带有上下文的时段(例如,处理 HTTP 请求)。
  • 事件 (events) — 时间点(例如,错误或警告)。
  • 结构化字段 — 以 key=value 格式传递数据。
  • 异步支持 — 与 tokio/async-std 正确协作。
  • 导出到 OpenTelemetry — 与 Jaeger、Prometheus、Grafana 集成。

Rust 代码示例

use tracing::{info, error, span, Level};use tracing_subscriber;

fn main() { // 初始化日志记录器 tracing_subscriber::fmt() .with_env_filter("my_app=info") .init();

// 创建跨度(例如,用于 HTTP 请求) let root = span!(Level::INFO, "request", method = "GET", path = "/api/users"); let _guard = root.enter();

// 带上下文的日志记录 info!(user_id = 42, "处理请求"); // 带字段的错误 error!( error_code = 500, message = "服务器内部错误", "获取数据时出错" );

// 当 _guard 被丢弃时自动退出跨度}

何时使用?

  • Rust 微服务 — 追踪服务间的请求。
  • 高负载 API — 寻找性能瓶颈。
  • 异步应用程序 — 在 tokio 中正确记录日志。
  • 实时系统 — 监控延迟。

tracing 是 Rust 生态系统中监控的事实标准。它被用于 Tokio、Actix-web 和 Warp 等项目。

推荐