Métriques Prometheus en Swift : surveillance des 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)

Prometheus est un puissant système de surveillance et d'alerte open source qui collecte des métriques depuis des applications cibles via HTTP. Dans l'écosystème Swift pour iOS et macOS, il existe plusieurs bibliothèques permettant d'exporter des métriques au format Prometheus. Dans cet article, nous examinerons la bibliothèque SwiftPrometheus — un outil léger pour la collecte et l'exportation de métriques dans les applications Swift.



Qu'est-ce que SwiftPrometheus ?

SwiftPrometheus est une bibliothèque cliente pour Swift qui implémente la spécification Prometheus. Elle permet de créer trois types principaux de métriques : Counter (compteur), Gauge (jauge) et Histogram (histogramme). La bibliothèque est entièrement écrite en Swift, prend en charge iOS 13+, macOS 10.15+, watchOS 6+ et tvOS 13+.



Installation

Ajoutez la dépendance dans votre Package.swift :

// swift-tools-version:5.5import PackageDescription

let package = Package( name: "MyApp", dependencies: [ .package(url: "https://github.com/QuickBirdEng/SwiftPrometheus.git", from: "2.0.0") ], targets: [ .target( name: "MyApp", dependencies: ["SwiftPrometheus"] ) ])


Ou via CocoaPods dans le Podfile :

pod 'SwiftPrometheus', '~> 2.0'


Types principaux de métriques

  • Counter — compteur qui augmente de manière monotone (ex : nombre de requêtes).
  • Gauge — valeur qui peut diminuer et augmenter (ex : température actuelle).
  • Histogram — distribution des valeurs selon des intervalles définis (ex : temps de réponse).


Exemple d'utilisation de Counter

import SwiftPrometheus

let prometheus = Prometheus()let httpRequests = prometheus.createCounter(for: "http_requests_total", help: "Total number of HTTP requests", labels: ["method", "path"])

httpRequests.inc() // +1httpRequests.inc(5) // +5httpRequests.labels(["GET", "/api/v1/users"]).inc() // avec étiquettes


Exemple d'utilisation de Gauge

let temperature = prometheus.createGauge(for: "device_temperature_celsius",                                         help: "Current device temperature")

temperature.set(36.5) // définir la valeurtemperature.inc(2.0) // augmenter de 2temperature.dec(1.0) // diminuer de 1


Exemple d'utilisation de Histogram

let requestDuration = prometheus.createHistogram(for: "request_duration_seconds",                                                help: "Request duration in seconds",                                                buckets: [0.1, 0.5, 1.0, 2.5, 5.0])

requestDuration.observe(0.3) // enregistrement de la valeur


Exportation des métriques au format Prometheus

Pour l'exportation, créez un endpoint HTTP qui fournira les métriques au format texte. Exemple pour Vapor (côté serveur) :

import Vaporimport SwiftPrometheus

func routes(_ app: Application) throws { app.get("metrics") { req in let metrics = prometheus.collect() return Response(body: .init(string: metrics)) }}


Pour les applications iOS/macOS, vous pouvez utiliser URLSession intégré pour envoyer les métriques au serveur Prometheus :

func sendMetrics() {    let metrics = prometheus.collect()    var request = URLRequest(url: URL(string: "https://pushgateway.example.org/metrics")!)    request.httpMethod = "POST"    request.httpBody = metrics.data(using: .utf8)    URLSession.shared.dataTask(with: request).resume()}


Fonctionnalités supplémentaires

  • Étiquettes

Recommendations