كيفية تثبيت مجموعة مراقبة Prometheus لتجميعة DOKS

مقدمة

المؤسسات التي تعتمد بشكل متزايد على Kubernetes لإدارة حاوياتها بحاجة إلى حل لمراقبة صحة نظامها الموزع. لهذا السبب، تأتي Prometheus – أداة مفتوحة المصدر قوية لمراقبة تطبيقات الحاويات في فضاء K8s الخاص بك.

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

جدول المحتويات

المتطلبات الأساسية

لإكمال هذا البرنامج التعليمي، ستحتاج إلى:

  1. A Git client to clone the Starter Kit repository.
  2. Helm لإدارة إصدارات وترقيات مجموعة Prometheus.
  3. Kubectl للتفاعل مع Kubernetes.
  4. Curl لاختبار الأمثلة (تطبيقات الخلفية).
  5. تطبيق Emojivoto Sample المنشور في العقد. يرجى اتباع الخطوات في دليل مستودعها.

يرجى التأكد من تكوين سياق kubectl للإشارة إلى عقد Kubernetes الخاص بك. راجع الخطوة 3 – إنشاء عقد DOKS من دليل إعداد DOKS.

الخطوة 1 – تثبيت كومة بروميثيوس

في هذه الخطوة، ستقوم بتثبيت كومة kube-prometheus، وهي كومة رصد كاملة لـ Kubernetes تعتمد على الرأي. تتضمن المشغل بروميثيوس، kube-state-metrics، ملفات التجسيم المُبنية مسبقًا، مصدري البيانات للعقد، واجهة برمجة تطبيقات المقاييس، مدير التنبيهات، و Grafana.

ستستخدم مدير حزم Helm لإنجاز هذه المهمة. يتوفر مخطط Helm هنا للدراسة.

أولاً، قم بنسخ مستودع Starter Kit وقم بتغيير الدليل إلى نسختك المحلية.

بعد ذلك، أضف مستودع Helm واستعرض الخرائط المتاحة:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update prometheus-community

helm search repo prometheus-community

الناتج يبدو مشابهًا لما يلي:

NAME                                                    CHART VERSION   APP VERSION     DESCRIPTION
prometheus-community/alertmanager                       0.18.1          v0.23.0         The Alertmanager handles alerts sent by client ...
prometheus-community/kube-prometheus-stack              35.5.1          0.56.3          kube-prometheus-stack collects Kubernetes manif...
...

المخطط ذو الاهتمام هو prometheus-community/kube-prometheus-stack الذي سيقوم بتثبيت بروميثيوس، Promtail، Alertmanager، و Grafana على العقد. يرجى زيارة صفحة kube-prometheus-stack لمزيد من التفاصيل حول هذا المخطط.

ثم، قم بفتح وتفحص الملف 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml الموجود في مستودع Starter Kit باستخدام محرر اختيارك (بشكل أفضل مع دعم لتنسيق YAML). بشكل افتراضي، تكون مقاييس الـkubeSched وetcd معطلة – تتم إدارة هذه المكونات بواسطة DOKS ولا يمكن الوصول إليها من قبل Prometheus. لاحظ أن التخزين مضبوط على emptyDir. يعني ذلك أن الـتخزين سيفقد إذا أعيد تشغيل حاويات Prometheus (سوف تقوم بإصلاح هذا لاحقًا في القسم تكوين التخزين الثابت لـ Prometheus).

[اختياري] إذا قمت باتباع – الخطوة 4 – إضافة عقد مخصص للمراقبة من دليل إعداد مجموعة عقدة Kubernetes المدارة من DigitalOcean، فستحتاج إلى تحرير الملف 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml الموجود في مستودع Starter Kit وإلغاء تعليق أقسام affinity لكل من Grafana و Prometheus.

prometheusSpec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: preferred
                operator: In
                values:
                  - observability
grafana:
  enabled: true
  adminPassword: prom-operator
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: preferred
                operator: In
                values:
                  - observability

شروحات للتكوين أعلاه:

  • preferredDuringSchedulingIgnoredDuringExecution – يحاول المجدول العثور على عقدة تفي بالقاعدة. إذا كانت العقدة المطابقة غير متاحة، فإن المجدول ما زال يجدول الحاوية.
  • preference.matchExpressions – المحدد المستخدم لتطابق عقدة معينة بناءً على معيار ما. يخبر المثال أعلاه المجدول بوضع الأعباء العمل (مثل البودات) على العقد الموسوم باستخدام المفتاح – preferred والقيمة – observability.

