How-To Guides

إتقان مراقبة التطبيقات: دليل شامل للمراقبة باستخدام Prometheus

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

لماذا تختار Prometheus؟

قبل الغوص في التكوين، من الضروري فهم سبب كون Prometheus الخيار المفضل للعديد من فرق الهندسة. على عكس أدوات المراقبة التقليدية التي تعتمد على المقاييس المرسلة (push-based) أو السجلات المستلمة (pull-based)، يستخدم Prometheus بنية تعتمد على السحب (pull-based). هذا يعني أنه يقوم بجلب المقاييس من تطبيقك عبر نقاط نهاية HTTP بفترات زمنية محددة. يوفر هذا الاختيار التصميمي عدة مزايا: 1. **البساطة:** لا تحتاج الوكلاء (Agents) إلى معالجة أخطاء الشبكة؛ حيث يتولى الخادم المركزي إعادة المحاولة ومعالجة مشكلات الاتصال. 2. **سهولة التوسع:** تتيح قدرات التوسع الأفقي إضافة المزيد من الخوادم دون الحاجة إلى تغيير كود تطبيقك بشكل كبير. 3. **لغة استعلام قوية (PromQL):** يوفر Prometheus لغة استعلام مرنة للغاية تسمح بتحليل وتجميع المقاييس المعقدة.

الخطوة 1: قياس أداء التطبيق (Instrumenting Your Application)

لمراقبة تطبيق ما، يجب أن يكشف عن مقاييسه بتنسيق يفهمه Prometheus، وعادةً ما يكون ذلك بتنسيق OpenMetrics أو تنسيق العرض الخاص بـ Prometheus. تتوفر مكتبات عملاء للغات الأكثر شيوعاً تجعل هذه العملية بسيطة. على سبيل المثال، إذا كنت تستخدم لغة Go، يمكنك استخدام المكتبة الرسمية `prometheus/client_golang`. إليك مقتطف بسيط يوضح كيفية كشف مقياس التوزيع (histogram) لزمن طلبات HTTP:
package main

import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var requestLatency = prometheus.NewHistogramVec(
    prometheus.HistogramOpts{
        Name:    "http_request_duration_seconds",
        Help:    "Duration of HTTP requests.",
        Buckets: prometheus.DefBuckets,
    },
    []string{"method", "status"},
)

func main() {
    prometheus.MustRegister(requestLatency)

    http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        // ... process request ...
        latency := time.Since(start).Seconds()
        requestLatency.WithLabelValues(r.Method, "200").Observe(latency)
        w.WriteHeader(http.StatusOK)
    })

    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}
في هذا الكود، نحدد مقياس توزيع يتتبع مدة مكالمات واجهة برمجة التطبيقات (API)، مصنفة حسب طريقة HTTP ورمز الحالة. يقدم نقطة النهاية `/metrics` هذه القيم بتنسيق النص العادي المطلوب بواسطة Prometheus.

الخطوة 2: تكوين Prometheus

بمجرد أن يبدأ تطبيقك في كشف المقاييس، تحتاج إلى تكوين Prometheus لجلبها. يتم ذلك عبر ملف التكوين `prometheus.yml`. تحدد "وظائف" (jobs) تشير إلى الأهداف الثابتة (مثيلات تطبيقك) وتحدد فترة الجلب.
global:
  scrape_interval: 15s

evaluation_interval: 15s

scrape_configs:
  - job_name: 'my-application'
    static_configs:
      - targets: ['localhost:8080']
يخبر هذا التكوين Prometheus بجلب المقاييس من `localhost:8080` كل 15 ثانية. في بيئة الإنتاج، ستستخدم عادةً اكتشاف الخدمة (مثل اكتشاف خدمة Kubernetes) للكشف تلقائياً عن المثيلات الجديدة لتطبيقك عند التوسع لأعلى أو لأسفل.

الخطوة 3: كتابة استعلامات فعالة باستخدام PromQL

تكمن القوة الحقيقية لـ Prometheus في لغة الاستعلام الخاصة به، PromQL. على عكس SQL الذي يستعلم عن قواعد البيانات، يستعلم PromQL عن بيانات السلاسل الزمنية. لتصور مقاييسك، عادةً ما تقوم بتوصيل Prometheus بأداة لوحات معلومات مثل Grafana. للحصول على متوسط زمن طلبات واجهة برمجة التطبيقات (API)، قد تستخدم استعلاماً مثل هذا:
rate(http_request_duration_seconds_sum{job="my-application"}[5m]) 
/ 
rate(http_request_duration_seconds_count{job="my-application"}[5m])
يحسب هذا الاستعلام المعدل المتوسط لكل ثانية لزيادة المجموع الكلي لزمن الاستجابة خلال الدقائق الخمس الماضية، مقسوماً على عدد الطلبات، مما يمنحك بشكل فعال متوسط زمن الاستجابة.

الخاتمة

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