مراقبة تطبيقات Java: المقاييس والتنبيهات (مستوى متقدم)

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

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

ابدأ الدورة

مراقبة تطبيقات Java: المقاييس والتنبيهات على المستوى المتقدم



في التطوير الحديث، لم تعد مراقبة تطبيقات Java خيارًا - بل أصبحت ضرورة. ومع ذلك، فإن جمع المقاييس الأساسية (وحدة المعالجة المركزية، الذاكرة، عدد الطلبات) غالبًا لا يسمح باكتشاف تدهور الأداء أو الأخطاء المخفية في الوقت المناسب. على المستوى المتقدم، لا يتطلب الأمر جمع البيانات فحسب، بل أيضًا إعداد تنبيهات ذكية تستجيب للشذوذ وليس للحدود الثابتة.



في هذه المقالة، سنقوم بتحليل بنية المراقبة المتقدمة لـ Java: من جمع المقاييس باستخدام Micrometer إلى إعداد التنبيهات في Prometheus والتصور في Grafana. المحتوى موجه للمطورين الذين هم على دراية بأساسيات المراقبة.



1. جمع المقاييس المتقدم باستخدام Micrometer



Micrometer هو واجهة للمقاييس تتكامل مع معظم الأنظمة (Prometheus، Datadog، New Relic). على المستوى المتقدم، من المهم ليس فقط إضافة المكتبة، بل تصميم المقاييس المخصصة بشكل صحيح.



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

  • MeterRegistry - المستودع المركزي للمقاييس. لـ Prometheus نستخدم PrometheusMeterRegistry.
  • Counter - عداد (مثل عدد الأخطاء).
  • Timer - قياس وقت التنفيذ.
  • Gauge - القيمة الحالية (مثل حجم قائمة الانتظار).
  • DistributionSummary - توزيع القيم (للنسب المئوية).


مثال على Timer مخصص مع علامات:



import io.micrometer.core.instrument.MeterRegistry;import io.micrometer.core.instrument.Timer;import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Servicepublic class PaymentService {

private final Timer paymentTimer;

public PaymentService(MeterRegistry registry) { this.paymentTimer = Timer.builder("payment.processing.time") .description("وقت معالجة الدفع") .publishPercentiles(0.5, 0.95, 0.99) // P50, P95, P99 .publishPercentileHistogram() .register(registry); }

public void processPayment(String userId, double amount) { Timer.Sample sample = Timer.start(); try { // منطق الأعمال Thread.sleep((long) (Math.random() * 100)); } catch (Exception e) { // مقياس الخطأ } finally { sample.stop(paymentTimer); } }}


نصائح للجمع المتقدم:

  • استخدم العلامات (tags) للتصفية: endpoint، status، region.
  • تجنب زيادة عدد العلامات (مثل عدم إضافة userId).
  • للمقاييس التجارية، استخدم Counter مع زيادة عند كل حدث.
  • قم بإعداد DistributionSummary لحجم الردود أو التأخيرات.


2. التكامل مع Prometheus وإعداد التنبيهات



Prometheus هو نظام لجمع المقاييس والتنبيه يستخدم نموذج السحب (pull-model). لتطبيقات Java، يكفي إضافة نقطة نهاية /actuator/prometheus (عبر Spring Boot Actuator + Micrometer).



التكوين في application.yml:



management:  endpoints:    web:      exposure:        include: prometheus, health  metrics:    export:      prometheus:        enabled: true    tags:      application: my-java-app      environment: production


التنبيهات المتقدمة في Prometheus (rules.yml):



التنبيهات الثابتة (مثل CPU > 90%) جيدة، لكنها غالبًا ما تؤدي إلى إنذارات كاذبة. استخدم الحدود الديناميكية والشذوذ.



groups:  - name: java_app_advanced    rules:\                

المدونات

توصيات الكتب