أخيرًا ، قم بتثبيت kube-prometheus-stack باستخدام Helm:

HELM_CHART_VERSION="35.5.1"

helm install kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  --create-namespace \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

A specific version of the Helm chart is used. In this case 35.5.1 was picked, which maps to the 0.56.3 version of the application (see output from Step 2.). It’s a good practice to lock on a specific version. This helps to have predictable results and allows versioning control via Git.

–create-namespace \

helm ls -n monitoring

الآن ، تحقق من حالة إصدار Helm للكومة Prometheus:

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
kube-prom-stack monitoring      1               2022-06-07 09:52:53.795003 +0300 EEST   deployed        kube-prometheus-stack-35.5.1    0.56.3

يبدو الإخراج مشابهًا للتالي. لاحظ قيمة عمود STATUS – يجب أن تقول deployed.

kubectl get all -n monitoring

انظر ما هي الموارد المتاحة في Kubernetes لـ Prometheus:

NAME                                                         READY   STATUS    RESTARTS   AGE
pod/alertmanager-kube-prom-stack-kube-prome-alertmanager-0   2/2     Running   0          3m3s
pod/kube-prom-stack-grafana-8457cd64c4-ct5wn                 2/2     Running   0          3m5s
pod/kube-prom-stack-kube-prome-operator-6f8b64b6f-7hkn7      1/1     Running   0          3m5s
pod/kube-prom-stack-kube-state-metrics-5f46fffbc8-mdgfs      1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-gcb8s           1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-kc5wz           1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-qn92d           1/1     Running   0          3m5s
pod/prometheus-kube-prom-stack-kube-prome-prometheus-0       2/2     Running   0          3m3s

NAME                                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/alertmanager-operated                      ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   3m3s
service/kube-prom-stack-grafana                    ClusterIP   10.245.147.83    <none>        80/TCP                       3m5s
service/kube-prom-stack-kube-prome-alertmanager    ClusterIP   10.245.187.117   <none>        9093/TCP                     3m5s
service/kube-prom-stack-kube-prome-operator        ClusterIP   10.245.79.95     <none>        443/TCP                      3m5s
service/kube-prom-stack-kube-prome-prometheus      ClusterIP   10.245.86.189    <none>        9090/TCP                     3m5s
service/kube-prom-stack-kube-state-metrics         ClusterIP   10.245.119.83    <none>        8080/TCP                     3m5s
service/kube-prom-stack-prometheus-node-exporter   ClusterIP   10.245.47.175    <none>        9100/TCP                     3m5s
service/prometheus-operated                        ClusterIP   None             <none>        9090/TCP                     3m3s

NAME                                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/kube-prom-stack-prometheus-node-exporter   3         3         3       3            3           <none>          3m5s

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kube-prom-stack-grafana               1/1     1            1           3m5s
deployment.apps/kube-prom-stack-kube-prome-operator   1/1     1            1           3m5s
deployment.apps/kube-prom-stack-kube-state-metrics    1/1     1            1           3m5s

NAME                                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/kube-prom-stack-grafana-8457cd64c4              1         1         1       3m5s
replicaset.apps/kube-prom-stack-kube-prome-operator-6f8b64b6f   1         1         1       3m5s
replicaset.apps/kube-prom-stack-kube-state-metrics-5f46fffbc8   1         1         1       3m5s

NAME                                                                    READY   AGE
statefulset.apps/alertmanager-kube-prom-stack-kube-prome-alertmanager   1/1     3m3s
statefulset.apps/prometheus-kube-prom-stack-kube-prome-prometheus       1/1     3m3s

يجب أن يتم نشر الموارد التالية: prometheus-node-exporter، kube-prome-operator، kube-prome-alertmanager، kube-prom-stack-grafana، و kube-state-metrics. يبدو الإخراج مشابهًا للتالي:

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

ثم ، يمكنك الاتصال بـ Grafana (باستخدام بيانات الاعتماد الافتراضية: admin/prom-operator – انظر الملف prom-stack-values-v35.5.1) ، عن طريق توجيه البوابة للجهاز المحلي:

