Что такое 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.