Was ist tracing?
tracing ist ein leistungsstarkes Framework für strukturiertes Logging, Profiling und Monitoring von Rust-Anwendungen. Im Gegensatz zu einfachen Loggern (wie log) ermöglicht tracing die Erstellung hierarchischer Spans und Events mit Kontext, was ideal für die Verfolgung von Anfragen, Transaktionen und asynchronen Operationen ist.
Warum ist Monitoring in Rust wichtig?
Rust-Anwendungen werden oft in hochbelasteten Systemen eingesetzt, in denen Leistung und Stabilität kritisch sind. Ohne Monitoring können Sie nicht:
- Langsame Anfragen verfolgen
- Speicherlecks oder Panics finden
- Verstehen, warum ein Microservice ausgefallen ist
tracing löst dieses Problem, indem es Werkzeuge zur Sammlung von Metriken, Traces und Logging in einer einheitlichen API bereitstellt.
Installation
Fügen Sie in Cargo.toml hinzu:
[dependencies]tracing = "0.1"tracing-subscriber = "0.3"tracing-appender = "0.2"Für fortgeschrittenes Monitoring (OpenTelemetry) verwenden Sie tracing-opentelemetry.
Hauptfunktionen
- Spans — Zeitintervalle mit Kontext (z. B. Verarbeitung einer HTTP-Anfrage).
- Events — Zeitpunkte (z. B. ein Fehler oder eine Warnung).
- Strukturierte Felder — Datenübergabe im Format key=value.
- Asynchrone Unterstützung — korrekte Funktionsweise mit
tokio/async-std. - Export nach OpenTelemetry — Integration mit Jaeger, Prometheus, Grafana.
Rust-Codebeispiel
use tracing::{info, error, span, Level};use tracing_subscriber;
fn main() { // Logger initialisieren tracing_subscriber::fmt() .with_env_filter("my_app=info") .init();
// Span erstellen (z. B. für eine HTTP-Anfrage) let root = span!(Level::INFO, "request", method = "GET", path = "/api/users"); let _guard = root.enter();
// Logging mit Kontext info!(user_id = 42, "Anfrage wird verarbeitet"); // Fehler mit Feldern error!( error_code = 500, message = "Interner Serverfehler", "Fehler beim Abrufen der Daten" );
// Automatisches Verlassen des Spans beim Fallenlassen von _guard}Wann verwenden?
- Microservices in Rust — Trace von Anfragen zwischen Diensten.
- Hochbelastete APIs — Suche nach Engpässen.
- Asynchrone Anwendungen — korrektes Logging in
tokio. - Echtzeitsysteme — Überwachung von Latenzen.
tracing ist der De-facto-Standard für Monitoring im Rust-Ökosystem. Es wird in Projekten wie Tokio, Actix-web und Warp verwendet.
Auch in der Bibliothek
Arbeit mit Apache Kafka in Node.js: Bibliothek KafkaJS
once_cell für Rust: vollständige Anleitung mit Beispielen
Respect/Validation für PHP: Komplettes Tutorial mit Beispielen
Überwachung von C# (.NET)-Anwendungen mit OpenTelemetry und Prometheus
Markdown-Verarbeitung in Swift für iOS und macOS: Bibliotheken und Beispiele