Hoe Prometheus Monitoring Stapel te Installeren voor DOKS Cluster

Introductie

Organisaties die steeds vaker Kubernetes aannemen om hun containers te beheren, hebben een oplossing nodig om de gezondheid van hun gedistribueerde systeem te controleren. Om deze reden kom je bij Prometheus – een krachtige open-source tool om containerized applicaties te monitoren in je K8s-omgeving.

In deze zelfstudie leer je hoe je de Prometheus-stack installeert en configureert om alle pods van je DOKS-cluster te monitoren, evenals metrische gegevens van de Kubernetes-clusterstatus. Vervolgens verbind je Prometheus met Grafana om alle metingen te visualiseren en query’s uit te voeren met behulp van de PromQL-taal. Ten slotte configureer je persistente opslag voor je Prometheus-instantie om al je DOKS-cluster- en applicatiemetrieken op te slaan.

Inhoudsopgave

Vereisten

Om deze handleiding te voltooien, heb je nodig:

  1. A Git client to clone the Starter Kit repository.
  2. Helm voor het beheren van Prometheus stack-releases en upgrades.
  3. Kubectl voor interactie met Kubernetes.
  4. Curl voor het testen van de voorbeelden (back-endapplicaties).
  5. Emojivoto Voorbeeldapp ingezet in de cluster. Volg de stappen in het README-bestand van de repository.

Zorg ervoor dat het kubectl-context is geconfigureerd om naar uw Kubernetes-cluster te wijzen. Raadpleeg Stap 3 – Het DOKS-cluster maken uit de DOKS-installatiehandleiding.

Stap 1 – Het installeren van de Prometheus Stack

In deze stap installeert u de kube-prometheus-stack, die een opiniated volledige monitoring stack voor Kubernetes is. Het bevat de Prometheus Operator, kube-state-metrics, vooraf gebouwde manifesten, Node Exporters, Metrics API, Alerts Manager en Grafana.

U gaat de Helm-pakketbeheerder gebruiken om deze taak uit te voeren. Het Helm-chart is beschikbaar hier voor studie.

Eerst kloont u de Starter Kit-repository en wijzigt u de directory naar uw lokale kopie.

Vervolgens voegt u het Helm-repository toe en geeft u de beschikbare charts weer:

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

helm repo update prometheus-community

helm search repo prometheus-community

De output ziet er vergelijkbaar uit als volgt:

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

Het interessante chart is prometheus-community/kube-prometheus-stack dat Prometheus, Promtail, Alertmanager en Grafana op het cluster zal installeren. Bezoek alstublieft de kube-prometheus-stack-pagina voor meer details over dit chart.

Vervolgens opent en inspecteert u het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml dat wordt verstrekt in de Starter Kit-repository met een editor naar keuze (bij voorkeur met YAML-lintondersteuning). Standaard zijn de metrieken van kubeSched en etcd uitgeschakeld – deze componenten worden beheerd door DOKS en zijn niet toegankelijk voor Prometheus. Merk op dat de opslag is ingesteld op emptyDir. Dit betekent dat de opslag verloren gaat als de Prometheus-pods opnieuw worden gestart (dit wordt later opgelost in de Configuratie van Persistent Storage voor Prometheus-sectie).

[OPTIONEEL] Als u Stap 4 – Het toevoegen van een toegewijde node voor observability hebt gevolgd van de gids voor het opzetten van een door DigitalOcean beheerde Kubernetes-cluster, moet u het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml in de Starter Kit-repository bewerken en de affinity-secties voor zowel Grafana als Prometheus uitcommentariëren.

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

Uitleg voor de bovenstaande configuratie:

  • preferredDuringSchedulingIgnoredDuringExecution – de planner probeert een node te vinden die aan de regel voldoet. Als er geen overeenkomstige node beschikbaar is, plant de planner de pod toch in.
  • voorkeur.matchExpressies – selector gebruikt om een specifieke node te matchen op basis van een criterium. Het bovenstaande voorbeeld vertelt de planner om workloads (bijv. Pods) op nodes te plaatsen die zijn gelabeld met sleutel – voorkeur en waarde – observability.

Tenslotte, installeer de kube-prometheus-stack, gebruikmakend van 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

Controleer nu de status van de Prometheus stack Helm release:

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

De output ziet er vergelijkbaar uit als volgt. Let op de waarde van de kolom STATUS – deze moet uitgevoerd zeggen.

kubectl get all -n monitoring

Zie welke Kubernetes resources beschikbaar zijn voor 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

