Métricas de Prometheus en Swift (iOS/macOS)
Prometheus es un potente sistema de monitoreo y alerta de código abierto que recopila métricas de aplicaciones objetivo a través de HTTP. En el ecosistema Swift para iOS y macOS, existen varias bibliotecas que permiten exportar métricas en formato Prometheus. En este artículo, analizaremos la biblioteca SwiftPrometheus, una herramienta ligera para recopilar y exportar métricas en aplicaciones Swift.
¿Qué es SwiftPrometheus?
SwiftPrometheus es una biblioteca cliente para Swift que implementa la especificación de Prometheus. Permite crear tres tipos principales de métricas: Counter (contador), Gauge (medidor) e Histogram (histograma). La biblioteca está completamente escrita en Swift y es compatible con iOS 13+, macOS 10.15+, watchOS 6+ y tvOS 13+.
Instalación
Agregue la dependencia a su 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"] ) ])O mediante CocoaPods en el Podfile:
pod 'SwiftPrometheus', '~> 2.0'Tipos principales de métricas
- Counter — contador monótonamente creciente (por ejemplo, número de solicitudes).
- Gauge — valor que puede disminuir y aumentar (por ejemplo, temperatura actual).
- Histogram — distribución de valores en intervalos definidos (por ejemplo, tiempo de respuesta).
Ejemplo de uso 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() // con etiquetasEjemplo de uso de Gauge
let temperature = prometheus.createGauge(for: "device_temperature_celsius", help: "Current device temperature")
temperature.set(36.5) // establecer valortemperature.inc(2.0) // incrementar en 2temperature.dec(1.0) // decrementar en 1Ejemplo de uso 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) // registrar valorExportación de métricas en formato Prometheus
Para la exportación, cree un endpoint HTTP que entregue las métricas en formato de texto. Ejemplo para Vapor (lado del servidor):
import Vaporimport SwiftPrometheus
func routes(_ app: Application) throws { app.get("metrics") { req in let metrics = prometheus.collect() return Response(body: .init(string: metrics)) }}Para aplicaciones iOS/macOS, puede usar el URLSession incorporado para enviar métricas al servidor 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()}Funcionalidades adicionales
- Etiquetas