مقاييس Prometheus في Go: إنشاء وتصدير المقاييس في Golang

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

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

ابدأ الدورة

مقاييس Prometheus في Go (Golang): دليل كامل



Prometheus هو نظام مراقبة وتنبيه قوي مفتوح المصدر، أصبح المعيار الفعلي في عالم التطبيقات السحابية. بالنسبة للغة Go (Golang)، يوجد عميل رسمي prometheus/client_golang يسمح بإضافة المقاييس بسهولة إلى تطبيقك. في هذه المقالة، سنشرح بالتفصيل كيفية تثبيت المكتبة، وإنشاء أنواع المقاييس الأساسية (counter, gauge, histogram) وتصديرها عبر HTTP.



1. تثبيت المكتبة



للعمل مع Prometheus في Go، يجب تثبيت الحزمة prometheus/client_golang. نفذ الأمر التالي:



go get github.com/prometheus/client_golang/prometheusgo get github.com/prometheus/client_golang/prometheus/promhttp


الحزمة الأولى تحتوي على أنواع المقاييس الأساسية، والثانية تحتوي على معالج HTTP لتصدير المقاييس بتنسيق يفهمه خادم Prometheus.



2. أنواع المقاييس الأساسية



يدعم Prometheus أربعة أنواع رئيسية من المقاييس. سننظر في الثلاثة الأكثر شيوعًا:



  • Counter — عداد يزداد فقط (مثل عدد الطلبات).
  • Gauge — قيمة يمكن أن تزيد وتنقص (مثل عدد الاتصالات النشطة).
  • Histogram — رسم بياني يقيس توزيع القيم (مثل وقت الاستجابة).


3. مثال: Counter (عداد الطلبات)



لنقم بإنشاء خادم HTTP بسيط يحسب عدد الطلبات المعالجة:



package main

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

var ( requestsTotal = prometheus.NewCounter( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, ))

func init() { prometheus.MustRegister(requestsTotal)}

func handler(w http.ResponseWriter, r *http.Request) { requestsTotal.Inc() fmt.Fprintf(w, "Hello, you are visitor #%d", requestsTotal)}

func main() { http.HandleFunc("/", handler) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}


في هذا المثال:

  • prometheus.NewCounter ينشئ عدادًا باسم http_requests_total.
  • prometheus.MustRegister يسجل المقياس في السجل العام.
  • requestsTotal.Inc() يزيد العداد بمقدار 1 مع كل طلب.
  • promhttp.Handler() يصدر جميع المقاييس المسجلة على المسار /metrics.


4. مثال: Gauge (الاتصالات النشطة)



Gauge مثالي لتتبع الحالة الحالية، مثل عدد goroutines النشطة:



var (    activeGoroutines = prometheus.NewGauge(        prometheus.GaugeOpts{            Name: "active_goroutines",            Help: "Current number of active goroutines.",        },    ))

func monitorGoroutines() { for { activeGoroutines.Set(float64(runtime.NumGoroutine())) time.Sleep(5 * time.Second) }}

func main() { prometheus.MustRegister(activeGoroutines) go monitorGoroutines() // ... باقي الكود}


هنا، Set() يحدد القيمة الحالية، بينما Inc() و Dec() يسمحان بزيادة أو تقليل gauge بمقدار واحد.



5. مثال: Histogram (وقت الاستجابة)



Histogram يجمع الملاحظات ويوزعها على شرائح قابلة للتخصيص (buckets):



var (    requestDuration = prometheus.NewHistogram(        prometheus.HistogramOpts{            Name:    "http_request_duration_seconds",            Help:    "Histogram of request durations in seconds.",            Buckets: prometheus.DefBuckets,        },    ))

func measureDuration(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { start := time.Now() next(w, r) requestDuration.Observe(time.Since(start).Seconds()) }}

func main() { prometheus.MustRegister(requestDuration) http.HandleFunc("/", measureDuration(handler)) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}


في هذا المثال، Observe() يسجل مدة الطلب، ويقوم Prometheus تلقائيًا بحساب التوزيع عبر الشرائح المحددة.



6. تصدير المقاييس عبر HTTP



لجعل المقاييس متاحة لخادم Prometheus، أضف المسار /metrics باستخدام promhttp.Handler(). هذا المعالج يقوم تلقائيًا بتجميع جميع المقاييس المسجلة وعرضها بتنسيق نصي. يمكنك التحقق من ذلك بزيارة http://localhost:8080/metrics في المتصفح.



الخلاصة



في هذه المقالة، تعلمنا كيفية إضافة مقاييس Prometheus إلى تطبيق Go باستخدام المكتبة الرسمية prometheus/client_golang. قمنا بتغطية الأنواع الثلاثة الرئيسية: Counter للعدادات، Gauge للقيم المتغيرة، وHistogram للتوزيعات. الآن يمكنك بسهولة مراقبة تطبيقات Golang الخاصة بك باستخدام Prometheus وGrafana.

توصيات