دمج مقاييس Prometheus في تطبيقات Kotlin: دليل شامل

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

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

ابدأ الدورة

مقاييس Prometheus في Kotlin: دليل شامل للدمج

\n\n

في التطوير الحديث، تعتبر المراقبة وجمع المقاييس أمرًا بالغ الأهمية للحفاظ على استقرار التطبيقات. Prometheus هو نظام مراقبة رائد مفتوح المصدر يسمح بجمع وتخزين وتحليل بيانات الأداء. في هذه المقالة، سننظر في كيفية إضافة مقاييس Prometheus إلى تطبيقات Kotlin باستخدام مكتبة Micrometer وخادم HTTP قابل للتخصيص.

\n\n

لماذا استخدام Prometheus مع Kotlin؟

\n
    \n
  • المرونة: يدعم Prometheus أنواعًا متعددة من المقاييس: العدادات، الرسوم البيانية، الملخصات، وأجهزة الاستشعار.
  • \n
  • الدمج المدمج: Kotlin متوافق تمامًا مع نظام Java البيئي، مما يسمح باستخدام Micrometer - أداة شائعة لجمع المقاييس.
  • \n
  • قابلية التوسع: يمكن توسيع نطاق Prometheus بسهولة لمراقبة الخدمات المصغرة والأنظمة الموزعة.
  • \n
\n\n

إعداد المشروع باستخدام Gradle

\n

للبدء، أضف التبعيات إلى ملف build.gradle.kts:

\n
dependencies {\n    implementation("io.micrometer:micrometer-core:1.12.0")\n    implementation("io.micrometer:micrometer-registry-prometheus:1.12.0")\n    // لخادم HTTP (نستخدم Ktor)\n    implementation("io.ktor:ktor-server-netty:2.3.7")\n    implementation("io.ktor:ktor-server-content-negotiation:2.3.7")\n}
\n\n

إنشاء مسجل Prometheus

\n

أساس جمع المقاييس هو PrometheusMeterRegistry. قم بإنشائه في تطبيقك:

\n
import io.micrometer.prometheus.PrometheusConfig\nimport io.micrometer.prometheus.PrometheusMeterRegistry\n\nval registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT)
\n\n

تحديد المقاييس

\n

لننظر إلى ثلاثة أنواع رئيسية من المقاييس:

\n
    \n
  • Counter - عداد يزداد فقط (مثل عدد الطلبات).
  • \n
  • Gauge - القيمة الحالية (مثل عدد المستخدمين النشطين).
  • \n
  • Timer - وقت تنفيذ العمليات.
  • \n
\n

مثال على إنشاء المقاييس:

\n
import io.micrometer.core.instrument.Counter\nimport io.micrometer.core.instrument.Gauge\nimport io.micrometer.core.instrument.Timer\n\nval requestCounter: Counter = Counter\n    .builder("api.requests.total")\n    .description("إجمالي عدد الطلبات إلى API")\n    .register(registry)\n\nval activeUsersGauge: Gauge = Gauge\n    .builder("app.users.active")\n    .description("عدد المستخدمين النشطين")\n    .register(registry) { activeUsersCount }\n\nval requestTimer: Timer = Timer\n    .builder("api.requests.duration")\n    .description("وقت تنفيذ الطلبات")\n    .register(registry)\n\nvar activeUsersCount = 0
\n\n

تصدير المقاييس عبر HTTP

\n

لكي يتمكن Prometheus من جمع المقاييس، يجب تصديرها بتنسيق /metrics. نستخدم Ktor لإنشاء نقطة النهاية:

\n
import io.ktor.server.engine.embeddedServer\nimport io.ktor.server.netty.Netty\nimport io.ktor.server.routing.get\nimport io.ktor.server.routing.routing\nimport io.ktor.server.response.respondText\n\nfun startMetricsServer(port: Int = 9090) {\n    embeddedServer(Netty, port = port) {\n        routing {\n            get("/metrics") {\n                val scrape = registry.scrape()\n                call.respondText(scrape, contentType = io.ktor.http.ContentType.Text.Plain)\n            }\n        }\n    }.start(wait = false)\n}
\n\n

الدمج مع منطق الأعمال

\n

قم بتحديث المقاييس في كود تطبيقك:

\n
fun handleRequest() {\n    requestTimer.record {\n        // محاكاة معالجة الطلب\n        Thread.sleep(100)\n        requestCounter.increment()\n    }\n}\n\nfun userLoggedIn() {\n    activeUsersCount++\n}\n\nfun userLoggedOut() {\n    act                    

توصيات