مراقبة تطبيقات Swift: التتبع، المقاييس والسجلات للمحترفين

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

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

ابدأ الدورة

ما هي المراقبة (Observability) ولماذا يحتاجها مطور Swift؟

\n\n

هل سبق لك أن حاولت فهم سبب بطء تطبيق Swift الخاص بك على iOS في شاشة الملف الشخصي تحديدًا، أو سبب استجابة الجزء الخادم (Vapor) بتأخير 3 ثوانٍ فقط للمستخدمين في أوروبا؟ إذا كان الأمر كذلك، فقد واجهت المشكلة التي يحلها المراقبة (Observability).

\n\n

المراقبة ليست مجرد "تسجيل". إنها القدرة على طرح أي أسئلة على النظام حول حالته دون الحاجة إلى كتابة كود جديد. الركائز الثلاث للمراقبة هي: التتبع (Tracing)، المقاييس (Metrics)، والسجلات (Logs). معًا، يعطون صورة كاملة عما يحدث: من طلب المستخدم إلى التنفيذ داخل قاعدة البيانات.

\n\n

في هذه المقالة، سنشرح كيفية تطبيق المراقبة في مشاريع Swift - سواء على العميل (iOS) أو على الخادم (Vapor / Hummingbird). ستتعرف على المكتبات التي يجب استخدامها، وكيفية كتابة تتبعات ومقاييس فعالة، وكيف لا تغرق في السجلات.

\n\n

لماذا Swift مرشح مثالي للمراقبة؟

\n\n

Swift هي لغة ذات كتابة قوية، وأداء بمستوى لغة C، ونظام بيئي متزايد لتطوير الخوادم. ولكن هناك فارق بسيط: مجتمع Swift بدأ للتو في تبني المراقبة بنشاط. على عكس Java أو Go، حيث أصبح OpenTelemetry معيارًا، فإن عالم المراقبة في Swift هو اتجاه جديد يمنح المتبنين الأوائل ميزة هائلة.

\n\n

التحديات الرئيسية لمطور Swift:

\n
    \n
  • التزامن غير المتزامن: async/await و Structured Concurrency يغيران قواعد اللعبة للتتبع.
  • \n
  • تعدد المنصات: يمكن تشغيل كود Swift على iOS و macOS والخادم وحتى الأنظمة المضمنة.
  • \n
  • غياب معيار موحد: لا يوجد "حل سحري" حتى الآن كما في عالم Java.
  • \n
\n\n

لكن الخبر السار هو أن Swift يوفر جميع الأدوات اللازمة لبناء مراقبة موثوقة - ما عليك سوى معرفة أين تبحث.

\n\n

التتبع (Tracing) في Swift: من الطلب إلى الاستجابة

\n\n

ما هو التتبع ولماذا هو مطلوب؟

\n

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

\n\n

OpenTelemetry Swift: أداتك الرئيسية

\n

OpenTelemetry هو معيار مفتوح للمراقبة. بالنسبة لـ Swift، توجد حزمة opentelemetry-swift. وهي تدعم التتبع والمقاييس والسجلات، بالإضافة إلى تصدير البيانات إلى أي نظام خلفي (Jaeger, Prometheus, Grafana).

\n\n

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

\n
// Package.swift\n.package(url: "https://github.com/open-telemetry/opentelemetry-swift.git", from: "1.10.0")
\n\n

كتابة أول تتبع (Trace) في Swift

\n

تخيل أن لديك وظيفة لتحميل ملف المستخدم الشخصي. بدون تتبع، ترى فقط وقت التنفيذ الإجمالي. مع التتبع، ترى كل خطوة:

\n\n
import OpenTelemetryApi\nimport OpenTelemetrySdk\n\nlet tracer = OpenTelemetry.instance.tracerProvider.get(\n    instrumentationName: "ProfileModule",\n    instrumentationVersion: "1.0.0"\n)\n\nfunc loadUserProfile(userId: String) async throws -> UserProfile {\n    let span = tracer.spanBuilder(spanName: "loadUserProfile")\n        .setAttribute(key: "user.id", value: userId)\n        .startSpan()\n    \n    defer {\n        span.end()\n    }\n    \n    // الخطوة 1: التحقق من الذاكرة المخبأة\n    let cacheSpan = tracer.spanBuilder(spanName: "checkCache").startSpan()\n    let cached = checkCache(for: userId)\n    cacheSpan.end()\n    \n    if let cachedProfile = cached {\n        span.setAttribute(key: "cache.hit", value: true)\n        return cachedProfile\n    }\n    \n    // الخطوة 2: طلب API\n    let apiSpan = tracer.spanBuilder(spanName: "fetchFromAPI").startSpan()\n    let profile = try await api.fetchPro                

المدونات

توصيات الكتب