المراقبة في Java: التتبع، المقاييس، السجلات للمحترفين

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

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

ابدأ الدورة

المراقبة في Java: من "لماذا تعطل؟" إلى "أعرف ماذا سيحدث بعد دقيقة"

\n\n

تخيل: تطبيق Java الخاص بك يعمل في بيئة الإنتاج. كل شيء على ما يرام. ثم فجأة! يشتكي المستخدمون من أن الصفحة تستغرق 10 ثوانٍ للتحميل. تتصفح الخادم، تنظر إلى السجلات، ترى الكثير من INFO ولا يوجد أي ERROR. ماذا تفعل؟ أين تنظر؟

\n\n

في المراقبة التقليدية، تتحقق من: هل الخادم حي، كم الذاكرة المستخدمة، هل تعطلت العملية. لكن هذا مثل التحقق مما إذا كان المصباح الكهربائي يضيء على لوحة القيادة - مفيد ولكنه غير كافٍ. المراقبة (Observability) هي المستوى التالي. إنها القدرة على فهم الحالة الداخلية للنظام من خلال مخرجاته الخارجية: السجلات والمقاييس والتتبعات.

\n\n

في هذه المقالة، سأوضح كيفية تطبيق المراقبة في Java بأمثلة حقيقية. سنستخدم OpenTelemetry وMicrometer وSpring Boot Actuator وSLF4J الكلاسيكي. ستتعلم كيفية ربط السجلات والمقاييس والتتبعات في صورة واحدة موحدة، وليس مجرد "جمع كل شيء في كومة".

\n\n

ما هي المراقبة ولماذا ليست مجرد "جمع سجلات"؟

\n\n

جاءت المراقبة من نظرية التحكم. النظام قابل للمراقبة إذا كان من الممكن استعادة حالته الداخلية من خلال مخرجاته. في عالم Java، هذا يعني ثلاثة أركان:

\n\n
    \n
  • السجلات - سجلات منظمة للأحداث (ماذا حدث؟);
  • \n
  • المقاييس - مؤشرات رقمية (كم؟ كم من الوقت؟);
  • \n
  • التتبعات - سلاسل الاستدعاءات (أي مسار سلكه الطلب؟).
  • \n
\n\n

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

\n\n

OpenTelemetry: أداة عالمية للمراقبة

\n\n

في السابق، كانت هناك حديقة حيوانات: Zipkin للتتبع، Prometheus للمقاييس، ELK للسجلات. كل منها مع SDK الخاص به. جاء OpenTelemetry (OTel) لتوحيدهم. إنه معيار مفتوح المصدر لجمع القياسات عن بُعد. يدعم Java بشكل أصلي ويمكن دمجه بسهولة في Spring Boot وMicronaut وQuarkus.

\n\n

كيف يعمل؟ تضيف وكيلاً أو SDK إلى تطبيق Java الخاص بك، ويقوم OTel تلقائياً باعتراض طلبات HTTP واستدعاءات قواعد البيانات وصفوف الرسائل. لا تحتاج إلى كتابة كود لكل أداة على حدة.

\n\n

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

\n\n

أضف التبعية في pom.xml:

\n\n
<dependency>\n    <groupId>io.opentelemetry</groupId>\n    <artifactId>opentelemetry-api</artifactId>\n    <version>1.40.0</version>\n</dependency>\n<dependency>\n    <groupId>io.opentelemetry</groupId>\n    <artifactId>opentelemetry-sdk</artifactId>\n    <version>1.40.0</version>\n</dependency>\n<dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-spring-boot-starter</artifactId>\n    <version>2.6.0</version>\n</dependency>
\n\n

الآن في الإعدادات (application.yml)، حدد المُصدر، على سبيل المثال إلى Jaeger أو مجمع OTLP:

\n\n
otel:\n  exporter:\n    otlp:\n      endpoint: http://localhost:4317\n  traces:\n    exporter: otlp\n  metrics:\n    exporter: otlp\n  logs:\n    exporter: otlp
\n\n

هكذا! الآن كل طلب HTTP إلى وحدة التحكم الخاصة بك ينشئ تتبعاً تلقائياً. يمكنك رؤية المدة التي استغرقها كل استدعاء لقاعدة البيانات أو API خارجي أو مجرد تأخير في التدفق.

\n\n

التتبع في Java: كيفية العثور على "عنق الزجاجة"

\n\n

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

المدونات

توصيات الكتب