في مشهد DevOps الحديث، لم تعد القدرة على تصور بيانات البنية التحتية والاستجابة لها رفاهية، بل ضرورة حتمية. ومع تعقيد بنية الخدمات المصغرة، لم يعد الاعتماد على السجلات التقليدية كافياً لتشخيص اختناقات الأداء أو فهم صحة النظام. هنا يأتي دور المزيج القوي بين Prometheus لجمع البيانات المتسلسلة زمنياً وGrafana للتصور البياني. في هذا الدليل، سنستكشف كيفية إعداد مجموعة مراقبة قوية توفر رؤى في الوقت الفعلي حول تطبيقك وبنيتك التحتية.
فهم البنية المعمارية
يعمل Prometheus وفق بنية تعتمد على السحب (Pull-based)، مما يعني أنه يقوم بجلب البيانات من النقاط المحددة مسبقاً على فترات منتظمة. يضمن هذا النهج أن يكون لدى Prometheus سيطرة كاملة على عملية الجلب، مما يقلل من الحمل المفروض على خدماتك مقارنة بالأنظمة التي تعتمد على الدفع (Push-based). من ناحية أخرى، يعمل Grafana كطبقة العرض. يتصل بـ Prometheus كمصدر للبيانات، مما يتيح لك إنشاء لوحات معلومات غنية وتفاعلية باستخدام لغة استعلام Prometheus (PromQL).
معاً، يشكلان نظاماً بيئياً مفككاً: يتولى Prometheus التخزين والاسترجاع، بينما يتولى Grafana تجربة المستخدم وتصور التنبيهات. يسمح هذا الفصل بين المسؤوليات لك بتوسيع نطاق كل مكون بشكل مستقل بناءً على احتياجاتك المحددة.
الإعداد باستخدام Docker Compose
أكثر الطرق كفاءة للبدء باستخدام هذه المجموعة هي استخدام Docker Compose. تضمن هذه الطريقة إمكانية إعادة الإنتاج وتبسيط عملية النشر عبر بيئات مختلفة، من التطوير المحلي إلى الإنتاج.
ابدأ بإنشاء ملف docker-compose.yml. سيؤدي هذا التكوين إلى تشغيل ثلاث خدمات: Prometheus، وGrafana، وتطبيق تجريبي (في هذه الحالة، Node Exporter، الذي يكشف عن بيانات مستوى النظام).
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- "9090:9090"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
networks:
- monitoring
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
networks:
- monitoring
volumes:
prometheus_data:
grafana_data:
networks:
monitoring:
driver: bridge
تكوين أهداف Prometheus
بمجرد تشغيل الحاويات، تحتاج إلى إخبار Prometheus بمكان جلب البيانات منه. أنشئ ملف prometheus.yml في نفس الدليل الخاص بملف docker-compose.yml. يحدد التكوين أدناه وظيفتين: واحدة لخادم Prometheus نفسه (المراقبة الذاتية) وأخرى لـ Node Exporter.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
مع هذا التكوين، سيقوم Prometheus بجلب البيانات كل 15 ثانية. يمكنك التحقق من الإعدادات عن طريق الانتقال إلى http://localhost:9090/targets في متصفحك. يجب أن ترى كل من وظائف prometheus و node مدرجة بحالة "UP".
بناء أول لوحة معلومات لك
مع تدفق البيانات إلى Prometheus، تكون الخطوة التالية هي التصور. قم بتسجيل الدخول إلى Grafana على العنوان http://localhost:3000 باستخدام بيانات الاعتماد المحددة في ملف Docker Compose (admin/admin). انتقل إلى Connections > Data Sources وأضف مصدر بيانات Prometheus جديد، مشيراً إلى http://prometheus:9090.
أنشئ لوحة معلومات جديدة وأضف لوحة جديدة. استخدم PromQL للاستعلام عن بياناتك. على سبيل المثال، لتصور استخدام وحدة المعالجة المركزية (CPU)، قد تستخدم الاستعلام 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100). يحسب هذا الاستعلام متوسط وقت خمول وحدة المعالجة المركزية على مدار 5 دقائق ويطرحه من 100٪ للحصول على نسبة الاستخدام.
الخاتمة
يعد تنفيذ Prometheus وGrafana خطوة أساسية نحو تحقيق المراقبة الحقيقية في بنيتك التحتية. بينما يغطي هذا الإعداد الأساسيات، فإن النظام البيئي يقدم المزيد، بما في ذلك قواعد التنبيه عبر Alertmanager وآليات اكتشاف الخدمات المتقدمة. من خلال اعتماد هذه الأدوات، تمنح فريقك القدرة على الانتقال من إدارة الحرائق التفاعلية إلى إدارة النظام الاستباقية، مما يضمن التوفر العالي والأداء لتطبيقاتك.