Rust-Anwendungsüberwachung: Die Bibliothek `tracing`

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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.

Empfehlungen