Kotlin एप्लिकेशन मॉनिटरिंग: Ktor Metrics और Micrometer
Ktor फ्रेमवर्क पर बने आधुनिक Kotlin सर्वर एप्लिकेशन को प्रदर्शन और स्थिति की निरंतर निगरानी की आवश्यकता होती है। इसके लिए दो शक्तिशाली टूल का उपयोग किया जाता है: Ktor Metrics Plugin (Ktor में बिल्ट-इन मॉड्यूल) और Micrometer (मेट्रिक्स संग्रह के लिए फेसाड)। इस लेख में हम Prometheus में डेटा एक्सपोर्ट और Grafana में प्रदर्शन के साथ मॉनिटरिंग सेटअप करना सीखेंगे।
मॉनिटरिंग क्यों ज़रूरी है?
मॉनिटरिंग से आप यह कर सकते हैं:
- एंडपॉइंट की रिस्पॉन्स टाइम (लेटेंसी) ट्रैक करना।
- रिक्वेस्ट की संख्या (RPS) गिनना।
- धीमी रिक्वेस्ट और एरर की पहचान करना।
- JVM मेट्रिक्स के ज़रिए मेमोरी और CPU उपयोग देखना।
- सीमा पार होने पर अलर्ट सेट करना।
लाइब्रेरी और डिपेंडेंसी
build.gradle.kts में निम्नलिखित डिपेंडेंसी जोड़ें:
dependencies {
// Ktor Server
implementation("io.ktor:ktor-server-core:2.3.7")
implementation("io.ktor:ktor-server-netty:2.3.7")
// मेट्रिक्स प्लगइन
implementation("io.ktor:ktor-server-metrics-micrometer:2.3.7")
// Prometheus में एक्सपोर्ट
implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")
// JVM मेट्रिक्स (वैकल्पिक)
implementation("io.micrometer:micrometer-core:1.12.0")
}
Ktor Metrics की बेसिक सेटअप
मेट्रिक्स के साथ एक सरल सर्वर का उदाहरण देखें। Application.kt फ़ाइल बनाएं:
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.routing.*
import io.ktor.server.response.*
import io.ktor.server.metrics.micrometer.*
import io.micrometer.prometheus.PrometheusMeterRegistry
import io.micrometer.prometheus.PrometheusConfig
fun main() {
embeddedServer(Netty, port = 8080) {
// Prometheus मेट्रिक्स रजिस्ट्री बनाएं
val prometheusRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
// मेट्रिक्स प्लगइन इंस्टॉल करें
install(MicrometerMetrics) {
registry = prometheusRegistry
// डिफ़ॉल्ट मेट्रिक्स नाम
meterBinders = listOf(
// JVM मेट्रिक्स जोड़ें
io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics(),
io.micrometer.core.instrument.binder.system.ProcessorMetrics()
)
}
// रूटिंग
routing {
// Prometheus मेट्रिक्स देने के लिए एंडपॉइंट
get("/metrics") {
call.respond(prometheusRegistry.scrape())
}
// टेस्ट एंडपॉइंट
get("/hello") {
call.respondText("Hello, World!")
}
// कृत्रिम देरी वाला एंडपॉइंट
get("/slow") {
Thread.sleep(500)
call.respondText("Slow response")
}
}
}.start(wait = true)
}
सर्वर चलाने के बाद http://localhost:8080/metrics खोलें — आपको Prometheus फॉर्मेट में मेट्रिक्स दिखेंगे:
# HELP ktor_http_server_requests_seconds
# TYPE ktor_http_server_requests_seconds summary
ktor_http_server_requests_seconds_count{method="GET",route="/hello",status="2xx"} 3.0
ktor_http_server_requests_seconds_sum{method="GET",route="/hello",status="2xx"} 0.012
# HELP jvm_memory_used_bytes
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="G1 Survivor Space"} 1048576.0
एडवांस्ड सेटअप: कस्टम मेट्रिक्स
आप अपने खुद के काउंटर और टाइमर जोड़ सकते हैं। उदाहरण के लिए, प्रोसेस किए गए ऑर्डर का काउंटर:
import io.micrometer.core.instrument.Counter
import io.micrometer.core.instrument.MeterRegistry
// एप्लिकेशन मॉड्यूल के अंदर
class OrderService(private val meterRegistry: MeterRegistry) {
pr पुस्तकालय में भी
gRPC Java पूर्ण गाइड: उदाहरणों के साथ Java डेवलपर्स के लिए
Swift (iOS/macOS) पर ईमेल भेजना: MFMailComposeViewController और SMTP
C++ के लिए GraphQL लाइब्रेरी: graphql-cpp के साथ API कार्यान्वयन
C# (.NET) में QuestPDF से PDF रिपोर्ट जनरेशन
Java में लॉगिंग: सर्वश्रेष्ठ लाइब्रेरीज़ और समाधानों का अवलोकन