يجب عليك عدم تعريض Grafana للشبكة العامة (مثل إنشاء تعيين للدخول أو خدمة LB) باستخدام default login/password.

تأتي تثبيت Grafana مع عدة لوحات تحكم. افتح متصفح ويب على localhost:3000. بمجرد الدخول، يمكنك الانتقال إلى Dashboards -> Browse، واختيار لوحات تحكم مختلفة.

في الجزء التالي، ستكتشف كيفية إعداد Prometheus لاكتشاف الأهداف للمراقبة. كمثال، سيتم استخدام تطبيق العينات Emojivoto. ستتعرف أيضًا على ما هو ServiceMonitor.

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

لقد نفذت بالفعل Prometheus و Grafana في العقدة. في هذه الخطوة، ستتعلم كيفية استخدام ServiceMonitor. يُعتبر ServiceMonitor واحدًا من الطرق المفضلة لإخبار Prometheus كيفية اكتشاف هدف جديد للمراقبة.

إن نشر Emojivoto الذي تم إنشاؤه في الخطوة 5 من قسم الشروط الأساسية يوفر النقطة النهائية /metrics بشكل افتراضي على منفذ 8801 من خلال خدمة Kubernetes.

kubectl get svc -n emojivoto

بعد ذلك، ستكتشف خدمات Emojivoto المسؤولة عن تعريض بيانات القياس ليتم استهلاكها بواسطة Prometheus. الخدمات المعنية تسمى emoji-svc و voting-svc (لاحظ أنها تستخدم مساحة الاسم emojivoto):

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
emoji-svc    ClusterIP   10.245.135.93    <none>        8080/TCP,8801/TCP   22h
voting-svc   ClusterIP   10.245.164.222   <none>        8080/TCP,8801/TCP   22h
web-svc      ClusterIP   10.245.61.229    <none>        80/TCP              22h

يبدو الإخراج مشابهًا للتالي:

kubectl port-forward svc/emoji-svc 8801:8801 -n emojivoto

بعد ذلك، قم بتنفيذ port-forward لفحص القياسات:

curl -s http://localhost:8801/metrics

يمكن تصور البيانات المكشوفة عن طريق التنقل بمتصفح الويب إلى localhost أو عبر استخدام أمر curl:

 يظهر الإخراج مشابه للتالي:
go_gc_duration_seconds{quantile="0"} 5.317e-05
go_gc_duration_seconds{quantile="0.25"} 0.000105305
go_gc_duration_seconds{quantile="0.5"} 0.000138168
go_gc_duration_seconds{quantile="0.75"} 0.000225651
go_gc_duration_seconds{quantile="1"} 0.016986437
go_gc_duration_seconds_sum 0.607979843
go_gc_duration_seconds_count 2097

# TYPE go_gc_duration_seconds summary

لتفحص البيانات المتوفرة لخدمة voting-svc، قم بإيقاف إعادة توجيه منفذ emoji-svc وقم بتنفيذ نفس الخطوات للخدمة الثانية.

  • بعد ذلك، قم بربط Prometheus بخدمة متريات Emojivoto. هناك عدة طرق للقيام بذلك:
  • <static_config> – تسمح بتحديد قائمة من الأهداف ومجموعة علامات مشتركة لها.
  • <kubernetes_sd_config> – تسمح باسترجاع أهداف الحصول على البيانات من واجهة برمجة التطبيقات الرئيسية لـ Kubernetes والبقاء متزامنة دائمًا مع حالة العقدة.

Prometheus Operator – يبسط مراقبة Prometheus داخل عقدة Kubernetes من خلال CRDs.

بعد ذلك، ستستخدم ServiceMonitor CRD المكشوفة بواسطة Prometheus Operator لتعريف هدف جديد للمراقبة.

cd Kubernetes-Starter-Kit-Developers

أولاً، قم بتغيير الدليل (إذا لم يكن مغيرًا بالفعل) حيث تم استنساخ مستودع Starter Kit Git:

additionalServiceMonitors:
  - name: emojivoto-monitor
    selector:
      matchExpressions:
        - key: app
          operator: In
          values:
            - emoji-svc
            - voting-svc
    namespaceSelector:
      matchNames:
        - emojivoto
    endpoints:
      - port: prom

