Überwachung von Rust-Anwendungen mit der tracing-Bibliothek

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
```html

Was ist Tracing und warum wird es benötigt?

Tracing ist ein leistungsstarkes Framework zur Instrumentierung und Überwachung von Anwendungen in Rust. Im Gegensatz zu einfachem Logging liefert Tracing strukturierte Daten über die Programmausführung und ermöglicht es, nicht nur Nachrichten, sondern auch Kontext, Spans und Events zu verfolgen. Dies ist besonders nützlich für die Leistungsdiagnose, verteilte Systeme und Microservices.

Hauptfunktionen

  • Spans: Verfolgung von Zeitintervallen für die Ausführung von Operationen (z. B. Verarbeitung einer HTTP-Anfrage).
  • Events: Punktuelle Logs mit Kontext (Level, Feld, Zeit).
  • Strukturierte Daten: Unterstützung von Feldern (Key-Value) für die maschinelle Verarbeitung.
  • Asynchronität: Vollständige Kompatibilität mit tokio und async/await.
  • Filterung: Dynamische Steuerung der Log-Level (trace, debug, info, warn, error).

Installation

Fügen Sie in Cargo.toml hinzu:

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

Rust-Codebeispiel

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

fn main() { // Initialisierung des Subscribers (Ausgabe in stdout) let subscriber = FmtSubscriber::builder() .with_max_level(Level::TRACE) .finish(); tracing::subscriber::set_global_default(subscriber) .expect("Fehler beim Setzen des globalen Subscribers");

// Erstellen eines Spans für eine Operation let span = span!(Level::INFO, "main_operation", user_id = 42); let _guard = span.enter();

// Loggen eines Events info!("Start der Anfrageverarbeitung");

// Verschachtelter Span let inner_span = span!(Level::DEBUG, "sub_task", task_id = "calc"); let _inner_guard = inner_span.enter(); tracing::event!(Level::TRACE, "Ausführung der Teilaufgabe"); drop(_inner_guard);

info!("Anfrage abgeschlossen");}

Terminalausgabe (mit Zeitstempeln und Kontext):

2025-03-22T10:00:00.123Z INFO main_operation{user_id=42}: Start der Anfrageverarbeitung2025-03-22T10:00:00.124Z TRACE main_operation{user_id=42}:sub_task{task_id="calc"}: Ausführung der Teilaufgabe2025-03-22T10:00:00.125Z INFO main_operation{user_id=42}: Anfrage abgeschlossen

Wann sollte man Tracing verwenden?

  • Microservices: Verfolgung von Anfrageketten durch verteilte Spans (z. B. mit opentelemetry).
  • Hochlastsysteme: Ersatz für Standard-Logging zur Reduzierung des Overheads.
  • Debugging von asynchronem Code: Spans werden automatisch an tokio-Aufgaben gebunden.
  • Monitoring in der Produktion: Integration mit Grafana, Jaeger, Datadog durch Export von Traces.

Die Bibliothek Tracing ist der De-facto-Standard für Monitoring im Rust-Ökosystem. Sie wird in Projekten wie tokio, hyper, actix-web und axum verwendet.

```

Empfehlungen