Prometheus-Metriken in Swift (iOS/macOS): Überwachung mobiler und Desktop-Anwendungen
\n\nPrometheus ist ein Open-Source-System für Überwachung und Alarmierung, das Metriken als Zeitreihen sammelt. Im Apple-Ökosystem (iOS und macOS) ermöglicht die Verwendung von Prometheus die Verfolgung der Anwendungsleistung, des Nutzerverhaltens, des Netzwerkstatus und anderer wichtiger Kennzahlen. In diesem Artikel betrachten wir, wie Prometheus-Metriken in Swift-Projekte integriert werden, welche Bibliotheken dafür existieren und wie der Datencxport konfiguriert wird.
\n\nWarum Prometheus-Metriken in mobilen Apps?
\n\nMobile und Desktop-Anwendungen arbeiten oft unter Bedingungen begrenzter Ressourcen und instabiler Verbindungen. Die Erfassung von Metriken hilft:
\n- \n
- Leistungsengpässe zu identifizieren (UI-Verzögerungen, Speicherlecks) \n
- Häufigkeit und Arten von Fehlern zu verfolgen (Abstürze, Netzwerkfehler) \n
- Nutzerverhalten zu analysieren (Sitzungsdauer, Bildschirme) \n
- Alarme für kritische Werte einzurichten (z. B. API-Antwortzeit > 5 Sek.) \n
Grundlegende Metriktypen von Prometheus
\n\nPrometheus unterstützt vier grundlegende Metriktypen, die in Swift implementiert werden können:
\n\n- \n
- Counter (Zähler) — monoton steigender Wert (Anzahl der Anfragen, Fehler) \n
- Gauge (Messwert) — beliebiger Wert, der steigen und fallen kann (aktueller Speicher, aktive Nutzer) \n
- Histogram (Histogramm) — Verteilung von Werten über definierte Intervalle (Ausführungszeit von Funktionen) \n
- Summary (Zusammenfassung) — Verteilung mit Quantilen (Latenzen) \n
Bibliotheken für Swift
\n\nDerzeit ist die beliebteste Bibliothek für die Arbeit mit Prometheus in Swift SwiftPrometheus. Sie bietet eine einfache API zum Erstellen und Registrieren von Metriken und unterstützt den Export in einem mit Prometheus kompatiblen Format.
\n\nInstallation über den Swift Package Manager:
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/reddavis/SwiftPrometheus.git", from: "1.0.0")\n]\n\nCodebeispiele in Swift
\n\n1. Erstellen eines Zählers für API-Anfragen
\n\nimport SwiftPrometheus\n\nlet prometheus = Prometheus()\nlet apiRequests = prometheus.createCounter(\n named: "api_requests_total",\n help: "Total number of API requests",\n labels: ["endpoint"]\n)\n\n// Inkrement bei jeder Anfrage\napiRequests.inc(["endpoint": "/users"])\napiRequests.inc(["endpoint": "/posts"])\n\n2. Gauge zur Speicherüberwachung
\n\nlet memoryGauge = prometheus.createGauge(\n named: "app_memory_bytes",\n help: "Current memory usage in bytes"\n)\n\n// Aktualisierung bei Speicheränderung\nmemoryGauge.set(Double(reportMemoryUsage()))\n\n3. Histogramm der Datenladezeit
\n\nlet loadDuration = prometheus.createHistogram(\n named: "data_load_duration_seconds",\n help: "Histogram of data loading time",\n buckets: [0.1, 0.5, 1.0, 2.0, 5.0]\n)\n\nlet start = CFAbsoluteTimeGetCurrent()\n// ... Daten laden\nlet elapsed = CFAbsoluteTimeGetCurrent() - start\nloadDuration.observe(elapsed)\n\nExport von Metriken nach Prometheus
\n\nDamit Prometheus Metriken sammeln kann, muss Ihre App einen Endpunkt bereitstellen, der Daten im Textformat (plain text exposition format) zurückgibt. Für iOS/macOS kann dies über einen lokalen HTTP-Server erfolgen (z. B. mit Network.framework oder Drittanbieter-Bibliotheken).
Beispiel eines einfachen HTTP-Servers für den Export:
\n\nimport SwiftPrometheus\nimport Network\n\nclass MetricsServer {\n let prometheus: Prometheus\n var listener: NWListener?\n \n init(prometheus: Prometheus, port: UInt16 = 9090) {\n self.prometheus = prometheus\n startServer(port: p Auch in der Bibliothek
Überwachung von Swift-Anwendungen auf iOS/macOS: Bibliotheken und Tools
Authentifizierung und Autorisierung in Go (Golang): Vollständiger Leitfaden
Internationalisierung (i18n) in Swift: NSLocalizedString und String Catalog
Arbeiten mit XML in Go (Golang): Paket encoding/xml und Alternativen
ts-node-dev für TypeScript: Komplettanleitung mit Beispielen