Je zou de volgende resources moeten hebben ingezet: prometheus-node-exporter, kube-prome-operator, kube-prome-alertmanager, kube-prom-stack-grafana, en kube-state-metrics. De output ziet er vergelijkbaar uit als volgt:

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

Vervolgens kun je verbinding maken met Grafana (gebruikmakend van standaard referenties: admin/prom-operator – zie prom-stack-values-v35.5.1 bestand), door door te sturen naar de lokale machine:

Je zou NIET Grafana moeten blootstellen aan het openbare netwerk (bijv. maak geen ingangsmapping of LB-service) met standaard aanmeldgegevens.

De installatie van Grafana wordt geleverd met verschillende dashboards. Open een webbrowser op localhost:3000. Eenmaal binnen, kunt u naar Dashboard -> Bladeren gaan en verschillende dashboards kiezen.

In het volgende gedeelte ontdekt u hoe u Prometheus kunt instellen om doelen voor monitoring te ontdekken. Als voorbeeld wordt de voorbeeldtoepassing Emojivoto gebruikt. U leert ook wat een ServiceMonitor is.

Stap 2 – Prometheus en Grafana configureren

U heeft Prometheus en Grafana al in het cluster ingezet. In deze stap leert u hoe u een ServiceMonitor kunt gebruiken. Een ServiceMonitor is een van de voorkeursmethoden om Prometheus te vertellen hoe een nieuw doel voor monitoring ontdekt kan worden.

De in Stap 5 van de Vereisten-sectie gecreëerde Emojivoto-implementatie biedt standaard de /metrics-eindpunt aan op poort 8801 via een Kubernetes-service.

kubectl get svc -n emojivoto

Vervolgens ontdekt u de Emojivoto-services die verantwoordelijk zijn voor het blootstellen van metrische gegevens voor Prometheus om te consumeren. De betreffende services worden emoji-svc en voting-svc genoemd (let op: het gebruikt de emojivoto-namespace):

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

De uitvoer ziet er ongeveer als volgt uit:

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

Vervolgens voert u een port-forward uit om de metrieken te inspecteren:

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

De blootgestelde metrieken kunnen worden gevisualiseerd door te navigeren met een webbrowser naar localhost of via curl:

Het uitvoer ziet er vergelijkbaar uit als het volgende:
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

Om de metrieken voor de voting-svc service te inspecteren, stop de doorsturing van poort emoji-svc en voer dezelfde stappen uit voor de tweede service.

  • Vervolgens, verbind Prometheus met de Emojivoto metriekenservice. Er zijn verschillende manieren om dit te doen:
  • <static_config> – maakt het mogelijk om een lijst van doelen en een gemeenschappelijke labelset voor hen te specificeren.
  • <kubernetes_sd_config> – maakt het mogelijk om schraapdoelen op te halen uit de Kubernetes’ REST API en altijd gesynchroniseerd te blijven met de clusterstatus.

Prometheus Operator – vereenvoudigt Prometheus monitoring binnen een Kubernetes cluster via CRD’s.

Vervolgens, zult u gebruik maken van de ServiceMonitor CRD blootgesteld door de Prometheus Operator om een nieuw doel voor monitoring te definiëren.

cd Kubernetes-Starter-Kit-Developers

Verander eerst de directory (indien nog niet) waar de Starter Kit Git repository gekloond was:

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

Vervolgens opent u het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml in de Starter Kit repository met een teksteditor naar keuze (bij voorkeur met YAML lint-ondersteuning). Verwijder alstublieft de opmerkingen rond de sectie additionalServiceMonitors. De uitvoer ziet er ongeveer als volgt uit:

  • Uitleg voor de bovenstaande configuratie:
  • selector -> matchExpressions – vertelt ServiceMonitor welke service moet worden bewaakt. Het zal alle services targeten met de label sleutel app en de waarden emoji-svc en voting-svc. De labels kunnen worden opgehaald door te draaien: kubectl get svc --show-labels -n emojivoto
  • namespaceSelector – hier wilt u overeenkomen met de namespace waarin Emojivoto is ingezet.

endpoints -> port – verwijst naar de poort van de service om te bewaken.

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"

Tenslotte, pas de wijzigingen toe met Helm:

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

Vervolgens, controleer of het Emojivoto doel is toegevoegd aan Prometheus voor scraping. Maak een port forwarding voor Prometheus op poort 9090:

Open een webbrowser op localhost:9090. Navigeer vervolgens naar de pagina Status -> Targets en inspecteer de resultaten (let op het pad serviceMonitor/monitoring/emojivoto-monitor/0):

