Wie man den Prometheus Monitoring Stack für den DOKS-Cluster installiert

Einführung

Organisationen, die zunehmend Kubernetes zur Verwaltung ihrer Container einsetzen, benötigen eine Lösung zur Überwachung der Gesundheit ihres verteilten Systems. Aus diesem Grund kommt Prometheus ins Spiel – ein leistungsstarkes Open-Source-Tool zur Überwachung containerisierter Anwendungen in Ihrem K8s-Bereich.

In diesem Tutorial erfahren Sie, wie Sie den Prometheus-Stack installieren und konfigurieren, um alle Pods Ihres DOKS-Clusters sowie Metriken zum Zustand des Kubernetes-Clusters zu überwachen. Anschließend verbinden Sie Prometheus mit Grafana, um alle Metriken zu visualisieren und Abfragen mithilfe der PromQL-Sprache durchzuführen. Schließlich konfigurieren Sie persistenten Speicher für Ihre Prometheus-Instanz, um alle Daten zu Metriken Ihres DOKS-Clusters und Ihrer Anwendungen zu speichern.

Inhaltsverzeichnis

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

  1. A Git client to clone the Starter Kit repository.
  2. Helm zur Verwaltung von Prometheus-Stack-Veröffentlichungen und Upgrades.
  3. Kubectl für die Interaktion mit Kubernetes.
  4. Curl zum Testen der Beispiele (Backend-Anwendungen).
  5. Emojivoto-Beispielanwendung im Cluster bereitgestellt. Bitte folgen Sie den Schritten in der README-Datei ihres Repositorys.

Stellen Sie sicher, dass der kubectl-Kontext so konfiguriert ist, dass er auf Ihren Kubernetes-Cluster zeigt. Siehe Schritt 3 – Erstellen des DOKS-Clusters im DOKS-Setup-Tutorial.

Schritt 1 – Installation des Prometheus-Stacks

In diesem Schritt installieren Sie den kube-prometheus-Stack, der ein vorgefertigter vollständiger Überwachungsstack für Kubernetes ist. Er umfasst den Prometheus Operator, kube-state-metrics, vordefinierte Manifeste, Node Exporters, Metrics API, Alerts Manager und Grafana.

Sie werden den Helm-Paketmanager verwenden, um diese Aufgabe zu erledigen. Das Helm-Chart ist hier zur Ansicht verfügbar.

Zunächst klonen Sie das Starter Kit-Repository und wechseln in das Verzeichnis Ihrer lokalen Kopie.

Anschließend fügen Sie das Helm-Repository hinzu und listen die verfügbaren Charts auf:

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

helm repo update prometheus-community

helm search repo prometheus-community

Die Ausgabe ähnelt dem folgenden:

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...
...

Das relevante Chart ist prometheus-community/kube-prometheus-stack, das Prometheus, Promtail, Alertmanager und Grafana im Cluster installiert. Bitte besuchen Sie die Seite des kube-prometheus-stack für weitere Details zu diesem Chart.

Dann öffnen und überprüfen Sie die Datei 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml im Starter Kit-Repository mit einem Editor Ihrer Wahl (vorzugsweise mit YAML-Lint-Unterstützung). Standardmäßig sind kubeSched und etcd Metriken deaktiviert – diese Komponenten werden von DOKS verwaltet und sind für Prometheus nicht zugänglich. Beachten Sie, dass der Speicher auf emptyDir gesetzt ist. Das bedeutet, dass der Speicher verloren geht, wenn Prometheus-Pods neu gestartet werden (dies wird später im Abschnitt Konfigurieren des persistenten Speichers für Prometheus behoben werden).

[OPTIONAL] Wenn Sie – Schritt 4 – Hinzufügen eines dedizierten Knotens für Observability des Leitfadens für die Einrichtung eines verwalteten Kubernetes-Clusters von DigitalOcean befolgt haben, müssen Sie die Datei 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml im Starter Kit-Repository bearbeiten und die Affinitäts-Abschnitte sowohl für Grafana als auch für Prometheus auskommentieren.

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

