مقاييس Prometheus في Kotlin: التكامل مع Micrometer و Ktor

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقاييس Prometheus في Kotlin: من الأساسيات إلى حلول الإنتاج



تتطلب تطبيقات الواجهة الخلفية الحديثة مراقبة مستمرة. يُعد Prometheus المعيار الفعلي لجمع المقاييس في عالم الخدمات المصغرة. في هذه المقالة، سنشرح كيفية دمج Prometheus في تطبيقات Kotlin باستخدام مكتبة Micrometer وإطار العمل Ktor. ستتعلم كيفية إنشاء عدادات مخصصة، ومخططات بيانية، ومؤقتات، بالإضافة إلى إعداد نقطة نهاية لجمع المقاييس.



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

لنقم بإنشاء تطبيق Ktor بسيط مع مقاييس Prometheus. سنحتاج إلى:

  • PrometheusMeterRegistry - سجل المقاييس
  • KtorMetricsPlugin - إضافة لجمع مقاييس HTTP تلقائيًا
  • نقطة النهاية /metrics لجمع بيانات Prometheus


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، المعالج، الذاكرة) 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(

توصيات