Er zijn 2 items onder de ontdekte doelen omdat de implementatie van Emojivoto bestaat uit 2 services die het metriek eindpunt blootleggen.

In de volgende stap zul je PromQL ontdekken samen met enkele eenvoudige voorbeelden om je op weg te helpen en de taal te leren.

Stap 3 – PromQL (Prometheus Query Language)

In deze stap leer je de basisprincipes van de Prometheus Query Language (PromQL). PromQL helpt je bij het uitvoeren van queries op verschillende metrieken die afkomstig zijn van alle Pods en applicaties van je DOKS-cluster.

PromQL is een DSL of Domein Specifieke Taal die specifiek is gebouwd voor Prometheus en stelt je in staat om te zoeken naar metrieken. De algehele expressie bepaalt de uiteindelijke waarde, terwijl geneste expressies waarden voor argumenten en operanden vertegenwoordigen. Voor meer diepgaande uitleg kun je terecht op de officiële PromQL pagina.

Vervolgens ga je een van de Emojivoto-metrieken inspecteren, namelijk de emojivoto_votes_total, die het totale aantal stemmen vertegenwoordigt. Het is een tellerwaarde die toeneemt bij elke aanvraag tegen het Emojivoto-stemmen eindpunt.

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

Eerst maak je een poortdoorstuurschakeling voor Prometheus op poort 9090:

Vervolgens open je de expressiebrowser.

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

In het query-invoerveld plak je emojivoto_votes_total en druk je op enter. De uitvoer ziet er ongeveer zo uit:

Navigeer naar de Emojivoto applicatie en klik op de homepage op de 100 emoji om ervoor te stemmen.

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

Navigeer naar de pagina met queryresultaten van stap 3 en klik op de Uitvoeren knop. U zou de teller voor de 100 emoji met één moeten zien toenemen. De uitvoer ziet er vergelijkbaar uit:

emojivoto_votes_total{service="voting-svc"}

PromQL groepeert vergelijkbare gegevens in wat een vector wordt genoemd. Zoals hierboven te zien is, heeft elke vector een reeks kenmerken die hem van elkaar onderscheiden. U kunt resultaten groeperen op basis van een interessant kenmerk. Als u bijvoorbeeld alleen geïnteresseerd bent in verzoeken die afkomstig zijn van de voting-svc service, typt u het volgende in het queryveld:

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

De uitvoer ziet er vergelijkbaar uit (let op dat het alleen de resultaten selecteert die overeenkomen met uw criteria):

Het bovenstaande resultaat toont het totale aantal verzoeken voor elke Pod van de Emojivoto implementatie die metrieken genereert (die uit 2 bestaat).

Dit is slechts een zeer eenvoudige kennismaking met wat PromQL is en waartoe het in staat is. Maar het kan veel meer dan dat, zoals het tellen van metrieken, het berekenen van het tarief over een vooraf gedefinieerd interval, enzovoort. Bezoek alstublieft de officiële PromQL pagina voor meer functies van de taal.

In de volgende stap leert u hoe u Grafana kunt gebruiken om metrieken te visualiseren voor de voorbeeldtoepassing Emojivoto.

Stap 4 – Visualiseren van Metingen met Grafana

Hoewel Prometheus enige ingebouwde ondersteuning heeft voor het visualiseren van gegevens, is een betere manier om dit te doen via Grafana, een open-source platform voor monitoring en observatie dat je in staat stelt de staat van je cluster te visualiseren en te verkennen.

De officiële pagina beschrijft het als volgt:

Vraag gegevens op, visualiseer ze, stel waarschuwingen in en begrijp je gegevens, ongeacht waar ze zijn opgeslagen.

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

Er zijn geen extra stappen nodig om Grafana te installeren, omdat Stap 1 – Het Prometheus-stack installeren Grafana voor je heeft geïnstalleerd. Het enige wat je hoeft te doen is een poort doorsturen zoals hieronder en direct toegang krijgen tot de dashboards (standaardreferenties: admin/prom-monitor):

Om alle Emojivoto-metingen te zien, ga je een van de standaard geïnstalleerde dashboards van Grafana gebruiken.

Navigeer naar de Grafana Dashboards-sectie.

Zoek vervolgens naar het dashboard Algemeen/Kubernetes/Rekenbronnen/Namespace(Pods) en open het.

Selecteer tot slot de Prometheus-datasource en voeg de namespace emojivoto toe.

U kunt experimenteren en meer panelen toevoegen in Grafana om andere gegevensbronnen te visualiseren, en ze ook groeperen op basis van scope. Ook kunt u de beschikbare dashboards voor Kubernetes verkennen vanuit het Grafana kube-mixin project.

