دمج مقاييس Prometheus في تطبيقات Java: مكتبة simpleclient

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

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

ابدأ الدورة

مقاييس Prometheus في Java: مكتبة simpleclient

\n

Prometheus هو نظام مراقبة وتنبيه قوي مفتوح المصدر، يقوم بجمع المقاييس من مصادر مختلفة. بالنسبة لتطبيقات Java، توجد عدة مكتبات للتكامل مع Prometheus. المكتبة الرئيسية والأكثر شيوعًا هي simpleclient من مشروع Prometheus نفسه. توفر هذه المكتبة طريقة بسيطة وآمنة للخيوط وعالية الأداء لإنشاء وتسجيل وتصدير المقاييس.

\n\n

ما هي simpleclient؟

\n

simpleclient هي مكتبة Java الرسمية من Prometheus، والتي تتيح للمطورين إضافة مقاييس إلى التطبيقات بأقل تكلفة إضافية. تدعم أربعة أنواع رئيسية من المقاييس:

\n
    \n
  • Counter — عداد يزداد فقط (مثل عدد الطلبات).
  • \n
  • Gauge — قيمة يمكن أن تزداد أو تنقص (مثل عدد الاتصالات النشطة، درجة الحرارة).
  • \n
  • Histogram — رسم بياني يقيس توزيع القيم (مثل وقت تنفيذ الطلبات).
  • \n
  • Summary — ملخص مشابه للرسم البياني، لكنه يحسب الشرائح المئوية (quantiles) من جانب العميل.
  • \n
\n\n

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

\n

للعمل مع simpleclient، أضف التبعيات التالية إلى ملف pom.xml (Maven):

\n
<dependency>\n    <groupId>io.prometheus</groupId>\n    <artifactId>simpleclient</artifactId>\n    <version>0.16.0</version>\n</dependency>\n<dependency>\n    <groupId>io.prometheus</groupId>\n    <artifactId>simpleclient_hotspot</artifactId>\n    <version>0.16.0</version>\n</dependency>\n<dependency>\n    <groupId>io.prometheus</groupId>\n    <artifactId>simpleclient_servlet</artifactId>\n    <version>0.16.0</version>\n</dependency>
\n

بالنسبة لـ Gradle:

\n
implementation 'io.prometheus:simpleclient:0.16.0'\nimplementation 'io.prometheus:simpleclient_hotspot:0.16.0'\nimplementation 'io.prometheus:simpleclient_servlet:0.16.0'
\n\n

إنشاء وتسجيل المقاييس

\n

لننظر إلى مثال لإنشاء عداد طلبات بسيط. يتم تسجيل المقاييس في السجل العام CollectorRegistry.defaultRegistry.

\n
import io.prometheus.client.Counter;\nimport io.prometheus.client.Gauge;\n\npublic class MetricsExample {\n    // إنشاء عداد باسم "http_requests_total" مع وسوم "method" و "endpoint"\n    static final Counter requests = Counter.build()\n            .name("http_requests_total")\n            .help("Total number of HTTP requests.")\n            .labelNames("method", "endpoint")\n            .register();\n\n    // إنشاء مقياس Gauge لعدد الجلسات النشطة\n    static final Gauge activeSessions = Gauge.build()\n            .name("active_sessions")\n            .help("Current number of active sessions.")\n            .register();\n\n    public static void processRequest(String method, String endpoint) {\n        // زيادة العداد\n        requests.labels(method, endpoint).inc();\n        // تعيين قيمة المقياس (مثل حجم قائمة الانتظار)\n        activeSessions.set(42);\n    }\n}
\n\n

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

\n

لكي يتمكن Prometheus من جمع المقاييس، يجب توفير نقطة نهاية /metrics. أسهل طريقة للقيام بذلك هي باستخدام servlet المدمج. إذا كنت تستخدم Spring Boot، أضف التبعية simpleclient_spring_boot.

\n
import io.prometheus.client.exporter.MetricsServlet;\nimport io.prometheus.client.hotspot.DefaultExports;\nimport javax.servlet.annotation.WebServlet;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\n\n@WebServlet("/metrics"                    

توصيات