ثم، قم بفتح ملف 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml المقدم في مستودع Starter Kit باستخدام محرر نصوص من اختيارك (يفضل أن يكون مع دعم YAML lint). يرجى إزالة التعليقات المحيطة بقسم additionalServiceMonitors. يبدو الإخراج مشابهاً لما يلي:

  • تفسيرات لتكوين الأعلاف أعلاه:
  • selector -> matchExpressions – يخبر ServiceMonitor أي خدمة يجب مراقبتها. سيستهدف جميع الخدمات التي تحمل مفتاح التصنيف app والقيم emoji-svc و voting-svc. يمكن الحصول على التصنيفات عبر تشغيل: kubectl get svc --show-labels -n emojivoto
  • namespaceSelector – هنا، ترغب في مطابقة النطاق حيث تم نشر Emojivoto.

endpoints -> port – يشير إلى منفذ الخدمة للمراقبة.

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

أخيرًا، قم بتطبيق التغييرات باستخدام Helm:

kubectl port-forward svc/kube-prom-stack-kube-prome-prometheus 9090:9090 -n monitoring

بعد ذلك، يرجى التحقق مما إذا كان الهدف Emojivoto قد تمت إضافته إلى Prometheus للحصول على بيانات المسح. قم بإنشاء توجيه ميناء لـ Prometheus على الميناء 9090:

افتح متصفح ويب على localhost:9090. ثم، انتقل إلى الصفحة Status -> Targets، وافحص النتائج (لاحظ مسار serviceMonitor/monitoring/emojivoto-monitor/0):

هناك 2 إدخالات تحت الأهداف المكتشفة لأن نشر Emojivoto يتكون من 2 خدمة تعرض نقطة البيانات للمقاييس.

في الخطوة التالية، ستكتشف PromQL مع بعض الأمثلة البسيطة، لتبدأ، وتكتشف اللغة.

الخطوة 3 – PromQL (لغة الاستعلام Prometheus)

في هذه الخطوة، ستتعلم أساسيات لغة الاستعلام Prometheus (PromQL). تساعدك PromQL على أداء الاستعلامات عن مقاييس مختلفة تأتي من جميع الـPods والتطبيقات من خادم DOKS الخاص بك.

PromQL هي لغة خاصة بالمجال (DSL) مصممة خصيصًا لـ Prometheus وتسمح لك بالاستعلام عن المقاييس. تحدد التعبير الكلي القيمة النهائية، بينما تمثل التعابير المتداخلة القيم للمعاملات والعمليات. لمزيد من التفسيرات العميقة، يرجى زيارة الصفحة الرسمية لـ PromQL.

بعد ذلك، ستفحص أحد مقاييس Emojivoto، وهو emojivoto_votes_total، الذي يمثل إجمالي عدد الأصوات. إنه قيمة عداد تزداد مع كل طلب ضد نقطة نهاية الأصوات في Emojivoto.

kubectl port-forward svc/kube-prom-stack-kube-prome-prometheus 9090:9090 -n monitoring

أولاً، قم بإنشاء توجيه ميناء (port forward) لـ Prometheus على الميناء 9090:

بعد ذلك، افتح متصفح التعبيرات (expression browser).

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 20
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 17
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":basketball_man:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beach_umbrella:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beer:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 11

في حقل إدخال الاستعلام، ألصق emojivoto_votes_total، واضغط على enter. يبدو الإخراج مشابهًا ل:

انتقل إلى تطبيق Emojivoto ومن الصفحة الرئيسية انقر على الإيموجي 100 للتصويت لصالحه.

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 17
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":basketball_man:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beach_umbrella:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beer:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 11

انتقل إلى صفحة نتائج الاستعلام من الخطوة 3 وانقر على زر تنفيذ. يجب أن ترى العداد للإيموجي 100 يزيد بواحد. يبدو الإخراج مشابهًا للتالي:

emojivoto_votes_total{service="voting-svc"}

يُقسِّم PromQL البيانات المماثلة في ما يُعرف بالفيكتور. كما هو موضح أعلاه، يحتوي كل فيكتور على مجموعة من السمات التي تميزه عن الآخر. يمكنك تجميع النتائج استنادًا إلى سمة معينة تهمك. على سبيل المثال، إذا كنت تهتم فقط بالطلبات الواردة من خدمة voting-svc، فضع من فضلك النص التالي في حقل الاستعلام:

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 492
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 532
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 521

