Métriques Prometheus en Swift (iOS/macOS) : surveillance des applications mobiles et de bureau
\n\nPrometheus 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\nPourquoi des métriques Prometheus dans les applications mobiles ?
\n\nLes 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
Principaux types de métriques Prometheus
\n\nPrometheus 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
Bibliothèques pour Swift
\n\nActuellement, 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\nInstallation via Swift Package Manager :
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/reddavis/SwiftPrometheus.git", from: "1.0.0")\n]\n\nExemples de code en Swift
\n\n1. Création d'un compteur de requêtes API
\n\nimport 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\n2. Gauge pour le suivi de la mémoire
\n\nlet 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\n3. Histogramme du temps de chargement des données
\n\nlet 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\nExportation des métriques vers Prometheus
\n\nPour 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).
Exemple de serveur HTTP simple pour l'exportation :
\n\nimport 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