Métricas Prometheus em Swift (iOS/macOS)
Prometheus é um poderoso sistema de monitoramento e alerta de código aberto que coleta métricas de aplicativos alvo via HTTP. No ecossistema Swift para iOS e macOS, existem várias bibliotecas que permitem exportar métricas no formato Prometheus. Neste artigo, vamos explorar a biblioteca SwiftPrometheus — uma ferramenta leve para coleta e exportação de métricas em aplicativos Swift.
O que é SwiftPrometheus?
SwiftPrometheus é uma biblioteca cliente para Swift que implementa a especificação Prometheus. Ela permite criar três tipos principais de métricas: Counter (contador), Gauge (medidor) e Histogram (histograma). A biblioteca é totalmente escrita em Swift, suporta iOS 13+, macOS 10.15+, watchOS 6+ e tvOS 13+.
Instalação
Adicione a dependência ao seu 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 no Podfile:
pod 'SwiftPrometheus', '~> 2.0'Tipos principais de métricas
- Counter — contador monotonicamente crescente (ex.: número de requisições).
- Gauge — valor que pode diminuir e aumentar (ex.: temperatura atual).
- Histogram — distribuição de valores em intervalos definidos (ex.: tempo de resposta).
Exemplo de uso do 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() // com rótulosExemplo de uso do Gauge
let temperature = prometheus.createGauge(for: "device_temperature_celsius", help: "Current device temperature")
temperature.set(36.5) // definir valortemperature.inc(2.0) // aumentar em 2temperature.dec(1.0) // diminuir em 1Exemplo de uso do 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 valorExportação de métricas no formato Prometheus
Para exportar, crie um endpoint HTTP que forneça as métricas em formato de texto. Exemplo para Vapor (lado do 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 aplicativos iOS/macOS, você pode usar o URLSession integrado para enviar métricas ao 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()}Recursos adicionais
- Rótulos
Também na biblioteca
Thymeleaf para Java: guia completo com exemplos
TypeStack/routing-controllers para TypeScript: guia completo com exemplos
Trabalhando com YAML em TypeScript: guia completo de parsing e serialização
Validação de dados em JavaScript (Node.js) com Joi e Yup
Trabalho com CSV em Java: guia completo de leitura e escrita