يبدو الإخراج مشابهًا للتالي (لاحظ أنه يختار فقط النتائج التي تطابق معاييرك):

النتيجة أعلاه تُظهر الطلبات الإجمالية لكل Pod من نشرة Emojivoto التي تُطلق البيانات القياسية (التي تتألف من 2).

هذا مجرد مقدمة بسيطة لما يمكن أن يفعله PromQL وما يستطيع عمله. ولكن يمكنه فعل المزيد من ذلك، مثل عد البيانات القياسية، وحساب معدل الزيادة على فترة زمنية محددة مسبقًا، إلخ. يُرجى زيارة الصفحة الرسمية لـ PromQL لمزيد من ميزات اللغة.

في الخطوة التالية، ستتعلم كيفية استخدام Grafana لتصور البيانات القياسية لتطبيق Emojivoto العينة.

الخطوة 4 – تصور المقاييس باستخدام Grafana

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

تم وصف الصفحة الرسمية بأنها قادرة على:

استعلام وتصور وتنبيه وفهم بياناتك بغض النظر عن مكان تخزينها.

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

لا تحتاج إلى خطوات إضافية لتثبيت Grafana لأن الخطوة 1 – تثبيت مجموعة Prometheus قامت بتثبيت Grafana بالنسبة لك. كل ما عليك القيام به هو توجيه منفذ كما يلي، والحصول على الوصول الفوري إلى لوحات القيادة (اعتمادات الافتراضية: admin/prom-monitor):

لرؤية جميع مقاييس Emojivoto، ستستخدم إحدى لوحات القيادة المثبتة افتراضيًا من Grafana.

انتقل إلى قسم لوحات القيادة Grafana.

بعد ذلك، ابحث عن لوحة القيادة عام/كوبرنيتس/موارد الحوسبة/مساحة الأسماء(البودات) وقم بالوصول إليها.

وأخيرًا، حدد مصدر البيانات Prometheus وأضف مساحة الأسماء emojivoto.

يمكنك التلاعب وإضافة مزيد من الألواح في Grafana لتصور مصادر البيانات الأخرى، بالإضافة إلى تجميعها بناءً على النطاق. كما يمكنك استكشاف لوحات القيادة المتاحة لـ Kubernetes من مشروع kube-mixin في Grafana.

في الخطوة التالية، ستقوم بتكوين تخزين دائم لـ Prometheus باستخدام تخزين الكتل الرقمية لـ DigitalOcean للاحتفاظ بمقاييس DOKS والتطبيق عبر إعادة تشغيل الخادم أو فشل العنقود.

الخطوة 5 – تكوين التخزين الدائم لـ Prometheus

في هذه الخطوة، ستتعلم كيفية تمكين التخزين الدائم لـ Prometheus بحيث يتم الاحتفاظ ببيانات المقاييس عبر إعادة تشغيل الخادم، أو في حالة فشل العنقود.

kubectl get storageclass

أولاً، تحتاج إلى فئة تخزين للمتابعة. قم بتشغيل الأمر التالي للتحقق من الفئة المتاحة.

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   4d2h

يجب أن يكون الإخراج مشابهًا للتالي. لاحظ أن تخزين DigitalOcean Block متاح لك للاستخدام.

cd Kubernetes-Starter-Kit-Developers

بعد ذلك، قم بتغيير الدليل (إذا لم يكن بالفعل) حيث تم استنساخ مستودع Git لمجموعة البداية:

prometheusSpec:
  storageSpec:
    volumeClaimTemplate:
      spec:
        storageClassName: do-block-storage
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi

ثم، افتح ملف 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml الموجود في مستودع Starter Kit باستخدام محرر نصوص تفضله (مع دعم تنسيق YAML إذا أمكن). ابحث عن السطر storageSpec، وقم بفك التعليق عن القسم المطلوب لـ Prometheus. يجب أن يبدو تعريف storageSpec كالتالي:

  • شروحات لتكوين أعلاه:
  • volumeClaimTemplate – يعرف PVC جديد.
  • storageClassName – يعرف فئة التخزين (يجب استخدام نفس القيمة كما في نتيجة أمر kubectl get storageclass).

