כיצד להתקין חסימת ניטור Prometheus עבור אשף ה־DOKS

הקדמה

ארגונים שמאיצים יותר ויותר את שימושם ב־Kubernetes כדי לנהל את המיכלים שלהם זקוקים לפתרון לניטור בריאות המערכת המבוזרת שלהם. מכאן, נכנסת הפרומתאוס – כלי פתוח ועוצמתי לניטור של אפליקציות מבוזרות במיכלים בסביבת K8s שלך.

במדריך זה, תלמד כיצד להתקין ולהגדיר את מערכת הפרומתאוס כדי לנטר את כל ה־pods מהאשכול שלך של DOKS, כמו גם את המדדי מצב של אשכול Kubernetes. לאחר מכן, תחבר את הפרומתאוס עם גרפאנה כדי להמחיש את כל המדדים ולבצע שאילתות באמצעות שפת PromQL. לבסוף, תגדיר אחסון קבוע עבור מופע הפרומתאוס שלך כדי לשמור על כל נתוני מדדי האשכול והאפליקציה של DOKS שלך.

תוכן עניינים

דרישות מראש

כדי להשלים את המדריך הזה, תצטרכו לקיים:

  1. A Git client to clone the Starter Kit repository.
  2. Helm לניהול שחרורים ושדרוגים של מערכת Prometheus.
  3. Kubectl לאינטראקציה עם Kubernetes.
  4. Curl לבדיקת הדוגמאות (יישומי השרת).
  5. Emojivoto יישום דוגמה הופק באשכול. נא לעקוב אחר השלבים בקובץ README של המאגר שלו.

וודאו שההקשר של kubectl מוגדר לנקודת האשכול שלכם ב-Kubernetes. נא לעיין ב־שלב 3 – יצירת אשכול DOKS ממדריך ההתקנה של DOKS.

שלב 1 – התקנת מערכת המוניטורים של Prometheus

בשלב זה, תתקין את מערכת המוניטורים kube-prometheus, שהיא מערכת מוניטורים מלאה ומסודרת עבור Kubernetes. היא כוללת את המפעיל של Prometheus, kube-state-metrics, קבצי Manifest מובנים, Node Exporters, Metrics API, Alerts Manager ו-Grafana.

תשתמש במנהל החבילות Helm כדי לבצע את המשימה הזו. מדובר בתרשים Helm הזמין כאן ללמידה.

ראשית, העתק את תיק הכלים הראשוני ושנה את התיקייה להעתקה המקומית שלך.

באשף המשך, הוסף את ריפוזיטורי ה-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 שיתקין את Prometheus, Promtail, Alertmanager ו-Grafana על האשף. נא לבקר בדף kube-prometheus-stack לקבלת מידע נוסף אודות התרשים הזה.

אז, פתחו ובדקו את הקובץ 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml המסופק במאגר Starter Kit באמצעות עורך לבחירתכם (מומלץ עם תמיכה ב־YAML lint). כברירת מחדל, מדדי 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 – הסדרן מנסה למצוא צומת שעונה על הכלל. אם אין צומת התואמת זמינה, הסדרן עדיין מתזמן את ה־Pod.
  • 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 של חסכון פרומתאוס:

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 זמינים לפרומתאוס:

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

לאחר מכן, תוכל להתחבר לגרפנה (באמצעות פרטי כניסה ברירתיים: admin/prom-operator – ראה את הקובץ prom-stack-values-v35.5.1), על ידי הפניה של הפורט למכונה המקומית:

אתה לא צריך להסתיר את גרפנה מהרשת הציבורית (לדוגמה, ליצור התאמת כניסה או שירות LB) עם כניסה/סיסמת ברירת מחדל.

התקנת Grafana מגיעה עם מספר לוחות בקרה. פתח דפדפן אינטרנט על localhost:3000. פעם שנמצאים שם, תוכל לעבור אל לוחות בקרה -> עיון, ולבחור לוחות בקרה שונים.

בחלק הבא, תגלה כיצד להגדיר את Prometheus כדי לגלות מטרות לצורך מעקב. כדי לדוגם, ישמש אפליקציית הדוגמה Emojivoto. תלמד מהו ServiceMonitor גם.

שלב 2 – הגדרת Prometheus ו-Grafana

כבר הטמנת את Prometheus ו-Grafana באשכול. בשלב זה, תלמד כיצד להשתמש ב-ServiceMonitor. ServiceMonitor הוא אחד מהדרכים המועדפות להודיע ל-Prometheus כיצד לגלות מטרה חדשה למעקב.

הDP של 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> – מאפשר לקבל מטרות גילוי מ-API ה־REST של Kubernetes ולהישאר תמיד מסונכרן עם מצב האשכול.

הפעלת Prometheus – מקלה על המעקב אחר Prometheus בתוך אשכול Kubernetes דרך CRDs.

לאחר מכן, תשתמש ב־CRD של ServiceMonitor המחושב על ידי הפעלת Prometheus כדי להגדיר מטרה חדשה למעקב.

cd Kubernetes-Starter-Kit-Developers

