Prometheus-Metriken in Swift: Überwachung von iOS/macOS-Apps

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 Labels


Beispiel 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 verringern


Beispiel 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 erfassen


Export 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

Empfehlungen