Surveillance des applications Rust : métriques et alertes
Rust est un langage de programmation système qui offre des performances élevées et une sécurité mémoire. Cependant, même l'application la plus fiable nécessite une surveillance constante en production. La surveillance permet de détecter à temps les fuites mémoire, l'augmentation des latences, la baisse des performances ou les situations anormales. Dans cet article, nous verrons comment organiser une surveillance complète des applications Rust à l'aide de métriques et d'alertes.
Pourquoi surveiller les applications Rust ?
Les applications Rust sont souvent utilisées dans les systèmes à forte charge, les serveurs web, les bases de données, les services réseau et les projets blockchain. Sans surveillance, vous risquez :
- De manquer le moment où l'application commence à consommer trop de mémoire
- De ne pas remarquer l'augmentation du temps de réponse (latency)
- De perdre des données à cause de redémarrages non planifiés
- De ne pas connaître la baisse des performances avant les plaintes des utilisateurs
La surveillance vous offre de la transparence : vous voyez ce qui se passe à l'intérieur de l'application en temps réel, et vous pouvez réagir aux problèmes avant qu'ils ne deviennent critiques.
Métriques principales pour les applications Rust
Pour une surveillance efficace, vous devez collecter plusieurs types de métriques. Examinons les catégories clés.
Métriques système
Ces métriques montrent comment l'application utilise les ressources du serveur :
- CPU usage — charge du processeur
- Memory usage — volume de mémoire utilisé (RSS, heap)
- File descriptors — nombre de descripteurs de fichiers ouverts
- Thread count — nombre de threads actifs
Métriques métier
Elles reflètent le fonctionnement de l'application du point de vue de l'utilisateur :
- Request rate — nombre de requêtes par seconde
- Latency — temps de traitement des requêtes (p50, p95, p99)
- Error rate — pourcentage d'erreurs (4xx, 5xx)
- Active connections — nombre de connexions actives
Métriques spécifiques à Rust
Pour les applications Rust, il est utile de suivre :
- Panics — nombre de paniques dans l'application
- Garbage collection — Rust n'a pas de GC, mais on peut suivre les allocations
- Task pool size — taille du pool de tâches asynchrones (Tokio)
Outils de surveillance pour Rust
La stack la plus populaire pour la surveillance des applications Rust est Prometheus (collecte de métriques) + Grafana (visualisation) + Alertmanager (alertes). Voyons l'intégration avec un exemple.
Bibliothèques pour Rust
prometheus— client officiel Prometheus pour Rustmetrics— framework de collecte de métriques avec support de divers exportateursopentelemetry— OpenTelemetry pour Rust (supporte métriques, tracing, logs)actix-web-prom— intégration Prometheus avec Actix-web
Exemple : collecte de métriques avec Prometheus et Actix-web
Prenons un exemple simple de serveur web avec Actix-web qui collecte des métriques et les expose au format Prometheus.
use actix_web::{web, App, HttpServer, HttpResponse, middleware};use prometheus::{Encoder, TextEncoder, Counter, Registry, opts};use std::sync::Arc;
pub struct Metrics { pub registry: Registry, pub request_counter: Counter,}
impl Metrics { pub fn new() -> Self { let registry = Registry::new(); let counter_opts = opts!("http_requests_total", "Total number of HTTP requests"); let request_counter = Counter::with_opts(counter_opts).unwrap(); registry.register(Box::new(request_counter.clone())).unwra