Erklärungen für die obige Konfiguration:

  • preferredDuringSchedulingIgnoredDuringExecution – Der Scheduler versucht, einen Knoten zu finden, der der Regel entspricht. Wenn kein passender Knoten verfügbar ist, plant der Scheduler den Pod trotzdem.
  • – Selektor, der verwendet wird, um einen bestimmten Knoten basierend auf einem Kriterium abzugleichen. Das obige Beispiel gibt dem Scheduler an, Arbeitslasten (z. B. Pods) auf Knoten zu platzieren, die mit dem Schlüssel preferred und dem Wert observability gekennzeichnet sind.

Zuletzt installieren Sie das kube-prometheus-stack mithilfe von 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

Überprüfen Sie nun den Status der Prometheus-Stack-Helmveröffentlichung:

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

Die Ausgabe sieht ähnlich wie folgt aus. Beachten Sie den Wert in der Spalte STATUS – es sollte deployed sein.

kubectl get all -n monitoring

Sehen Sie sich an, welche Kubernetes-Ressourcen für Prometheus verfügbar sind:

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

Sie sollten die folgenden Ressourcen bereitgestellt haben: prometheus-node-exporter, kube-prome-operator, kube-prome-alertmanager, kube-prom-stack-grafana und kube-state-metrics. Die Ausgabe sieht ähnlich wie folgt aus:

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

Dann können Sie eine Verbindung zu Grafana herstellen (unter Verwendung der Standardanmeldeinformationen: admin/prom-operator – siehe Datei prom-stack-values-v35.5.1), indem Sie eine Portweiterleitung zum lokalen Rechner durchführen:

Sie sollten NIEMALS Grafana im öffentlichen Netzwerk freigeben (z. B. durch Erstellen einer Ingress-Mapping- oder LB-Servicezuordnung) mit Standard-Anmeldeinformationen.

Die Installation von Grafana wird mit mehreren Dashboards geliefert. Öffnen Sie einen Webbrowser unter localhost:3000. Sobald Sie drin sind, können Sie zu Dashboards -> Durchsuchen gehen und verschiedene Dashboards auswählen.

Im nächsten Teil erfahren Sie, wie Sie Prometheus einrichten, um Ziele für die Überwachung zu entdecken. Als Beispiel wird die Musteranwendung Emojivoto verwendet. Sie werden auch erfahren, was ein ServiceMonitor ist.

Schritt 2 – Konfigurieren von Prometheus und Grafana

Sie haben bereits Prometheus und Grafana in den Cluster bereitgestellt. In diesem Schritt lernen Sie, wie Sie einen ServiceMonitor verwenden. Ein ServiceMonitor ist eine der bevorzugten Möglichkeiten, Prometheus mitzuteilen, wie ein neues Ziel für die Überwachung entdeckt werden kann.

Die im Schritt 5 des Voraussetzungen Abschnitts erstellte Emojivoto-Bereitstellung bietet standardmäßig den /metrics-Endpunkt auf Port 8801 über einen Kubernetes-Dienst an.

kubectl get svc -n emojivoto

Als nächstes entdecken Sie die Emojivoto-Dienste, die für das Bereitstellen von Metrikdaten verantwortlich sind, die Prometheus verbrauchen kann. Die betreffenden Dienste werden emoji-svc und voting-svc genannt (beachten Sie, dass sie den emojivoto-Namespace verwenden):

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

Die Ausgabe sieht ähnlich wie folgt aus:

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

Führen Sie anschließend einen port-forward durch, um die Metriken zu inspizieren:

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

Die freigelegten Metriken können visualisiert werden, indem Sie mit einem Webbrowser zu localhost navigieren oder über curl:

Die Ausgabe sieht ähnlich wie folgt aus:
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

Um die Metriken für den Dienst voting-svc zu inspizieren, beenden Sie die Weiterleitung des Ports für emoji-svc und führen Sie dieselben Schritte für den zweiten Dienst aus.

  • Anschließend verbinden Sie Prometheus mit dem Emojivoto-Metrikservice. Es gibt mehrere Möglichkeiten, dies zu tun:
  • <static_config> – ermöglicht das Festlegen einer Liste von Zielen und eines gemeinsamen Label-Sets für sie.
  • <kubernetes_sd_config> – ermöglicht das Abrufen von Abstreifzielen aus der Kubernetes-REST-API und bleibt immer synchron mit dem Clusterstatus.