לפני כן, שנה את התיקייה (אם עדיין לא) שבה הועתק סטרטר קיט של מאגר 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 שסופק במאגר התחלה באמצעות עורך טקסט לבחירתך (מועדף עם תמיכת 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 לצורך גידול. נא ליצור הפניה לפרומתיאוס על פורט 9090:

פתח דפדפן אינטרנט על localhost:9090. לאחר מכן, נא לנווט אל הדף Status -> Targets, ולבדוק את התוצאות (שים לב לנתיב serviceMonitor/monitoring/emojivoto-monitor/0):

קיימים 2 ערכים תחת היעדים שנמצאו מאחר שהפיתוח של Emojivoto כולל שני שירותים שחושפים את נקודת הסיום של הנתונים.

בשלב הבא, תגלה PromQL יחד עם דוגמאות פשוטות, כדי להתחיל ולגלות את השפה.

שלב 3 – PromQL (שפת שאילתות של Prometheus)

בשלב זה, תלמד את היסודות של שפת שאילתות של Prometheus (PromQL). PromQL מסייעת לך לבצע שאילתות על מטריקות שונות הבאות מכל ה-Pods והיישומים מאשר קבוצת ה-DOKS שלך.

‏PromQL היא שפת מסמך (DSL) או שפת מסמך כלשהי המוקדשת במיוחד ל-Prometheus ומאפשרת לך לבצע שאילתות על מטריקות. הביטוי הכללי מגדיר את הערך הסופי, בעוד ביטויים מקוננים מייצגים ערכים עבור ארגומנטים ומפרשי פעולה. לפרטים נוספים, בקר בעמוד הרשמי של PromQL.

הבא, תבחן את אחת מהמטריקות של Emojivoto, בדיוק emojivoto_votes_total, המייצגת את מספר ההצבעות הכולל של כלל הבקשות נגד נקודת הקצה של ההצבעה של Emojivoto. זו ערך מונה המתרם עם כל בקשה לנקודת הקצה של ההצבעה של Emojivoto.

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

ראשית, צור העברה עבור Prometheus בפורט 9090:

הבא, פתח את מעקב הביטויים.

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 התקין אותה עבורך. כל שעליך לעשות הוא פורוארד כמו בקוד הבא, ולקבל גישה מיידית ללוחות המחוונים (פרטי כניסה ברירת מחדל: admin/prom-monitor):

כדי לראות את כל המדדים של Emojivoto, תשתמש באחד מלוחות המחוונים המותקנים כברירת מחדל מ-Grafana.

נווט אל חלק לוחות המחוונים של Grafana.

באחריות, חפש את לוח המחוונים כללי/קוברנטיס/משאבי חישוב/שם המרחב המשני (קפצי) וגש אליו.

לבסוף, בחר במקור הנתונים של Prometheus והוסף את מרחב השמות emojivoto.

ניתן לשחק ולהוסיף פאנלים נוספים ב-Grafana להצגת מקורות נתונים נוספים, וכן לקבץ אותם על פי היקף. בנוסף, ניתן לחקור את לוחות המחוונים הזמינים עבור Kubernetes מפרויקט kube-mixin ב-Grafana.

בשלב הבא, תכנן אחסון קבוע עבור Prometheus באמצעות אחסון גבוה ב-DigitalOcean כדי לשמור על הנתונים של DOKS והיישומים שלך במהלך הפעלות מחדש של השרת או כשישנם כשלים באשכול.

שלב 5 – הגדרת אחסון קבוע עבור Prometheus

בשלב זה, תלמד כיצד להפעיל אחסון קבוע עבור Prometheus כך שנתוני המטריקות יישמרו מעבר לאיפוסים של השרת, או במקרה של כשלים באשכול.

kubectl get storageclass

ראשית, עליך לקבוע storage class כדי להמשיך. הרץ את הפקודה הבאה כדי לבדוק איזה סוגי אחסון זמינים.

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 של Starter Kit:

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 המסופק במאגר הקוד של קיט ההתחלה באמצעות עורך טקסט לבחירתכם (מומלץ עם תמיכת YAML lint). חפשו את השורה storageSpec ובטלו את ההערה בחלק הנדרש לפרומיתיאוס. הגדרת storageSpec צריכה להיראות כך:

  • הסברים להגדרה לעיל:
  • volumeClaimTemplate – מגדיר PVC חדש.
  • storageClassName – מגדיר את storage class (עליכם להשתמש באותה ערך שניתן מפלט הפקודה 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 ג'יגה (PVC), באמצעות אחסון בלוק של DigitalOcean. השלבים הבאים זהים ל שלב 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

לאחר השלמת השלבים הנ"ל, בדוק את מצב ה-PVC:

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.

תרגולים מומלצים לגודל של ה- PV

  • כדי לחשב את הגודל הדרוש לנפח על פי הצרכים שלך, יש לעקוב אחר ההנחיות הרשמיות והנוסחא:
  • הפרומתיאוס מאחסן ממוצע של רק 1-2 בתים לדוגמה. לכן, כדי לתכנן את קיבולת שרת פרומתיאוס, ניתן להשתמש בנוסחה הערומה:
    נדרשת_קיבולת_דיסק = זמן_שמירה_בשניות * דוגמאות_מוכנסות_לשנייה * בתים_לדוגמה

כדי להוריד את קצב הדוגמאות שמוכנסות, ניתן להפחית את מספר סדרות הזמן שמנותבות (פחות יעדים או פחות סדרות לכל יעד), או להגדיל את המרווח בין הניתובים. עם זאת, הפחתת מספר הסדרות כנראה תהיה יעילה יותר, עקב דחיסת הדוגמאות בתוך סדרה.

נא לעקוב אחרי החלק "נושאים אופרטיביים" לפרטים נוספים בנושא.

מסקנה

במדריך זה, למדת איך להתקין ולהגדיר את חפיסת הכלים של פרומתיאוס, ואז השתמשת ב-Grafana כדי להתקין לוחות בקרה חדשים ולהציג את המדדים של אפליקציות האשפקה של קבוצת DOKS. למדת גם כיצד לבצע שאילתות מדד באמצעות PromQL. לבסוף, הגדרת והפעלת אחסון עמיד עבור פרומתיאוס כדי לאחסן את מדדי הקבוצה שלך.

הגדרת מעקב על אשף קראסטר ב־DOKS עם Helm ו־מפעיל Prometheus

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