مقاييس Prometheus في Java: دليل شامل لمكتبة simpleclient
Prometheus هو نظام مراقبة وتنبيه قوي مفتوح المصدر، أصبح المعيار الفعلي في عالم Cloud Native. لمطوري Java، توجد عدة مكتبات للدمج، لكن المكتبة الرسمية simpleclient (المعروفة أيضًا باسم prometheus/client_java) هي الأكثر شيوعًا ودعمًا. في هذه المقالة، سنشرح بالتفصيل كيفية إضافة مقاييس Prometheus إلى تطبيق Java باستخدام هذه المكتبة.
ما هو simpleclient؟
simpleclient هو عميل Java الرسمي لـ Prometheus، ويوفر طريقة بسيطة وفعالة لإنشاء وتصدير المقاييس. تدعم المكتبة أربعة أنواع رئيسية من مقاييس Prometheus:
- Counter (عداد) — قيمة متزايدة بشكل رتيب (مثل عدد الطلبات).
- Gauge (مقياس) — قيمة يمكن أن تتغير عشوائيًا (مثل تحميل CPU الحالي).
- Histogram (رسم بياني) — توزيع القيم عبر "دلاء" محددة مسبقًا (مثل وقت الاستجابة).
- Summary (ملخص) — النسب المئوية للقيم المرصودة (مثل p50، p99 لوقت الاستجابة).
التثبيت والإعداد
للبدء، أضف التبعيات التالية إلى ملف pom.xml (Maven) أو build.gradle (Gradle).
Maven
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.16.0</version></dependency>
<!-- لتصدير المقاييس عبر HTTP --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_httpserver</artifactId> <version>0.16.0</version></dependency>Gradle
implementation 'io.prometheus:simpleclient:0.16.0'implementation 'io.prometheus:simpleclient_httpserver:0.16.0'إنشاء واستخدام المقاييس
لننظر إلى مثال لإنشاء جميع الأنواع الرئيسية للمقاييس في فئة واحدة.
import io.prometheus.client.Counter;import io.prometheus.client.Gauge;import io.prometheus.client.Histogram;import io.prometheus.client.Summary;
public class MetricsExample {
// 1. Counter: عدد الطلبات المعالجة static final Counter requestsCounter = Counter.build() .name("app_requests_total") .help("Total number of processed requests.") .labelNames("endpoint", "method") .register();
// 2. Gauge: العدد الحالي للمستخدمين النشطين static final Gauge activeUsersGauge = Gauge.build() .name("app_active_users") .help("Current number of active users.") .register();
// 3. Histogram: وقت تنفيذ الطلب بالميلي ثانية static final Histogram requestDurationHistogram = Histogram.build() .name("app_request_duration_ms") .help("Request duration in milliseconds.") .buckets(10, 50, 100, 200, 500, 1000, 5000) .register();
// 4. Summary: النسب المئوية لوقت التنفيذ static final Summary requestDurationSummary = Summary.build() .name("app_request_duration_summary_ms") .help("Request duration summary in milliseconds.") .quantile(0.5, 0.05) // p50 بهامش خطأ 5% .quantile(0.99, 0.01) // p99 بهامش خطأ 1% .register();
public static void main(String[] args) throws Exception { // محاكاة معالجة الطلبات for (int i = 0; i < 100; i++) { processRequest("/api/users", "GET"); }
// تشغيل خادم HTTP لتصدير المقاييس new HTTPServer(9090); System.out.println("Metrics server started