مقاييس Prometheus في Swift (iOS/macOS)
Prometheus هو نظام مراقبة وتنبيه مفتوح المصدر وقوي، يقوم بجمع المقاييس من التطبيقات المستهدفة عبر HTTP. في بيئة Swift لنظامي iOS وmacOS، توجد عدة مكتبات تسمح بتصدير المقاييس بتنسيق Prometheus. في هذه المقالة، سنستعرض مكتبة SwiftPrometheus - وهي أداة خفيفة الوزن لجمع وتصدير المقاييس في تطبيقات Swift.
ما هو SwiftPrometheus؟
SwiftPrometheus هي مكتبة عميل بلغة Swift، تطبق مواصفات Prometheus. تتيح إنشاء ثلاثة أنواع رئيسية من المقاييس: Counter (عداد)، Gauge (مقياس)، وHistogram (مدرج تكراري). المكتبة مكتوبة بالكامل بلغة Swift، وتدعم iOS 13+، macOS 10.15+، watchOS 6+، وtvOS 13+.
التثبيت
أضف التبعية إلى ملف 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"] ) ])أو عبر CocoaPods في ملف Podfile:
pod 'SwiftPrometheus', '~> 2.0'الأنواع الرئيسية للمقاييس
- Counter — عداد متزايد بشكل رتيب (مثل عدد الطلبات).
- Gauge — قيمة يمكن أن تنخفض وتزداد (مثل درجة الحرارة الحالية).
- Histogram — توزيع القيم عبر فترات زمنية محددة (مثل وقت الاستجابة).
مثال على استخدام 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() // مع تسمياتمثال على استخدام Gauge
let temperature = prometheus.createGauge(for: "device_temperature_celsius", help: "Current device temperature")
temperature.set(36.5) // تعيين القيمةtemperature.inc(2.0) // زيادة بمقدار 2temperature.dec(1.0) // تقليل بمقدار 1مثال على استخدام 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) // تسجيل القيمةتصدير المقاييس بتنسيق Prometheus
للتصدير، قم بإنشاء نقطة نهاية HTTP (endpoint) تقوم بتقديم المقاييس بتنسيق نصي. مثال باستخدام Vapor (الجانب الخادم):
import Vaporimport SwiftPrometheus
func routes(_ app: Application) throws { app.get("metrics") { req in let metrics = prometheus.collect() return Response(body: .init(string: metrics)) }}لتطبيقات iOS/macOS، يمكن استخدام URLSession المدمج لإرسال المقاييس إلى خادم 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()}إمكانيات إضافية
- تسميات