Prometheus Operator – vereinfacht das Prometheus-Monitoring innerhalb eines Kubernetes-Clusters über CRDs.

Anschließend verwenden Sie den von Prometheus Operator freigelegten ServiceMonitor-CRD, um ein neues Ziel für das Monitoring zu definieren.

cd Kubernetes-Starter-Kit-Developers

Zuerst ändern Sie das Verzeichnis (falls noch nicht geschehen), in dem das Starter Kit Git-Repository geklont wurde:

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

Als nächstes öffnen Sie die Datei 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml im Starter-Kit-Repository mit einem Texteditor Ihrer Wahl (vorzugsweise mit YAML-Lint-Unterstützung). Entfernen Sie bitte die Kommentare um den Abschnitt additionalServiceMonitors. Die Ausgabe sieht ähnlich aus:

  • Erklärungen für die obige Konfiguration:
  • selector -> matchExpressions – gibt ServiceMonitor an, welchen Dienst zu überwachen ist. Es zielt auf alle Dienste mit dem Label-Schlüssel „app“ und den Werten emoji-svc und voting-svc ab. Die Labels können abgerufen werden, indem Sie ausführen: kubectl get svc --show-labels -n emojivoto
  • namespaceSelector – hier möchten Sie den Namespace abgleichen, in dem Emojivoto bereitgestellt wurde.

endpoints -> port – verweist auf den Port des zu überwachenden Dienstes.

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"

Zuletzt wenden Sie die Änderungen mit Helm an:

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

Als nächstes überprüfen Sie bitte, ob das Emojivoto-Ziel zum Scrapen in Prometheus hinzugefügt wurde. Erstellen Sie eine Portweiterleitung für Prometheus auf Port 9090:

Öffnen Sie einen Webbrowser auf localhost:9090. Navigieren Sie dann zur Seite Status -> Targets und inspizieren Sie die Ergebnisse (beachten Sie den Pfad serviceMonitor/monitoring/emojivoto-monitor/0):

Es gibt 2 Einträge unter den entdeckten Zielen, weil das Emojivoto-Deployment aus 2 Diensten besteht, die den Metrik-Endpunkt freigeben.

Im nächsten Schritt lernen Sie PromQL zusammen mit einigen einfachen Beispielen kennen, um Sie zu starten und die Sprache zu entdecken.

Schritt 3 – PromQL (Prometheus Query Language)

In diesem Schritt lernen Sie die Grundlagen der Prometheus Query Language (PromQL) kennen. PromQL hilft Ihnen dabei, Abfragen zu verschiedenen Metriken aus allen Pods und Anwendungen Ihres DOKS-Clusters durchzuführen.

PromQL ist eine DSL oder Domänenspezifische Sprache, die speziell für Prometheus entwickelt wurde und es Ihnen ermöglicht, nach Metriken zu suchen. Der Gesamtausdruck definiert den endgültigen Wert, während verschachtelte Ausdrücke Werte für Argumente und Operanden darstellen. Für weiterführende Erklärungen besuchen Sie bitte die offizielle PromQL-Seite.

Als nächstes werden Sie eine der Metriken von Emojivoto untersuchen, nämlich emojivoto_votes_total, die die Gesamtzahl der Stimmen repräsentiert. Es handelt sich um einen Zählerwert, der mit jeder Anfrage gegen den Emojivoto-Stimm-Endpunkt zunimmt.

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

Erstellen Sie zunächst eine Portweiterleitung für Prometheus auf Port 9090:

Öffnen Sie als nächstes den Ausdrucksbrowser.

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

Im Abfrageeingabefeld fügen Sie emojivoto_votes_total ein und drücken Sie die Eingabetaste. Die Ausgabe sieht ähnlich aus:

Navigieren Sie zur Emojivoto-Anwendung und klicken Sie auf der Homepage auf das 100-Emoji, um dafür zu stimmen.

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

Navigieren Sie von der Abfrageergebnisseite aus Schritt 3 und klicken Sie auf die Schaltfläche Ausführen. Sie sollten sehen, dass der Zähler für das 100-Emoji um eins erhöht wird. Die Ausgabe sieht ähnlich aus:

emojivoto_votes_total{service="voting-svc"}

PromQL gruppiert ähnliche Daten in dem, was als Vektor bezeichnet wird. Wie oben zu sehen ist, hat jeder Vektor eine Reihe von Attributen, die ihn voneinander unterscheiden. Sie können Ergebnisse basierend auf einem interessierenden Attribut gruppieren. Wenn Sie beispielsweise nur an Anfragen interessiert sind, die vom Dienst voting-svc stammen, geben Sie bitte Folgendes im Abfragefeld ein:

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

Die Ausgabe sieht ähnlich aus (beachten Sie, dass nur die Ergebnisse ausgewählt werden, die Ihren Kriterien entsprechen):

Das obige Ergebnis zeigt die Gesamtanzahl der Anfragen für jeden Pod aus der Bereitstellung von Emojivoto, die Metriken emittiert (bestehend aus 2).

Dies ist nur eine sehr einfache Einführung in das, was PromQL ist und was es kann. Aber es kann viel mehr als das, wie zum Beispiel Metriken zählen, die Rate über ein vordefiniertes Intervall berechnen, etc. Bitte besuchen Sie die offizielle PromQL-Seite für weitere Funktionen der Sprache.

Im nächsten Schritt lernen Sie, wie Sie Grafana verwenden, um Metriken für die Beispielanwendung Emojivoto zu visualisieren.

Schritt 4 – Visualisierung von Metriken mit Grafana

Obwohl Prometheus einige eingebaute Unterstützung zur Visualisierung von Daten bietet, ist es besser, dies über Grafana zu tun, das eine Open-Source-Plattform für Überwachung und Observabilität ist, mit der Sie den Zustand Ihres Clusters visualisieren und erkunden können.

Die offizielle Seite beschreibt, dass Sie Folgendes können:

Daten abfragen, visualisieren, Alarme auslösen und verstehen, egal wo sie gespeichert sind.

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

Es sind keine zusätzlichen Schritte erforderlich, um Grafana zu installieren, da Schritt 1 – Die Prometheus-Stack-Installation Grafana für Sie installiert hat. Alles, was Sie tun müssen, ist ein Port-Forward wie unten gezeigt, und Sie haben sofortigen Zugriff auf die Dashboards (Standardanmeldeinformationen: admin/prom-monitor):

Um alle Emojivoto-Metriken zu sehen, werden Sie eines der standardmäßig installierten Dashboards von Grafana verwenden.

Navigieren Sie zum Abschnitt Grafana-Dashboards.

Suchen Sie dann nach dem Dashboard Allgemein/Kubernetes/Compute-Ressourcen/Namespace(Pods) und greifen Sie darauf zu.

Wählen Sie schließlich die Prometheus-Datenquelle aus und fügen Sie den Namespace emojivoto hinzu.

Sie können herumspielen und weitere Panels in Grafana hinzufügen, um andere Datenquellen zu visualisieren, und sie auch nach Umfang gruppieren. Außerdem können Sie die verfügbaren Dashboards für Kubernetes aus dem Grafana kube-mixin-Projekt erkunden.

Im nächsten Schritt konfigurieren Sie persistenten Speicher für Prometheus mit Hilfe von DigitalOcean-Blockspeicher, um Ihre DOKS- und Anwendungsdaten über Serverneustarts oder Clusterfehler hinweg zu speichern.

Schritt 5 – Konfigurieren von Persistentem Speicher für Prometheus

In diesem Schritt erfahren Sie, wie Sie persistenten Speicher für Prometheus aktivieren, sodass Metriken über Serverneustarts hinweg gespeichert werden oder im Falle von Clusterfehlern.

kubectl get storageclass

Zuerst benötigen Sie eine Speicherklasse, um fortzufahren. Führen Sie den folgenden Befehl aus, um zu überprüfen, welche verfügbar ist.

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

Die Ausgabe sollte ähnlich aussehen wie folgt. Beachten Sie, dass DigitalOcean Block Storage für Sie verfügbar ist.

cd Kubernetes-Starter-Kit-Developers

