Swift में Observability: ट्रेसिंग, मेट्रिक्स और लॉग्स

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Observability क्या है और Swift डेवलपर को इसकी आवश्यकता क्यों है?

\n\n

क्या आपने कभी यह समझने की कोशिश की है कि आपका iOS Swift ऐप प्रोफाइल स्क्रीन पर धीमा क्यों चल रहा है, या Vapor पर सर्वर साइड केवल यूरोप के उपयोगकर्ताओं के लिए 3 सेकंड की देरी से रिस्पॉन्स क्यों दे रहा है? अगर हाँ, तो आप उस समस्या का सामना कर चुके हैं जिसे observability (अवलोकनीयता) हल करती है।

\n\n

Observability सिर्फ "लॉगिंग" नहीं है। यह सिस्टम से उसकी स्थिति के बारे में कोई भी प्रश्न पूछने की क्षमता है, बिना नया कोड लिखे। Observability के तीन स्तंभ हैं: ट्रेसिंग (ट्रैसिंग), मेट्रिक्स और लॉग्स। ये तीनों मिलकर पूरी तस्वीर देते हैं: उपयोगकर्ता के अनुरोध से लेकर डेटाबेस के अंदर तक के निष्पादन तक।

\n\n

इस लेख में, हम जानेंगे कि Swift प्रोजेक्ट्स में observability कैसे लागू करें - चाहे वह क्लाइंट (iOS) हो या सर्वर (Vapor / Hummingbird)। आप जानेंगे कि कौन सी लाइब्रेरी का उपयोग करना है, प्रभावी ट्रेस और मेट्रिक्स कैसे लिखना है, और लॉग्स में कैसे नहीं डूबना है।

\n\n

Swift Observability के लिए आदर्श उम्मीदवार क्यों है?

\n\n

Swift एक मजबूत टाइपिंग वाली भाषा है, जिसका प्रदर्शन C के स्तर पर है और सर्वर डेवलपमेंट के लिए बढ़ती इकोसिस्टम है। लेकिन एक बात है: Swift समुदाय अभी सक्रिय रूप से observability को अपनाना शुरू कर रहा है। Java या Go के विपरीत, जहां OpenTelemetry पहले से मानक बन चुका है, Swift में observability एक नया ट्रेंड है, जो शुरुआती अपनाने वालों को बड़ा लाभ देता है।

\n\n

Swift डेवलपर के लिए मुख्य चुनौतियाँ:

\n
    \n
  • असिंक्रोनसी: async/await और Structured Concurrency ट्रेसिंग के नियम बदल रहे हैं।
  • \n
  • मल्टी-प्लेटफ़ॉर्म: Swift कोड iOS, macOS, सर्वर और यहां तक कि embedded पर भी चल सकता है।
  • \n
  • एकीकृत मानक का अभाव: अभी तक Java की दुनिया जैसी कोई "गोल्डन बुलेट" नहीं है।
  • \n
\n\n

लेकिन अच्छी खबर यह है कि Swift मजबूत observability बनाने के लिए सभी उपकरण प्रदान करता है - बस यह जानना जरूरी है कि कहाँ देखना है।

\n\n

Swift में ट्रेसिंग (Tracing): अनुरोध से प्रतिक्रिया तक

\n\n

ट्रेसिंग क्या है और इसकी आवश्यकता क्यों है?

\n

ट्रेसिंग (या वितरित ट्रेसिंग) आपको एक अनुरोध के पथ को सभी सेवाओं और ऐप के फंक्शन के माध्यम से ट्रैक करने की अनुमति देता है। माइक्रोसर्विसेज की दुनिया में यह अपरिहार्य है। लेकिन एक मोनोलिथिक iOS ऐप में भी, ट्रेसिंग यह समझने में मदद करता है कि कोड का कौन सा हिस्सा धीमा है।

\n\n

OpenTelemetry Swift: आपका मुख्य उपकरण

\n

OpenTelemetry observability के लिए एक ओपन स्टैंडर्ड है। 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

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                

ब्लॉग

पुस्तक अनुशंसाएँ