مراقبة تطبيقات Java: المقاييس والتنبيهات من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة: لماذا مراقبة تطبيقات Java هي الأساس

\n

تطبيق Java الحديث هو نظام موزع معقد. بدون مراقبة، أنت تعمل بشكل أعمى: انخفاض سرعة الاستجابة، تسرب الذاكرة، أو خطأ OutOfMemoryError المفاجئ قد يمر دون أن يلاحظه أحد حتى شكوى المستخدم. تتيح لك المراقبة المهيأة بشكل جيد للمقاييس والتنبيهات ليس فقط الاستجابة السريعة للحوادث، بل أيضًا توقع نقاط الضعف قبل أن تصبح حرجة.

\n

في هذه المقالة، سنستعرض الدورة الكاملة: من جمع مقاييس JVM الأساسية إلى إعداد التنبيهات في Prometheus والتصور في Grafana. جميع أمثلة الكود مكتوبة بلغة Java باستخدام المكتبة الشائعة Micrometer.

\n\n

1. المقاييس الرئيسية لتطبيق Java

\n

تبدأ المراقبة باختيار المقاييس الصحيحة. يمكن تقسيمها إلى ثلاث مجموعات: مقاييس JVM، مقاييس الأعمال، ومقاييس البنية التحتية.

\n\n

1.1. مقاييس JVM

\n

تُظهر هذه المقاييس حالة الآلة الافتراضية Java. أهمها:

\n
    \n
  • Heap memory usage — استخدام الكومة (الذاكرة المستخدمة / القصوى). قد يشير الارتفاع الحاد إلى تسرب.
  • \n
  • GC pauses — تكرار ومدة جمع القمامة. فترات التوقف الطويلة (أكثر من ثانية واحدة) هي علامة على وجود مشاكل.
  • \n
  • Thread states — عدد الخيوط في حالات RUNNABLE، BLOCKED، WAITING. كثرة BLOCKED تشير إلى احتمال وجود حظر.
  • \n
  • CPU usage — تحميل المعالج بواسطة عملية JVM.
  • \n
\n\n

1.2. مقاييس الأعمال

\n

تعكس منطق تطبيقك. أمثلة:

\n
    \n
  • عدد الطلبات المعالجة في الدقيقة.
  • \n
  • وقت استجابة API الخارجي.
  • \n
  • عدد أخطاء التحقق.
  • \n
\n\n

1.3. مقاييس البنية التحتية

\n
    \n
  • استخدام القرص، الشبكة، ذاكرة المضيف.
  • \n
  • حالة الاتصالات بقاعدة البيانات (تجمع الاتصالات).
  • \n
  • تأخير قوائم انتظار الرسائل (Kafka، RabbitMQ).
  • \n
\n\n

2. أدوات جمع المقاييس: Micrometer + Prometheus

\n

بالنسبة لتطبيقات Java، المعيار الفعلي هو مكتبة Micrometer. توفر واجهة لأنظمة مراقبة مختلفة (Prometheus، Datadog، Graphite). بالاقتران مع Prometheus (مخزن المقاييس) و Grafana (التصور)، تحصل على نظام بيئي قوي ومجاني.

\n\n

2.1. توصيل Micrometer في Spring Boot

\n

إذا كنت تستخدم Spring Boot 2.x أو 3.x، أضف التبعية التالية إلى pom.xml:

\n
<dependency>\n    <groupId>io.micrometer</groupId>\n    <artifactId>micrometer-registry-prometheus</artifactId>\n</dependency>
\n

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

\n\n

2.2. إنشاء مقياس مخصص

\n

لنفترض أنك تريد حساب عدد الاستدعاءات الناجحة والفاشلة للدالة. أنشئ عدادًا:

\n
import io.micrometer.core.instrument.MeterRegistry;\nimport io.micrometer.core.instrument.Counter;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class OrderService {\n\n    private final Counter successCounter;\n    private final Counter errorCounter;\n\n    public OrderService(MeterRegistry registry) {\n        this.successCounter = Counter.builder("orders.success")\n                .description("Number of successful orders")\n                .register(registry);\n        this.errorCounter = Counter.builder("orders.error")\n                .description("Number of failed orders")\n                .register(registry);\n    }\n\n    public void processOrder(String orderId) {\n        try {\n            // منطق معالجة الطلب\n            successCounter.increment();\n        } catch (Exception e) {\n            errorCounter.increment();\n            throw e;\n        }\n    }\n}
\n

في Prometheus، سيظهر المقياس كـ orders_succ

المدونات

توصيات الكتب