مقاييس Prometheus في Swift: التكامل لتطبيقات iOS/macOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقاييس Prometheus في Swift (iOS/macOS): مراقبة التطبيقات المحمولة وسطح المكتب

\n\n

Prometheus هو نظام مراقبة وتنبيه مفتوح المصدر يجمع المقاييس في شكل سلاسل زمنية. في نظام Apple البيئي (iOS وmacOS)، يتيح استخدام Prometheus تتبع أداء التطبيقات، سلوك المستخدمين، حالة الشبكة، والمؤشرات الهامة الأخرى. في هذه المقالة، سننظر في كيفية دمج مقاييس Prometheus في مشاريع Swift، وما هي المكتبات المتاحة لذلك، وكيفية إعداد تصدير البيانات.

\n\n

لماذا نحتاج مقاييس Prometheus في التطبيقات المحمولة؟

\n\n

غالبًا ما تعمل التطبيقات المحمولة وسطح المكتب في ظروف موارد محدودة واتصال غير مستقر. يساعد جمع المقاييس في:

\n
    \n
  • تحديد نقاط الضعف في الأداء (تأخيرات واجهة المستخدم، تسرب الذاكرة)
  • \n
  • تتبع تكرار وأنواع الأخطاء (الأعطال، أخطاء الشبكة)
  • \n
  • تحليل سلوك المستخدم (مدة الجلسة، الشاشات)
  • \n
  • إعداد التنبيهات للقيم الحرجة (مثل وقت استجابة API > 5 ثوانٍ)
  • \n
\n\n

الأنواع الرئيسية لمقاييس Prometheus

\n\n

يدعم Prometheus أربعة أنواع رئيسية من المقاييس التي يمكن تنفيذها في Swift:

\n\n
    \n
  • Counter (عداد) — قيمة متزايدة بشكل رتيب (عدد الطلبات، الأخطاء)
  • \n
  • Gauge (مقياس) — قيمة عشوائية يمكن أن تزيد وتنقص (الذاكرة الحالية، المستخدمون النشطون)
  • \n
  • Histogram (رسم بياني) — توزيع القيم عبر فترات زمنية محددة (وقت تنفيذ الدوال)
  • \n
  • Summary (ملخص) — توزيع مع الشرائح المئوية (التأخيرات)
  • \n
\n\n

مكتبات Swift

\n\n

حاليًا، المكتبة الأكثر شيوعًا للعمل مع Prometheus في Swift هي SwiftPrometheus. توفر واجهة برمجة تطبيقات بسيطة لإنشاء وتسجيل المقاييس، كما تدعم التصدير بتنسيق متوافق مع Prometheus.

\n\n

التثبيت عبر Swift Package Manager:

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/reddavis/SwiftPrometheus.git", from: "1.0.0")\n]
\n\n

أمثلة على الكود في Swift

\n\n

1. إنشاء عداد لطلبات API

\n\n
import 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// الزيادة عند كل طلب\napiRequests.inc(["endpoint": "/users"])\napiRequests.inc(["endpoint": "/posts"])
\n\n

2. Gauge لتتبع الذاكرة

\n\n
let memoryGauge = prometheus.createGauge(\n    named: "app_memory_bytes",\n    help: "Current memory usage in bytes"\n)\n\n// التحديث عند تغير الذاكرة\nmemoryGauge.set(Double(reportMemoryUsage()))
\n\n

3. رسم بياني لوقت تحميل البيانات

\n\n
let 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// ... تحميل البيانات\nlet elapsed = CFAbsoluteTimeGetCurrent() - start\nloadDuration.observe(elapsed)
\n\n

تصدير المقاييس إلى Prometheus

\n\n

لكي يتمكن Prometheus من جمع المقاييس، يجب أن يوفر تطبيقك نقطة نهاية تعيد البيانات بتنسيق نصي (plain text exposition format). بالنسبة لـ iOS/macOS، يمكن القيام بذلك عبر خادم HTTP محلي (على سبيل المثال، باستخدام Network.framework أو مكتبات خارجية).

\n\n

مثال على خادم HTTP بسيط للتصدير:

\n\n
import 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                    

توصيات