Kotlin में Prometheus मेट्रिक्स: मूल बातों से लेकर प्रोडक्शन समाधान तक
आधुनिक बैकएंड अनुप्रयोगों को निरंतर निगरानी की आवश्यकता होती है। Prometheus माइक्रोसर्विसेज की दुनिया में मेट्रिक्स संग्रह का डी-फैक्टो मानक है। इस लेख में, हम देखेंगे कि Micrometer लाइब्रेरी और Ktor फ्रेमवर्क का उपयोग करके Kotlin अनुप्रयोगों में Prometheus को कैसे एकीकृत किया जाए। आप सीखेंगे कि कस्टम काउंटर, हिस्टोग्राम और टाइमर कैसे बनाएं, साथ ही मेट्रिक्स संग्रह के लिए एंडपॉइंट कैसे सेट करें।
1. Micrometer की आवश्यकता क्यों है?
Micrometer मॉनिटरिंग के लिए एक फेसाड है, जो लॉगिंग के लिए SLF4J के समान है। यह कई बैकएंड को सपोर्ट करता है: Prometheus, Graphite, Datadog, InfluxDB और अन्य। Micrometer का उपयोग करके, आप किसी विशिष्ट मॉनिटरिंग सिस्टम से बंधे नहीं हैं - केवल डिपेंडेंसी बदलना पर्याप्त है।
Prometheus के लिए, Micrometer एक विशेष रजिस्ट्री PrometheusMeterRegistry प्रदान करता है, जो मेट्रिक्स को टेक्स्ट फॉर्मेट में एक्सपोर्ट करता है जिसे Prometheus समझता है।
2. डिपेंडेंसी जोड़ना
build.gradle.kts में निम्नलिखित डिपेंडेंसी जोड़ें:
dependencies { // Micrometer + Prometheus implementation("io.micrometer:micrometer-core:1.12.5") implementation("io.micrometer:micrometer-registry-prometheus:1.12.5")
// Ktor के लिए implementation("io.ktor:ktor-server-core:2.3.9") implementation("io.ktor:ktor-server-netty:2.3.9") implementation("io.ktor:ktor-server-metrics-micrometer:2.3.9")}यदि आप Spring Boot का उपयोग कर रहे हैं, तो spring-boot-starter-actuator और micrometer-registry-prometheus जोड़ना पर्याप्त है - Spring Boot स्वचालित रूप से /actuator/prometheus एंडपॉइंट कॉन्फ़िगर करेगा।
3. Ktor में बुनियादी सेटअप
Prometheus मेट्रिक्स के साथ एक सरल Ktor एप्लिकेशन बनाते हैं। हमें आवश्यकता होगी:
PrometheusMeterRegistry— मेट्रिक्स रजिस्ट्रीKtorMetricsPlugin— HTTP मेट्रिक्स के स्वचालित संग्रह के लिए प्लगइन- Prometheus डेटा संग्रह के लिए
/metricsएंडपॉइंट
import io.ktor.server.application.*import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.response.*import io.ktor.server.routing.*import io.micrometer.prometheus.PrometheusConfigimport io.micrometer.prometheus.PrometheusMeterRegistryimport io.ktor.server.plugins.metrics.micrometer.*
fun main() { val prometheusRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
embeddedServer(Netty, port = 8080) { install(MicrometerMetrics) { registry = prometheusRegistry // डिफ़ॉल्ट मेट्रिक्स संग्रह सक्षम करें (JVM, CPU, मेमोरी) meterBinders = listOf( JvmGcMetrics(), JvmMemoryMetrics(), ProcessorMetrics() ) }
routing { // Prometheus के लिए एंडपॉइंट get("/metrics") { call.respondText( contentType = ContentType.parse("text/plain; version=0.0.4"), text = prometheusRegistry.scrape() ) }
// व्यावसायिक एंडपॉइंट का उदाहरण get("/hello") { call.respondText("Hello, Kotlin!") } } }.start(wait = true)}4. कस्टम मेट्रिक्स
स्वचालित मेट्रिक्स के अलावा, आप अपनी खुद की मेट्रिक्स भी बना सकते हैं। आइए तीन मुख्य प्रकारों पर विचार करें:
- Counter — काउंटर (उदाहरण: अनुरोधों की संख्या)
- Timer — ऑपरेशन निष्पादन का समय
- Gauge — वर्तमान मान (उदाहरण: सक्रिय उपयोगकर्ताओं की संख्या)
import io.micrometer.core.instrument.Counterimport io.micrometer.core.instrument.Timerimport io.micrometer.core.instrument.Gauge
// मेट्रिक्स बनाएँval requestCounter: Counter = Counter .builder(