مقدمة إلى Spring Boot Actuator
مقدمة إلى Spring Boot Actuator
لقد بنيت التطبيق — فكيف تعرف أنه يعمل بشكل جيد؟ في بيئة الإنتاج تحتاج إلى إجابات على أسئلة من قبيل: هل اتصال قاعدة البيانات حي؟ كم من الذاكرة العشوائية تستهلك JVM؟ كم طلب HTTP معالج في الخادم؟ يجيب Spring Boot Actuator على كل هذه الأسئلة دون كتابة أي كود مخصص من جانبك. فهو يكشف مجموعة من نقاط نهاية HTTP (وحبوب JMX) تُبرز الحالة التشغيلية لتطبيقك في وقت التشغيل.
ما هو Actuator
Actuator هو وحدة Spring Boot من الدرجة الأولى — تبعية تضيفها مرة واحدة فيظهر لك مجموعة كاملة من نقاط النهاية. تُسمى هذه النقاط عادةً نقاط نهاية الإدارة، وتكشف كل منها شريحة محددة من البيانات التشغيلية: الصحة، والمقاييس، ومتغيرات البيئة، وتفريغات الخيوط (thread dumps)، وحبوب الإعداد، وتتبع HTTP وغير ذلك الكثير. بدلًا من كتابة مسار /healthcheck مخصص يختبر قاعدة البيانات، تحصل على تنفيذ مُختبَر وقابل للتوصيل مجانًا.
إضافة Actuator إلى المشروع
أضف المبتدئ إلى pom.xml (أو ما يعادله في Gradle):
هذا هو التغيير الوحيد المطلوب لتفعيل Actuator. عند بدء تشغيل التطبيق ستظهر سطور في السجل مثل:
يُعرض فقط /actuator/health عبر HTTP افتراضيًا. هذا الافتراض المتحفظ مقصود — إذ تُسرّب بعض نقاط النهاية بيانات حساسة ويجب تفعيلها صراحةً.
نقاط النهاية الأساسية في لمحة سريعة
تأتي مع Actuator أكثر من اثنتي عشرة نقطة نهاية مدمجة. أهمها للعمليات اليومية في الإنتاج هي:
/actuator/health— حالة الصحة الإجمالية (UP / DOWN / OUT_OF_SERVICE). يفحص قاعدة البيانات ومساحة القرص وسمسار الرسائل وأي مؤشر مخصص تسجّله. هذا هو العنوان الذي يوجّه إليه Kubernetes تحقق liveness وreadiness./actuator/info— بيانات التعريف التعسفية للتطبيق: إصدار البناء وcommit git وخصائص البيئة. يُملأ منapplication.propertiesأوapplication.ymlتحت مساحة الاسمinfo.*./actuator/metrics— سجل مقاييس مدعوم بـ Micrometer. يسرد أسماء المقاييس المتاحة؛ تعمّق في/actuator/metrics/{name}للحصول على القيم. يغطي ذاكرة JVM وتوقفات GC وأعداد طلبات HTTP وغيرها./actuator/env— الـEnvironmentالمحلول — كل مصدر خاصية (خصائص النظام ومتغيرات البيئة وapplication.yml) وقيمها الفعلية. تُخفى القيم الحساسة افتراضيًا./actuator/beans— القائمة الكاملة لحبوب Spring المسجلة في سياق التطبيق وأنواعها وتبعياتها./actuator/mappings— كل@RequestMappingمسجّل بما فيه أسلوب المعالج. لا غنى عنه عند تصحيح مفاجآت التوجيه./actuator/loggers— عرض وتغيير مستويات السجلات ديناميكيًا في وقت التشغيل دون إعادة تشغيل التطبيق./actuator/threaddump— لقطة لجميع خيوط JVM وتتبعات مكدسها الحالية. أول أداة تلجأ إليها عند تشخيص توقف جامد (deadlock) أو خيط جامح./actuator/httptrace(أُعيدت تسميته/actuator/httpexchangesفي Spring Boot 3) — آخر N من أزواج طلب/استجابة HTTP. يتطلب تسجيل حبةHttpExchangeRepository./actuator/shutdown— يوقف التطبيق بأناة عبر طلب POST. معطّل افتراضيًا ويجب أن يظل كذلك على أي خادم يمكن الوصول إليه عبر الإنترنت.
تفعيل نقاط النهاية وكشفها
يميّز Actuator بين كون نقطة النهاية مُفعَّلة (الميزة نشطة) ومكشوفة (قابلة للوصول عبر HTTP أو JMX). يمكن أن تكون نقطة النهاية مُفعَّلة لكن غير مكشوفة. الاستراتيجية الافتراضية متقيدة عن قصد:
- جميع نقاط النهاية مُفعَّلة افتراضيًا ما عدا
shutdown. - فقط
healthمكشوف عبر HTTP افتراضيًا. - جميع نقاط النهاية مكشوفة عبر JMX افتراضيًا (إن كان JMX مُفعَّلًا).
لكشف نقاط نهاية إضافية استخدم management.endpoints.web.exposure.include:
/actuator/env و/actuator/beans كشف قيم الإعداد ومسارات الفئات والترابطات الداخلية التي يمكن للمهاجم استغلالها. يتناول الدرس 9 في هذا البرنامج التعليمي تأمين Actuator باستخدام Spring Security.
المسار الأساسي ومنفذ إدارة منفصل
يُركّب Actuator افتراضيًا جميع نقاط النهاية تحت /actuator. يمكنك تغيير هذا البادئة:
بالنسبة للخدمات الداخلية من المعتاد خدمة نقاط نهاية الإدارة على منفذ منفصل تمامًا لا يمكن الوصول إليه من الإنترنت العام — فقط من داخل مجموعة Kubernetes أو الـ VPC:
هذا أحد أنظف الأنماط المعمارية لـ Actuator في الإنتاج: يخدم تطبيقك الحركة على المنفذ 8080 (أو 443 خلف وكيل)، وتستدعي بنيتك التحتية للمراقبة المنفذ 8081 المحمي بجدار حماية من العالم الخارجي.
كيف يتكامل Actuator مع بقية المنظومة
لا يعمل Actuator بمعزل — بل صُمّم ليُستهلك:
- Kubernetes — هيّئ
livenessProbeوreadinessProbeليستدعيا/actuator/health/livenessو/actuator/health/readiness(يفصلهما Spring Boot 3 تلقائيًا عند النشر في بيئة Kubernetes). - Prometheus / Grafana — أضف
micrometer-registry-prometheusويجمع Prometheus البيانات من/actuator/prometheusبينما يعرض Grafana لوحات التحكم. لا حاجة لأي كود إضافي فوق التبعية. - أدوات تجميع السجلات — يتيح لك
/actuator/loggersرفع مستوى السجل إلىDEBUGعلى عقدة حية لالتقاط عطل معين ثم خفضه — دون إعادة تشغيل.
info لإظهار إصدار البناء. أضف هدف build-info الخاص بـ spring-boot-maven-plugin ومعرف commit git من خط أنابيب CI. عند وقوع حادثة، يخبرك /actuator/info بالضبط أي بناء وأي commit يعمل — لا غنى عنه في أسطول من الحاويات حيث قد تكون علامات الصور غير محددة.
الخلاصة
يحوّل Spring Boot Actuator تطبيقك إلى خدمة تصف نفسها وقابلة للمراقبة. بتبعية واحدة تحصل على فحوصات صحة، وفحص البيئة، ومقاييس وقت التشغيل، وتغيير مستويات السجلات بشكل حي، وتفريغات الخيوط — كل ما تحتاجه فرقة العمليات لتشغيل خدمة في الإنتاج وتصحيح أعطالها. الانضباط الرئيسي هو معرفة نقاط النهاية التي تكشفها وكيفية حمايتها: افتراضيًا فقط /actuator/health مرئي، ولسبب وجيه. تبني الدروس التالية في هذا البرنامج التعليمي على هذا الأساس — تخصيص مؤشرات الصحة، ونشر مقاييس Micrometer، وتأمين سطح الإدارة باستخدام Spring Security.