Kotlin अनुप्रयोगों की निगरानी: उन्नत स्तर के मीट्रिक और अलर्ट
\n\nआधुनिक सॉफ्टवेयर विकास में, निगरानी एक विकल्प नहीं रह गई है - यह production-बुनियादी ढांचे का एक अनिवार्य तत्व है। उच्च लोड के तहत काम करने वाले Kotlin-अनुप्रयोगों के लिए, साधारण लॉगिंग पर्याप्त नहीं है। पूर्ण observability की आवश्यकता है: मीट्रिक संग्रह, अलर्ट सेटअप और रीयल-टाइम में डेटा विज़ुअलाइज़ेशन। इस लेख में, हम Prometheus, Grafana और Micrometer स्टैक का उपयोग करके Kotlin-अनुप्रयोगों की निगरानी की उन्नत तकनीकों पर चर्चा करेंगे।
\n\n1. उपकरण: Micrometer और Prometheus
\n\nKotlin-अनुप्रयोग में निगरानी लागू करने का सबसे अच्छा तरीका Micrometer लाइब्रेरी का उपयोग करना है। यह Prometheus सहित विभिन्न निगरानी प्रणालियों के लिए एक फेसड प्रदान करता है। Micrometer JVM-मीट्रिक और कस्टम व्यावसायिक संकेतक दोनों का समर्थन करता है।
\n\nbuild.gradle.kts में निर्भरताएँ जोड़ें:
dependencies {\n implementation("io.micrometer:micrometer-core:1.12.0")\n implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")\n implementation("io.ktor:ktor-server-metrics-micrometer:2.3.7")\n}\n\nKtor-अनुप्रयोग के लिए सेटअप इस प्रकार है:
\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.application.*\nimport io.ktor.server.metrics.micrometer.*\nimport io.micrometer.prometheus.PrometheusMeterRegistry\nimport io.micrometer.prometheus.PrometheusConfig\n\nfun main() {\n val meterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)\n\n embeddedServer(Netty, port = 8080) {\n install(MicrometerMetrics) {\n registry = meterRegistry\n // मानक JVM मीट्रिक जोड़ें\n meterRegistry.config().commonTags("application", "my-kotlin-app")\n }\n routing {\n get("/metrics") {\n call.respond(meterRegistry.scrape())\n }\n }\n }.start(wait = true)\n}\n\nयह कोड स्वचालित रूप से HTTP अनुरोधों, थ्रेड पूल और JVM के मीट्रिक एकत्र करता है। एंडपॉइंट /metrics Prometheus प्रारूप में डेटा प्रदान करता है।
2. कस्टम मीट्रिक: व्यावसायिक संकेतक
\n\nमानक मीट्रिक अक्सर पर्याप्त नहीं होते हैं। उन्नत निगरानी के लिए, व्यावसायिक संकेतक एकत्र करना आवश्यक है: ऑर्डर की संख्या, भुगतान प्रसंस्करण समय, सत्यापन त्रुटियों की आवृत्ति।
\n\nकस्टम काउंटर और टाइमर बनाने का उदाहरण:
\nimport io.micrometer.core.instrument.Counter\nimport io.micrometer.core.instrument.MeterRegistry\nimport io.micrometer.core.instrument.Timer\nimport java.util.concurrent.TimeUnit\n\nclass OrderMetrics(private val registry: MeterRegistry) {\n private val orderCounter: Counter = Counter.builder("orders.created")\n .description("बनाए गए ऑर्डर की कुल संख्या")\n .register(registry)\n\n private val processTimer: Timer = Timer.builder("orders.processing.time")\n .description("ऑर्डर संसाधित करने का समय")\n .publishPercentiles(0.5, 0.95, 0.99)\n .register(registry)\n\n fun recordOrderCreation() {\n orderCounter.increment()\n }\n\n fun measureProcessingTime(block: () -> Unit) {\n processTimer.record(block)\n }\n}\n\nसेवा में उपयोग:
\nclass OrderService(private val metrics: OrderMetrics) {\n fun createOrder(order: Order): Order {\n metrics.recordOrderCreation()\n return metrics.measureProcessingTime {\n // व्यावसायिक तर्क\n Thread.sleep(100) // सिमुलेशन\n order\n }\n }\n}\n\nप्रतिशतक पर ध्यान दें: वे न केवल औसत समय, बल्कि "पूंछ" (p99) को भी ट्रैक करने की अनुमति देते हैं, जो SLA के लिए महत्वपूर्ण है।
\n\n3. Prometheus में अलर्ट सेटअप
\n\nअलर्ट सिस्टम के बिना मीट्रिक संग्रह बेकार है। अलर्ट Prometheus कॉन्फ़िगरेशन (फ़ाइल alert.rules.yml) में सेट किए जाते हैं।
Kotl के लिए नियमों का उदाहरण