Prometheus-Metriken in Swift (iOS/macOS)
Prometheus ist ein leistungsstarkes Open-Source-System für Überwachung und Alarmierung, das Metriken von Zielanwendungen über HTTP sammelt. Im Swift-Ökosystem für iOS und macOS gibt es mehrere Bibliotheken, die den Export von Metriken im Prometheus-Format ermöglichen. In diesem Artikel betrachten wir die Bibliothek SwiftPrometheus – ein leichtgewichtiges Werkzeug zum Sammeln und Exportieren von Metriken in Swift-Anwendungen.
Was ist SwiftPrometheus?
SwiftPrometheus ist eine Client-Bibliothek für Swift, die die Prometheus-Spezifikation implementiert. Sie ermöglicht die Erstellung von drei grundlegenden Metriktypen: Counter (Zähler), Gauge (Messer) und Histogram (Histogramm). Die Bibliothek ist vollständig in Swift geschrieben und unterstützt iOS 13+, macOS 10.15+, watchOS 6+ und tvOS 13+.
Installation
Fügen Sie die Abhängigkeit zu Ihrer Package.swift hinzu:
// 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"] ) ])Oder über CocoaPods in der Podfile:
pod 'SwiftPrometheus', '~> 2.0'Grundlegende Metriktypen
- Counter – ein monoton steigender Zähler (z. B. Anzahl der Anfragen).
- Gauge – ein Wert, der sowohl sinken als auch steigen kann (z. B. aktuelle Temperatur).
- Histogram – Verteilung von Werten über definierte Intervalle (z. B. Antwortzeit).
Beispiel für die Verwendung von 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() // mit LabelsBeispiel für die Verwendung von Gauge
let temperature = prometheus.createGauge(for: "device_temperature_celsius", help: "Current device temperature")
temperature.set(36.5) // Wert setzentemperature.inc(2.0) // um 2 erhöhentemperature.dec(1.0) // um 1 verringernBeispiel für die Verwendung von 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) // Wert erfassenExport von Metriken im Prometheus-Format
Für den Export erstellen Sie einen HTTP-Endpunkt, der die Metriken im Textformat ausgibt. Beispiel für Vapor (Serverseite):
import Vaporimport SwiftPrometheus
func routes(_ app: Application) throws { app.get("metrics") { req in let metrics = prometheus.collect() return Response(body: .init(string: metrics)) }}Für iOS/macOS-Apps kann die integrierte URLSession verwendet werden, um Metriken an einen Prometheus-Server zu senden:
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()}Zusätzliche Funktionen
- Labels
Auch in der Bibliothek
HTML-Parsing in Go (Golang): Bibliotheken und Codebeispiele
Standardbibliothek von JavaScript (Node.js): vollständiger Überblick
Datenbankmigrationen in Swift: Tools und Ansätze für iOS/macOS
Arbeit mit CSV in Swift (iOS/macOS): Bibliotheken und Beispiele
JWT-Tokens in Kotlin: Vollständiger Leitfaden mit Codebeispielen