مقاييس Prometheus في Java: مكتبة simpleclient
\nPrometheus هو نظام مراقبة وتنبيه قوي مفتوح المصدر، يقوم بجمع المقاييس من مصادر مختلفة. بالنسبة لتطبيقات Java، توجد عدة مكتبات للتكامل مع Prometheus. المكتبة الرئيسية والأكثر شيوعًا هي simpleclient من مشروع Prometheus نفسه. توفر هذه المكتبة طريقة بسيطة وآمنة للخيوط وعالية الأداء لإنشاء وتسجيل وتصدير المقاييس.
\n\nما هي simpleclient؟
\nsimpleclient هي مكتبة Java الرسمية من Prometheus، والتي تتيح للمطورين إضافة مقاييس إلى التطبيقات بأقل تكلفة إضافية. تدعم أربعة أنواع رئيسية من المقاييس:
\n- \n
- Counter — عداد يزداد فقط (مثل عدد الطلبات). \n
- Gauge — قيمة يمكن أن تزداد أو تنقص (مثل عدد الاتصالات النشطة، درجة الحرارة). \n
- Histogram — رسم بياني يقيس توزيع القيم (مثل وقت تنفيذ الطلبات). \n
- Summary — ملخص مشابه للرسم البياني، لكنه يحسب الشرائح المئوية (quantiles) من جانب العميل. \n
التثبيت والإعداد
\nللعمل مع simpleclient، أضف التبعيات التالية إلى ملف pom.xml (Maven):
<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:
\nimplementation '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.
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.
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"