مراقبة تطبيقات Java: مكتبة Micrometer والتكامل مع Prometheus

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

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

ابدأ الدورة

مراقبة تطبيقات Java: مكتبة Micrometer



تتطلب تطبيقات Java الحديثة مراقبة مستمرة للأداء، واستهلاك الذاكرة، ووقت الاستجابة، وغيرها من المعايير الحيوية. Micrometer هي المكتبة القياسية الفعلية لجمع المقاييس في نظام Java البيئي، والتي توفر واجهة برمجة تطبيقات (API) موحدة وتدعم تصدير البيانات إلى أنظمة المراقبة الشائعة مثل Prometheus و Graphite و Datadog.



ما هي Micrometer ولماذا نحتاجها؟



Micrometer هي واجهة (Facade) لجمع المقاييس، تشبه SLF4J كواجهة للتسجيل. تقوم بتجريد كود التطبيق من نظام المراقبة المحدد، مما يسمح بالتبديل بين الأنظمة الخلفية دون تغيير منطق الأعمال.



الإمكانيات الرئيسية للمكتبة:

  • العدادات (Counter) — لحساب الأحداث (مثل عدد الطلبات).
  • المؤقتات (Timer) — لقياس وقت تنفيذ العمليات.
  • المقاييس اللحظية (Gauge) — لتتبع القيم الحالية (مثل حجم تجمع الخيوط).
  • ملخصات التوزيع (DistributionSummary) — لتحليل توزيع القيم (مثل حجم جسم الطلب).
  • الوسوم (Tags) — لإضافة أبعاد إلى المقاييس (مثل endpoint، status).


التثبيت والإعداد



لاستخدام Micrometer في مشروع Maven، أضف التبعية التالية إلى pom.xml:



<dependency>    <groupId>io.micrometer</groupId>    <artifactId>micrometer-core</artifactId>    <version>1.12.0</version></dependency>


إذا كنت تستخدم Spring Boot، يكفي إضافة المبدئ micrometer-registry-prometheus:



<dependency>    <groupId>io.micrometer</groupId>    <artifactId>micrometer-registry-prometheus</artifactId>    <version>1.12.0</version></dependency>


بعد ذلك، سيقوم Spring Boot تلقائياً بتكوين MeterRegistry وفتح نقطة النهاية /actuator/prometheus لجمع المقاييس.



أمثلة على الاستخدام



1. إنشاء عداد للطلبات



مثال بسيط لحساب عدد استدعاءات الدالة:



import io.micrometer.core.instrument.Counter;import io.micrometer.core.instrument.MeterRegistry;

public class RequestCounter { private final Counter requestCounter;

public RequestCounter(MeterRegistry registry) { this.requestCounter = Counter.builder("api.requests") .tag("endpoint", "/users") .description("Total number of requests to /users") .register(registry); }

public void handleRequest() { requestCounter.increment(); // منطق الأعمال }}


2. قياس وقت التنفيذ باستخدام المؤقت



استخدم Timer.Sample لقياس وقت تنفيذ كتلة من الكود:



import io.micrometer.core.instrument.Timer;import io.micrometer.core.instrument.MeterRegistry;

public class RequestTimer { private final Timer requestTimer;

public RequestTimer(MeterRegistry registry) { this.requestTimer = Timer.builder("api.response.time") .tag("endpoint", "/data") .publishPercentiles(0.95, 0.99) .register(registry); }

public String processRequest() { Timer.Sample sample = Timer.start(registry); try { // محاكاة تأخير Thread.sleep(100); return "OK"; } catch (InterruptedException e) { Thread.currentThread().interrupt(); return "ERROR"; } finally

توصيات