परिचय: Kotlin अनुप्रयोगों के लिए निगरानी क्यों महत्वपूर्ण है
\nJVM (Java Virtual Machine) पर चलने वाले आधुनिक Kotlin अनुप्रयोग अक्सर बुनियादी ढांचे के महत्वपूर्ण घटक बन जाते हैं। उचित निगरानी के बिना, आप अचानक विफलताओं, मेमोरी लीक या प्रदर्शन में गिरावट का सामना करने का जोखिम उठाते हैं, जो घटना होने तक किसी का ध्यान नहीं जाता। इस लेख में, हम Kotlin अनुप्रयोगों की निगरानी के लिए एक पूर्ण प्रणाली बनाने का तरीका समझेंगे: बुनियादी मीट्रिक (CPU, मेमोरी, GC) के संग्रह से लेकर Grafana और Prometheus में अलर्ट सेटअप तक।
\nहम तीन प्रमुख उपकरणों पर विचार करेंगे: Micrometer (मीट्रिक के लिए फ़ेसेड), Prometheus (भंडारण और संग्राहक) और Grafana (विज़ुअलाइज़ेशन और अलर्ट)। सभी कोड उदाहरण Kotlin में लिखे गए हैं।
\n\n1. मीट्रिक संग्रह के मूल सिद्धांत: Micrometer और Prometheus
\nMicrometer Spring और Kotlin पारिस्थितिकी तंत्र में निगरानी के लिए डी-फैक्टो मानक फ़ेसेड है। यह विभिन्न प्रणालियों (Prometheus, Datadog, New Relic, आदि) में मीट्रिक भेजने के लिए एक एकीकृत API प्रदान करता है।
\n\n1.1. निर्भरताएँ जोड़ना (Gradle)
\ndependencies {\n implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")\n implementation("org.springframework.boot:spring-boot-starter-actuator")\n}\nKtor या Spring के बिना शुद्ध Kotlin के लिए, केवल micrometer-core और micrometer-registry-prometheus जोड़ा जा सकता है।
1.2. Spring Boot में Micrometer की बुनियादी कॉन्फ़िगरेशन
\napplication.yml में, Actuator और Prometheus endpoint को सक्षम करना पर्याप्त है:
management:\n endpoints:\n web:\n exposure:\n include: health,info,prometheus\n metrics:\n export:\n prometheus:\n enabled: true\nएप्लिकेशन शुरू करने के बाद, मीट्रिक /actuator/prometheus पते पर उपलब्ध होंगे।
1.3. कस्टम मीट्रिक बनाना (Kotlin में उदाहरण)
\nमान लीजिए कि आप संसाधित ऑर्डर की संख्या और उनके प्रसंस्करण समय की गणना करना चाहते हैं:
\nimport io.micrometer.core.instrument.MeterRegistry\nimport io.micrometer.core.instrument.Timer\nimport org.springframework.stereotype.Service\nimport java.util.concurrent.atomic.AtomicLong\n\n@Service\nclass OrderService(private val registry: MeterRegistry) {\n\n private val processedOrders: AtomicLong = registry.gauge(\n "orders.processed.count",\n AtomicLong(0)\n )\n private val orderProcessingTime: Timer = registry.timer("orders.processing.time")\n\n fun processOrder(orderId: String) {\n val sample = Timer.start()\n try {\n // ऑर्डर प्रसंस्करण का तर्क\n Thread.sleep((50..200).random().toLong())\n processedOrders.incrementAndGet()\n } finally {\n sample.stop(orderProcessingTime)\n }\n }\n}\nअब मीट्रिक orders_processed_count और orders_processing_time_seconds Prometheus में दिखाई देंगे।
2. मीट्रिक संग्रह के लिए Prometheus सेटअप करना
\nPrometheus एक सर्वर है जो आपके अनुप्रयोगों से निर्धारित समय पर मीट्रिक को "स्क्रैप" (अनुरोध) करता है।
\n\n2.1. prometheus.yml कॉन्फ़िगरेशन
\nअपनी Kotlin सेवा को लक्ष्य (target) के रूप में जोड़ें:
\nscrape_configs:\n - job_name: 'kotlin-app'\n metrics_path: '/actuator/prometheus'\n static_configs:\n - targets: ['localhost:8080']\nयदि एप्लिकेशन Docker/Kubernetes में चल रहा है, तो service discovery का उपयोग करें।
\n\n2.2. डिफ़ॉल्ट रूप से महत्वपूर्ण JVM मीट्रिक
\nMicrometer स्वचालित रूप से कई JVM मीट्रिक निर्यात करता है:
\n- \n
jvm_memory_used_bytes— उपयोग की गई मेमोरी (heap/non-heap) \n jvm_gc_pause_seconds— GC पॉज़ का समय \n jvm_threads_live_threads— सक्रिय थ्रेड्स की संख्या \n process_cpu_usage— प्रक्रिया द्वारा CPU उपयोग \n
यह डेटा पहले से ही Prome में उपलब्ध है