In de volgende stap gaat u persistente opslag configureren voor Prometheus met behulp van DigitalOcean blokopslag om uw DOKS en applicatiemetrics te behouden bij het opnieuw opstarten van servers of bij clusterstoringen.

Stap 5 – Het configureren van Persistente Opslag voor Prometheus

In deze stap leert u hoe u persistente opslag inschakelt voor Prometheus zodat metriekgegevens behouden blijven bij het opnieuw opstarten van servers, of in geval van clusterstoringen.

kubectl get storageclass

Eerst heeft u een opslagklasse nodig om verder te gaan. Voer het volgende commando uit om te controleren welke beschikbaar is.

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

De uitvoer zou er ongeveer als volgt uit moeten zien. Let op dat DigitalOcean Blokopslag beschikbaar is om te gebruiken.

cd Kubernetes-Starter-Kit-Developers

Vervolgens, wijzig de directory (indien nog niet gedaan) waar de Starter Kit Git repository is gekloond:

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

Vervolgens, open het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml dat wordt verstrekt in de Starter Kit repository met een teksteditor naar keuze (bij voorkeur met YAML-lintondersteuning). Zoek naar de regel storageSpec en haal de vereiste sectie voor Prometheus uit commentaar. De definitie van storageSpec moet er als volgt uitzien:

  • Verklaringen voor de bovenstaande configuratie:
  • volumeClaimTemplate – definieert een nieuwe PVC.
  • storageClassName – definieert de opslagklasse (moet dezelfde waarde gebruiken als uitvoer van de opdracht kubectl get storageclass).

resources – stelt de waarde van de opslagaanvragen in. In dit geval wordt een totale capaciteit van 5 Gi aangevraagd voor het nieuwe volume.

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"

Tenslotte, pas de instellingen toe met Helm:

kubectl get pvc -n monitoring

Na het voltooien van de bovenstaande stappen, controleer de status van de 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:

De uitvoer ziet er vergelijkbaar uit met het volgende. De kolom STATUS zou Bound moeten weergeven.

Stap 6 – Configuratie van Persistent Storage voor Grafana

In deze stap leer je hoe je persistente opslag inschakelt voor Grafana, zodat de grafieken behouden blijven bij serverherstarts of bij clusterstoringen. Je zal een Persistent Volume Claim (PVC) van 5 Gi definiëren, met behulp van de DigitalOcean Block Storage. De volgende stappen zijn hetzelfde als Stap 5 – Configuratie van Persistente Opslag voor Prometheus.

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

Eerst open je het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml dat wordt verstrekt in de Starter Kit repository, met een teksteditor naar keuze (bij voorkeur met YAML-lintondersteuning). De sectie voor persistentieopslag voor Grafana zou er als volgt uit moeten zien:

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"

Vervolgens pas je de instellingen toe met Helm:

kubectl get pvc -n monitoring

Na het voltooien van de bovenstaande stappen, controleer je de status van de 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:

De uitvoer ziet er vergelijkbaar uit met het volgende. De kolom STATUS moet Bound weergeven.

Beste Praktijken voor PV Dimensionering

  • Om de benodigde grootte voor het volume te berekenen op basis van je behoeften, volg je alstublieft het advies en de formule uit de officiële documentatie:
  • Prometheus slaat gemiddeld slechts 1-2 bytes per monster op. Dus, om de capaciteit van een Prometheus-server te plannen, kunt u de ruwe formule gebruiken:
    benodigde_schijfruimte = retentietijd_seconden * geïnjecteerde_monsters_per_seconde * bytes_per_monster

Om het tempo van geïnjecteerde monsters te verlagen, kunt u ofwel het aantal tijdreeksen verminderen dat u schraapt (minder doelen of minder reeksen per doel), of u kunt het schraapinterval verhogen. Het verminderen van het aantal reeksen is echter waarschijnlijk effectiever, vanwege de compressie van monsters binnen een reeks.

Volg alstublieft de Operationele Aspecten sectie voor meer details over het onderwerp.

Conclusie

In deze tutorial heb je geleerd hoe je de Prometheus-stack installeert en configureert, vervolgens Grafana gebruikt om nieuwe dashboards te installeren en DOKS-cluster applicatiemetrics te visualiseren. Je hebt ook geleerd hoe je metrische queries uitvoert met PromQL. Ten slotte heb je persistent storage geconfigureerd en ingeschakeld voor Prometheus om je clustermetingen op te slaan.

Stel DOKS Cluster Monitoring in met Helm en Prometheus Operator

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