Überwachung von Rust-Anwendungen: Bibliotheken und Tools zur Leistungsverfolgung

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

Überwachung von Rust-Anwendungen: Vollständiger Überblick über Bibliotheken und Tools



Rust ist eine systemnahe Programmiersprache, die zunehmend für die Erstellung hochlastiger Webdienste, Netzwerk-Daemons und Infrastrukturkomponenten verwendet wird. Doch selbst der schnellste Code benötigt Überwachung. In diesem Artikel analysieren wir die wichtigsten Bibliotheken zur Überwachung von Rust-Anwendungen: tracing, metrics und die Integration mit OpenTelemetry. Sie erfahren, wie Sie Logs, Metriken und Traces sammeln, um Ihre Anwendung unter Kontrolle zu halten.



1. Warum ist Überwachung in Rust notwendig?

Ohne Überwachung erfahren Sie erst von Problemen, wenn Benutzer sich beschweren. Rust-Anwendungen laufen in der Produktion in der Regel 24/7, daher ist es wichtig, Folgendes zu verfolgen:

  • Speicher- und CPU-Verbrauch;
  • Antwortzeit auf Anfragen;
  • Anzahl der Fehler und Panics;
  • Zustand der Verbindungen zu Datenbanken und externen APIs.

Die gute Nachricht: Das Rust-Ökosystem bietet ausgereifte Lösungen für Observability (Beobachtbarkeit).



2. Die Bibliothek tracing — strukturiertes Logging und Tracing

tracing ist ein Framework zur Instrumentierung von Programmen in Rust. Es ermöglicht die Erstellung von Spans — Arbeitseinheiten, die ineinander verschachtelt werden können, und Events — Informationspunkte.



Installation

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


Beispiel: Basis-Tracing einer HTTP-Anfrage

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

fn handle_request(user_id: u64) { let span = span!(Level::INFO, "handle_request", user_id); let _guard = span.enter(); info!("Anfrageverarbeitung gestartet"); // ... Verarbeitungslogik ... info!("Anfrage abgeschlossen");}

fn main() { tracing_subscriber::fmt::init(); handle_request(42);}

Die Konsolenausgabe enthält strukturierte Felder, die leicht mit grep geparst oder an Jaeger gesendet werden können.



3. Die Bibliothek metrics — Sammlung numerischer Metriken

metrics ist eine leichtgewichtige Bibliothek zur Sammlung von Zählern, Histogrammen und Messfühlern (Gauges). Sie eignet sich ideal für Echtzeit-Überwachung.



Installation

[dependencies]metrics = "0.22"metrics-exporter-prometheus = "0.14"


Beispiel: Anfragenzähler und Zeit-Histogramm

use metrics::{counter, histogram};use std::time::Instant;

fn process_request() { let start = Instant::now(); counter!("requests_total", 1); // ... Arbeitsemulation ... std::thread::sleep(std::time::Duration::from_millis(50)); let duration = start.elapsed().as_secs_f64(); histogram!("request_duration_seconds", duration);}

Um die Metriken über HTTP (für Prometheus) verfügbar zu machen, fügen Sie einen Exporter hinzu:

use metrics_exporter_prometheus::PrometheusBuilder;

fn setup_metrics() { let builder = PrometheusBuilder::new(); builder.install().expect("Exporter konnte nicht installiert werden"); // Metriken sind verfügbar unter http://localhost:9000/metrics}


4. OpenTelemetry — universeller Observability-Standard

OpenTelemetry (OTel) ist ein anbieterneutrales Framework zur Sammlung von Traces, Metriken und Logs. Für Rust gibt es die Crate opentelemetry mit Unterstützung für OTLP (OpenTelemetry Protocol).



Installation

[dependencies]opentelemetry = { version = "0.22", features = ["rt-tokio"] }opentelemetry-otlp = "0.15"tracing-opentelemetry = "0.23"


Beispiel: Integration von tracing mit OpenTelemetry

use opentelemetry::global;use tracing_subscriber::layer::SubscriberExt;use tracing_subscriber::Registry;

fn init_otel() { let tracer = opentelemetry_otlp::new_pipeline() .install_simple()

Empfehlungen