Surveillance des applications Rust : la bibliothèque `tracing`

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que tracing?

tracing est un framework puissant pour la journalisation structurée, le profilage et la surveillance d'applications en Rust. Contrairement aux simples logger (comme log), tracing permet de créer des spans (span) hiérarchiques et des événements (event) avec contexte, ce qui est idéal pour suivre les requêtes, les transactions et les opérations asynchrones.

Pourquoi la surveillance en Rust est-elle nécessaire ?

Les applications Rust sont souvent utilisées dans des systèmes à forte charge où les performances et la stabilité sont critiques. Sans surveillance, vous ne pourrez pas :

  • Suivre les requêtes lentes
  • Trouver les fuites mémoire ou les paniques
  • Comprendre pourquoi un microservice est tombé

tracing résout ce problème en fournissant des outils pour collecter des métriques, des traces et des journaux dans une API unifiée.

Installation

Ajoutez dans Cargo.toml :

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

Pour la surveillance avancée (OpenTelemetry), utilisez tracing-opentelemetry.

Fonctionnalités principales

  • Spans (spans) — intervalles temporels avec contexte (par exemple, traitement d'une requête HTTP).
  • Événements (events) — points dans le temps (par exemple, une erreur ou un avertissement).
  • Champs structurés — transmission de données au format key=value.
  • Support asynchrone — fonctionnement correct avec tokio/async-std.
  • Export vers OpenTelemetry — intégration avec Jaeger, Prometheus, Grafana.

Exemple de code en Rust

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

fn main() { // Initialisation du logger tracing_subscriber::fmt() .with_env_filter("my_app=info") .init();

// Création d'un span (par exemple, pour une requête HTTP) let root = span!(Level::INFO, "request", method = "GET", path = "/api/users"); let _guard = root.enter();

// Journalisation avec contexte info!(user_id = 42, "Traitement de la requête"); // Erreur avec champs error!( error_code = 500, message = "Erreur interne du serveur", "Erreur lors de la récupération des données" );

// Sortie automatique du span à la chute de _guard}

Quand l'utiliser ?

  • Microservices en Rust — traçage des requêtes entre services.
  • API à forte charge — recherche de goulots d'étranglement.
  • Applications asynchrones — journalisation correcte dans tokio.
  • Systèmes temps réel — surveillance des latences.

tracing est la norme de facto pour la surveillance dans l'écosystème Rust. Il est utilisé dans des projets comme Tokio, Actix-web et Warp.

Recommendations