resources – يحدد قيمة طلبات التخزين. في هذه الحالة، يُطلب سعة إجمالية قدرها 5 جيجابايت للحجم الجديد.

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

أخيرًا، قم بتطبيق الإعدادات باستخدام Helm:

kubectl get pvc -n monitoring

بعد الانتهاء من الخطوات أعلاه، تحقق من حالة PVC:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS         MODES              AGE
kube-prome-prometheus-0   Bound    pvc-768d85ff-17e7-4043-9aea-4929df6a35f4   5Gi        RWO            do-block-storage   4d2h

A new Volume should appear in the Volumes web page from your DigitalOcean account panel:

يبدو الإخراج مشابهًا لما يلي. يجب أن يعرض العمود STATUS القيمة Bound.

الخطوة 6 – تكوين التخزين الدائم لـ Grafana

في هذه الخطوة، ستتعلم كيفية تمكين التخزين الدائم لـ Grafana بحيث يتم الاحتفاظ بالرسوم البيانية عبر إعادة تشغيل الخادم أو في حالة فشل العنقود. ستقوم بتحديد مطالبة حجم السعة الدائمة بحجم 5 جيجابايت، باستخدام تخزين DigitalOcean Block. الخطوات التالية هي نفسها كـ الخطوة 5 – تكوين التخزين الدائم لـ Prometheus.

grafana:
  ...
  persistence:
    enabled: true
    storageClassName: do-block-storage
    accessModes: ["ReadWriteOnce"]
    size: 5Gi

أولاً، قم بفتح ملف 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml المقدم في مستودع Starter Kit، باستخدام محرر نصوص من اختيارك (مع دعم YAML lint مفضل). يجب أن يبدو قسم التخزين الدائم لـ Grafana كما يلي:

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
--namespace monitoring \
-f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

بعد ذلك، قم بتطبيق الإعدادات باستخدام Helm:

kubectl get pvc -n monitoring

بعد إكمال الخطوات أعلاه، تحقق من حالة مطالبة السعة الدائمة:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS         MODES              AGE
kube-prom-stack-grafana   Bound    pvc-768d85ff-17e7-4043-9aea-4929df6a35f4   5Gi        RWO            do-block-storage   4d2h

A new Volume should appear in the Volumes web page from your DigitalOcean account panel:

يبدو الإخراج مشابهًا لما يلي. يجب أن يعرض العمود STATUS قيمة Bound.

أفضل الممارسات لتحديد حجم السعة الدائمة

  • لحساب الحجم اللازم للحجم استنادًا إلى احتياجاتك، يرجى اتباع النصائح الرسمية والصيغة في الوثائق الرسمية:
  • تخزن بروميثيوس متوسطًا من 1 إلى 2 بايت فقط لكل عينة. لذلك، يمكنك استخدام الصيغة التقريبية لتخطيط سعة خادم بروميثيوس:
    المساحة_المطلوبة_على_القرص = الوقت_المحتفظ_به_بالثواني * العينات_المدخلة_في_الثانية * بايت_لكل_عينة

لتقليل معدل العينات المدخلة، يمكنك إما تقليل عدد سلاسل الزمن التي تقوم بجمعها (أقل عدد من الأهداف أو أقل عدد من السلاسل لكل هدف)، أو يمكنك زيادة فاصل الجمع. ومع ذلك، من المحتمل أن يكون تقليل عدد السلاسل أكثر فعالية، بسبب ضغط العينات داخل سلسلة.

يرجى اتباع الجزء جوانب التشغيل للمزيد من التفاصيل حول الموضوع.

الاستنتاج

في هذا البرنامج التعليمي، تعلمت كيفية تثبيت وتكوين كومة بروميثيوس، ثم استخدمت جرافانا لتثبيت لوحات معلومات جديدة وتصور مقاييس تطبيقات مجموعة DOKS. كما تعلمت كيفية إجراء استعلامات مقاييس باستخدام PromQL. وأخيرًا، قمت بتكوين وتمكين التخزين الدائم لبروميثيوس لتخزين مقاييس مجموعتك.

إعداد مراقبة مجموعة DOKS باستخدام Helm ومشغل Prometheus

Source:
https://www.digitalocean.com/community/developer-center/how-to-install-prometheus-monitoring-stack-for-doks-cluster