How-To Guides

إتقان مراقبة التطبيقات: دليل عملي لـ Prometheus

في عالم تطوير وتشغيل البرمجيات الحديثة، الرؤية هي القوة. عندما تتوسع التطبيقات عبر أنظمة موزعة، غالباً ما تكون السجلات التقليدية غير كافية للكشف عن اختناقات الأداء أو أعطال النظام في الوقت الفعلي. هنا يبرز Prometheus، مجموعة أدوات مراقبة وتنبيه الأنظمة مفتوحة المصدر التي تم بناؤها في الأصل بواسطة SoundCloud. وبصفته المعيار الفعلي للبيئات الحاوية والبنى التحتية الأصلية للسحابة، يوفر Prometheus نموذج بيانات متعدد الأبعاد قويًا ولغة استعلام قوية تسمى PromQL.

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

فهم البنية

قبل الغوص في التكوين، من الضروري فهم كيفية جمع Prometheus للبيانات. لا يقوم Prometheus بدفع المقاييس؛ بل يقوم بسحبها. يسهّل نموذج السحب هذا الأمان والقابلية للتوسع. تقوم خوادم Prometheus بجلب نقاط نهاية المقاييس التي تعرضها تطبيقاتك أو مكونات البنية التحتية على فترات منتظمة. عادةً ما تعيد هذه النقاط النهاية البيانات بتنسيق نصي بسيط يُعرف بتنسيق العرض (Exposition Format).

بما أن معظم التطبيقات لا تعرض المقاييس بشكل افتراضي، فإننا نستخدم "المصدّرات" (Exporters). المصدّر هو قطعة من الكود تجمع مقاييس مستوى العتاد أو نظام التشغيل من مكون محدد وتترجمها إلى تنسيق يمكن لـ Prometheus جلبه. على سبيل المثال، يقوم Node Exporter بجمع استخدام وحدة المعالجة المركزية والذاكرة، بينما يوفر مصدّر cAdvisor مقاييس الحاويات.

تكوين Prometheus

جوهر Prometheus هو ملف التكوين الخاص به، والذي يُسمى عادةً prometheus.yml. يحدد ملف YAML هذا الإعدادات العالمية، وأهداف الجلب، وملفات القواعد. يبدو التكوين الأساسي مثل المقطع أدناه، والذي يستهدف العنوان المحلي (localhost) على المنفذ 9090 (المنفذ الافتراضي لـ Prometheus) والمنفذ 9100 (المنفذ الافتراضي لـ Node Exporter).

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['localhost:9100']

في هذا التكوين، يحدد scrape_interval مدى تكرار سحب Prometheus للبيانات. يعد تعديل هذه القيمة بناءً على احتياجاتك المحددة—مثل زيادتها لتقليل الحمل خلال فترات انخفاض حركة المرور أو تقليلها لجمع البيانات بتردد عالٍ—تقنية تحسين شائعة.

دمج التطبيقات المخصصة

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

من خلال تعريف مقياس للتوزيع (Histogram) لمدة الطلب، يمكنك الحصول على رؤى عميقة حول كيفية أداء تطبيقك تحت الضغط. إليك مثال مبسط لكيفية تعريف مقياس في تطبيقك:

from prometheus_client import Histogram, start_http_server
import time

REQUEST_DURATION = Histogram('request_duration_seconds', 'Description of histogram')

@app.route('/api/data')
def handle_data():
    with REQUEST_DURATION.time():
        # Simulate some work
        time.sleep(1)
        return "Data processed"

يعرض هذا الكود تلقائياً نقطة نهاية /metrics يمكن لـ Prometheus جلبها. تأكد من أن تطبيقك يرتبط بـ 0.0.0.0 بحيث يمكن لخادم Prometheus، الذي قد يعمل في حاوية منفصلة، الوصول إليه.

التصور والتنبيه

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

بالإضافة إلى ذلك، يمكن لـ Prometheus تشغيل التنبيهات بناءً على قواعد محددة. على سبيل المثال، يمكنك تكوين تنبيه ليتم تفعيله إذا تجاوز استخدام وحدة المعالجة المركزية 80٪ لأكثر من خمس دقائق. يمكن إرسال هذا التنبيه إلى أدوات مثل Slack أو PagerDuty أو البريد الإلكتروني، مما يضمن إشعار فريقك فوراً بأي مشاكل حرجة.

الخاتمة

يعد تنفيذ خطوة أساسية نحو ثقافة DevOps ناضجة. فهو يحول التصحيح التفاعلي إلى مراقبة استباقية. من خلال فهم المصدّرات، وتكوين أهداف الجلب بشكل صحيح، ودمج مقاييس التطبيقات المخصصة، تحصل على رؤية شاملة لصحة نظامك. ابدأ بالأساسيات، وقم بتوسيع تغطية المراقبة تدريجياً، واستفد من Grafana لتحويل البيانات الخام إلى رؤى قابلة للتنفيذ. سيثني عليك مستقبلك—ومستخدموك—على الموثوقية والأداء المحسّنين.

Share: