Métriques Prometheus en Swift : intégration pour les applications iOS/macOS

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

Métriques Prometheus en Swift (iOS/macOS) : surveillance des applications mobiles et de bureau

\n\n

Prometheus est un système de surveillance et d'alerte open source qui collecte des métriques sous forme de séries temporelles. Dans l'écosystème Apple (iOS et macOS), l'utilisation de Prometheus permet de suivre les performances des applications, le comportement des utilisateurs, l'état du réseau et d'autres indicateurs importants. Dans cet article, nous verrons comment intégrer les métriques Prometheus dans les projets Swift, quelles bibliothèques existent à cet effet et comment configurer l'exportation des données.

\n\n

Pourquoi des métriques Prometheus dans les applications mobiles ?

\n\n

Les applications mobiles et de bureau fonctionnent souvent dans des conditions de ressources limitées et de connexion instable. La collecte de métriques permet de :

\n
    \n
  • Identifier les goulots d'étranglement de performance (latences de l'interface utilisateur, fuites mémoire)
  • \n
  • Suivre la fréquence et les types d'erreurs (crash, erreurs réseau)
  • \n
  • Analyser le comportement des utilisateurs (durée de session, écrans)
  • \n
  • Configurer des alertes sur des valeurs critiques (par exemple, temps de réponse API > 5 secondes)
  • \n
\n\n

Principaux types de métriques Prometheus

\n\n

Prometheus prend en charge quatre principaux types de métriques qui peuvent être implémentés en Swift :

\n\n
    \n
  • Counter (compteur) — valeur qui augmente de façon monotone (nombre de requêtes, d'erreurs)
  • \n
  • Gauge (jauge) — valeur arbitraire qui peut augmenter et diminuer (mémoire actuelle, utilisateurs actifs)
  • \n
  • Histogram (histogramme) — distribution des valeurs selon des intervalles définis (temps d'exécution des fonctions)
  • \n
  • Summary (sommaire) — distribution avec quantiles (latences)
  • \n
\n\n

Bibliothèques pour Swift

\n\n

Actuellement, la bibliothèque la plus populaire pour travailler avec Prometheus en Swift est SwiftPrometheus. Elle fournit une API simple pour créer et enregistrer des métriques, et prend en charge l'exportation dans un format compatible avec Prometheus.

\n\n

Installation via Swift Package Manager :

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/reddavis/SwiftPrometheus.git", from: "1.0.0")\n]
\n\n

Exemples de code en Swift

\n\n

1. Création d'un compteur de requêtes API

\n\n
import SwiftPrometheus\n\nlet prometheus = Prometheus()\nlet apiRequests = prometheus.createCounter(\n    named: "api_requests_total",\n    help: "Total number of API requests",\n    labels: ["endpoint"]\n)\n\n// Incrémentation à chaque requête\napiRequests.inc(["endpoint": "/users"])\napiRequests.inc(["endpoint": "/posts"])
\n\n

2. Gauge pour le suivi de la mémoire

\n\n
let memoryGauge = prometheus.createGauge(\n    named: "app_memory_bytes",\n    help: "Current memory usage in bytes"\n)\n\n// Mise à jour lors du changement de mémoire\nmemoryGauge.set(Double(reportMemoryUsage()))
\n\n

3. Histogramme du temps de chargement des données

\n\n
let loadDuration = prometheus.createHistogram(\n    named: "data_load_duration_seconds",\n    help: "Histogram of data loading time",\n    buckets: [0.1, 0.5, 1.0, 2.0, 5.0]\n)\n\nlet start = CFAbsoluteTimeGetCurrent()\n// ... chargement des données\nlet elapsed = CFAbsoluteTimeGetCurrent() - start\nloadDuration.observe(elapsed)
\n\n

Exportation des métriques vers Prometheus

\n\n

Pour que Prometheus puisse collecter les métriques, votre application doit fournir un endpoint renvoyant les données au format texte (plain text exposition format). Pour iOS/macOS, cela peut être fait via un serveur HTTP local (par exemple, en utilisant Network.framework ou des bibliothèques tierces).

\n\n

Exemple de serveur HTTP simple pour l'exportation :

\n\n
import SwiftPrometheus\nimport Network\n\nclass MetricsServer {\n    let prometheus: Prometheus\n    var listener: NWListener?\n    \n    init(prometheus: Prometheus, port: UInt16 = 9090) {\n        self.prometheus = prometheus\n        startServer(port: p                    

Recommendations