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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

1. جمع المقاييس المتقدم في Java: Micrometer و Prometheus

\n\n

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

\n\n

لماذا هذا مستوى متقدم؟ بدلاً من جمع طلبات HTTP البسيطة، سنقوم بإعداد مقاييس مخصصة: رسوم بيانية لوقت تنفيذ منطق الأعمال، عدادات الأخطاء مع العلامات، مؤقتات للعمليات غير المتزامنة.

\n\n

مثال على إعداد Micrometer في Spring Boot:

\n\n
// التبعية في pom.xml\n<dependency>\n    <groupId>io.micrometer</groupId>\n    <artifactId>micrometer-registry-prometheus</artifactId>\n</dependency>\n\n// application.yml\nmanagement:\n  endpoints:\n    web:\n      exposure:\n        include: "health,prometheus"\n  metrics:\n    export:\n      prometheus:\n        enabled: true\n
\n\n

الآن سنضيف مقياسًا مخصصًا - رسم بياني لوقت تنفيذ الطريقة:

\n\n
import io.micrometer.core.instrument.MeterRegistry;\nimport io.micrometer.core.instrument.Timer;\nimport org.springframework.stereotype.Service;\n\nimport java.util.concurrent.TimeUnit;\n\n@Service\npublic class OrderService {\n\n    private final Timer orderProcessingTimer;\n\n    public OrderService(MeterRegistry registry) {\n        this.orderProcessingTimer = Timer.builder("order.processing.time")\n                .description("الوقت المستغرق لمعالجة طلب")\n                .publishPercentiles(0.5, 0.95, 0.99) // p50, p95, p99\n                .register(registry);\n    }\n\n    public void processOrder(String orderId) {\n        Timer.Sample sample = Timer.start();\n        try {\n            // منطق معالجة الطلب\n            Thread.sleep(200); // محاكاة العمل\n        } catch (InterruptedException e) {\n            Thread.currentThread().interrupt();\n        } finally {\n            sample.stop(orderProcessingTimer);\n        }\n    }\n}\n
\n\n

سيظهر هذا المقياس ليس فقط متوسط الوقت، بل النسب المئوية، وهو أمر بالغ الأهمية لتحديد الطلبات "البطيئة" (tail latency).

\n\n

2. إعداد التنبيهات المتقدمة: Alertmanager والقواعد

\n\n

جمع المقاييس لا فائدة منه بدون نظام إشعارات. Prometheus Alertmanager يسمح بإعداد قواعد تنبيه معقدة مع التجميع، الكبت، وتوجيه الإشعارات (Slack، PagerDuty، البريد الإلكتروني).

\n\n

النهج المتقدم: بدلاً من "وحدة المعالجة المركزية > 90%" البسيطة، نستخدم التنبيهات التنبؤية والتجميع حسب الخدمات.

\n\n

مثال على قاعدة تنبيه لتطبيق Java (ملف rules.yml):

\n\n
groups:\n  - name: java_app_alerts\n    rules:\n      # تنبيه على ارتفاع نسبة الأخطاء 5xx\n      - alert: HighErrorRate\n        expr: |\n          rate(http_requests_total{status=~"5.."}[5m])\n          /\n          rate(http_requests_total[5m]) > 0.05\n        for: 2m\n        labels:\n          severity: critical\n        annotations:\n          summary: "نسبة أخطاء HTTP 5xx عالية ({{ $value | humanizePercentage }})"\n          description: "نسبة الأخطاء لـ {{ $labels.instance }} أعلى من 5% لمدة دقيقتين"                

المدونات

توصيات الكتب