Wechseln Sie anschließend (falls noch nicht geschehen) in das Verzeichnis, in dem das Git-Repository des Starter Kits geklont wurde:

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

Dann öffnen Sie die Datei 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml im Starter Kit-Repository mit einem Texteditor Ihrer Wahl (vorzugsweise mit YAML-Lint-Unterstützung). Suchen Sie die Zeile storageSpec und kommentieren Sie den erforderlichen Abschnitt für Prometheus aus. Die Definition von storageSpec sollte wie folgt aussehen:

  • Erklärungen für die obige Konfiguration:
  • volumeClaimTemplate – definiert eine neue PVC.
  • storageClassName – definiert die Speicherklassen (sollte denselben Wert wie aus der Ausgabe des Befehls kubectl get storageclass verwenden).

resources – legt den Speicheranforderungswert fest. In diesem Fall wird eine Gesamtkapazität von 5 Gi für das neue Volume angefordert.

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"

Abschließend wenden Sie die Einstellungen mit Helm an:

kubectl get pvc -n monitoring

Nach Abschluss der oben genannten Schritte überprüfen Sie den PVC-Status:

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:

Die Ausgabe sieht ähnlich aus wie folgt. Die Spalte STATUS sollte Bound anzeigen.

Schritt 6 – Konfigurieren des persistenten Speichers für Grafana

In diesem Schritt lernen Sie, wie Sie eine persistente Speicherung für Grafana aktivieren, damit die Diagramme über Serverneustarts hinweg oder im Falle von Clusterfehlern bestehen bleiben. Sie werden eine Persistent Volume Claim (PVC) von 5 Gi definieren, indem Sie den DigitalOcean Block Storage verwenden. Die nächsten Schritte sind dieselben wie Schritt 5 – Konfigurieren der Persistenten Speicherung für Prometheus.

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

Zuerst öffnen Sie die Datei 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml, die im Starter Kit-Repository bereitgestellt wird, mit einem Texteditor Ihrer Wahl (vorzugsweise mit YAML-Lint-Unterstützung). Der Abschnitt zur Persistenzspeicherung für Grafana sollte wie folgt aussehen:

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"

Als nächstes wenden Sie die Einstellungen mit Helm an:

kubectl get pvc -n monitoring

Nach Abschluss der oben genannten Schritte überprüfen Sie den Status des 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:

Die Ausgabe ähnelt dem folgenden. Die Spalte STATUS sollte Bound anzeigen.

Best Practices für PV-Größen

  • Um die benötigte Größe für das Volume gemäß Ihren Anforderungen zu berechnen, folgen Sie bitte den Ratschlägen und der Formel in der offiziellen Dokumentation:
  • Prometheus speichert durchschnittlich nur 1-2 Bytes pro Stichprobe. Um daher die Kapazität eines Prometheus-Servers zu planen, können Sie die grobe Formel verwenden:
    benötigter_festplattenspeicher = aufbewahrungszeit_in_sekunden * eingelesene_stichproben_pro_sekunde * bytes_pro_stichprobe

Um die Rate der eingelesenen Stichproben zu senken, können Sie entweder die Anzahl der Zeitreihen reduzieren, die Sie abfragen (weniger Ziele oder weniger Zeitreihen pro Ziel), oder Sie können das Abrufintervall erhöhen. Die Reduzierung der Anzahl der Zeitreihen ist jedoch wahrscheinlich effektiver, aufgrund der Kompression von Stichproben innerhalb einer Zeitreihe.

Bitte beachten Sie den Abschnitt Operationale Aspekte für weitere Details zum Thema.

Abschluss

In diesem Tutorial haben Sie gelernt, wie Sie den Prometheus-Stack installieren und konfigurieren, dann Grafana verwenden, um neue Dashboards zu installieren und Metriken der DOKS-Clusteranwendung zu visualisieren. Sie haben auch gelernt, wie Sie Metrikabfragen mit PromQL durchführen. Schließlich haben Sie die Konfiguration und Aktivierung der persistenten Speicherung für Prometheus vorgenommen, um Ihre Clustermetriken zu speichern.

Einrichten der Überwachung eines DOKS-Clusters mit Helm und Prometheus Operator

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