دليل prometheus/client_golang في Go: أمثلة واستخدام

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

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

ابدأ الدورة

prometheus/client_golang في Go: دليل شامل

1. ما هي المكتبة ولماذا تحتاجها

مكتبة prometheus/client_golang هي العميل الرسمي لنظام المراقبة Prometheus، والمكتوب بلغة Go. توفر للمطورين أدوات قوية ومرنة لجمع وتجميع وتصدير المقاييس (Metrics) من تطبيقات Go. يُعتبر Prometheus أحد أشهر أنظمة جمع المقاييس والمراقبة في عالم DevOps والتقنيات السحابية، خاصةً في بيئة Kubernetes.

لماذا تحتاجها؟ في بنية الخدمات المصغرة الحديثة، من الضروري فهم كيفية عمل تطبيقك: عدد الطلبات التي يعالجها، زمن الاستجابة، استهلاك الذاكرة، وعدد مرات حدوث الأخطاء. تتيح لك prometheus/client_golang إضافة هذه المقاييس بسهولة إلى كودك. توفر المكتبة نقطة نهاية (عادةً /metrics) يمكن لـ Prometheus استقصاءها (Scrape) بشكل دوري. هذا يمكنك من إنشاء لوحات بيانات في Grafana، وإعداد التنبيهات، والحصول على صورة كاملة عن صحة خدمتك.

تشمل الإمكانيات الرئيسية للمكتبة دعم أربعة أنواع أساسية من مقاييس Prometheus: Counter (عداد يزداد فقط)، Gauge (مقياس يمكن أن يزداد أو ينقص)، Histogram (مدرج تكراري لقياس توزيع القيم، مثل زمن الاستجابة)، و Summary (مشابه للمدرج التكراري لكنه يحسب الشرائح المئوية من جهة العميل). بالإضافة إلى ذلك، توفر المكتبة "مجمعات" (Collectors) مريحة للمقاييس القياسية في Go (الذاكرة، الـ Goroutines، جامع القمامة) وخادم HTTP.

2. التثبيت

يتم تثبيت المكتبة باستخدام الأمر القياسي go get. تأكد من أن لديك Go الإصدار 1.16 أو أحدث (يُفضل استخدام أحدث إصدار مستقر).

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

بعد تنفيذ هذه الأوامر، سيظهر الاعتماد في ملف go.mod. تحتوي الحزمة prometheus على جوهر المكتبة (أنواع المقاييس، التسجيل)، بينما توفر promhttp معالج HTTP لتصدير المقاييس.

3. البداية السريعة — مثال عملي بسيط

لننشئ تطبيقًا بسيطًا يقوم بتصدير مقياس واحد — عدد طلبات HTTP التي تمت معالجتها.

package main

import (
    "fmt"
    "net/http"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    // تعريف عداد الطلبات مع وسم "path"
    requestsTotal = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "إجمالي عدد طلبات HTTP.",
        },
        []string{"path"},
    )
)

func init() {
    // تسجيل المقياس في السجل العام
    prometheus.MustRegister(requestsTotal)
}

func main() {
    // معالج المسار الرئيسي
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // زيادة العداد للمسار "/"
        requestsTotal.WithLabelValues("/").Inc()
        fmt.Fprintf(w, "مرحباً بالعالم!")
    })

    // معالج نقطة نهاية مقاييس Prometheus
    http.Handle("/metrics", promhttp.Handler())

    fmt.Println("تم بدء الخادم على المنفذ :8080")
    http.ListenAndServe(":8080", nil)
}

قم بتشغيل هذا الكود (go run main.go)، ثم افتح في المتصفح http://localhost:8080/metrics. سترى العديد من المقاييس، بما في ذلك المقياس الخاص بنا http_requests_total. في كل مرة تزور فيها http://localhost:8080/، ستزداد قيمة العداد.

4. أهم الدوال والطرق

4.1. prometheus.NewCounter / prometheus.NewCounterVec

توصيات