ops-demo/docs/06-monitoring.md

5.5 KiB
Raw Blame History

Oefening 06 (Bonus) — Prometheus + Grafana

Tijd: ~60 minuten Doel: Een volledige observability-stack deployen via ArgoCD en cluster- en applicatiemetrics bekijken in Grafana.


Wat je leert

  • Hoe je een complexe multi-component stack (kube-prometheus-stack) puur via GitOps deployet
  • Hoe Prometheus metrics scrapt van Kubernetes en applicaties
  • Navigeren door Grafana-dashboards voor cluster- en pod-metrics

Leeswijzer

Voor beginners (optioneel): Deze bonusoefening is vooral "leren observeren". Focus eerst op: stack komt up, Grafana opent, dashboards tonen data. Daarna pas op fine-tuning van values.


Vereisten

Oefeningen 0103 afgerond. Ingress-Nginx draait en nip.io-URLs zijn bereikbaar vanaf je laptop.

De monitoring-stack gebruikt extra ~700 MB geheugen. Op een 8 GB VM werkt het, maar kan wat traag aanvoelen. Als het te zwaar wordt, kun je alertmanager uitschakelen in de values.


Stappen

1. Monitoring-Application aanmaken

manifests/monitoring/values.yaml

grafana:
  adminPassword: workshop123
  ingress:
    enabled: true
    ingressClassName: nginx
    hosts:
      - grafana.192.168.56.200.nip.io
  resources:
    requests:
      cpu: 100m
      memory: 256Mi

prometheus:
  prometheusSpec:
    resources:
      requests:
        cpu: 200m
        memory: 512Mi
    podMonitorSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false
    retention: 6h
    retentionSize: "1GB"
    storageSpec:
      volumeClaimTemplate:
        spec:
          accessModes: [ ReadWriteOnce ]
          resources:
            requests:
              storage: 2Gi

alertmanager:
  enabled: false

kubeStateMetrics:
  resources:
    requests:
      cpu: 50m
      memory: 64Mi

nodeExporter:
  resources:
    requests:
      cpu: 50m
      memory: 64Mi

apps/monitoring/prometheus-grafana.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: prometheus-grafana
  namespace: argocd
  annotations:
    argocd.argoproj.io/sync-wave: "10"
spec:
  project: workshop
  sources:
    - repoURL: https://prometheus-community.github.io/helm-charts
      chart: kube-prometheus-stack
      targetRevision: "68.4.4"
      helm:
        valueFiles:
          - $values/manifests/monitoring/values.yaml
    - repoURL: JOUW_FORK_URL
      targetRevision: HEAD
      ref: values
  destination:
    server: https://kubernetes.default.svc
    namespace: monitoring
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
      - ServerSideApply=true

HOST

git add apps/monitoring/ manifests/monitoring/
git commit -m "feat: Prometheus + Grafana via kube-prometheus-stack"
git push

De initiële sync duurt 58 minuten — de chart is groot en installeert veel CRDs.

Voor beginners (optioneel): Dit duurt merkbaar langer dan eerdere oefeningen en dat is normaal. Je installeert hier geen losse app, maar een complete monitoring-stack met veel onderdelen.


2. Wachten tot de stack klaar is

VM

kubectl get pods -n monitoring -w

Zodra alles Running is:

VM

kubectl get ingress -n monitoring
# NAME      HOSTS                              ADDRESS
# grafana   grafana.192.168.56.200.nip.io      192.168.56.200

3. Grafana openen

Vanuit je laptop: http://grafana.192.168.56.200.nip.io

Login: admin / workshop123


4. Dashboards verkennen

kube-prometheus-stack levert kant-en-klare dashboards mee. In de Grafana-sidebar: Dashboards → Browse.

Interessant voor deze workshop:

Dashboard Wat je ziet
Kubernetes / Compute Resources / Namespace (Pods) CPU + geheugen per pod in de podinfo namespace
Kubernetes / Compute Resources / Node (Pods) Overzicht op node-niveau
Node Exporter / Full VM-niveau: CPU, geheugen, schijf, netwerk

5. Load genereren op podinfo

VM

# In de VM
while true; do curl -s http://podinfo.192.168.56.200.nip.io > /dev/null; sleep 0.2; done

Open in Grafana: Kubernetes / Compute Resources / Namespace (Pods) → namespace podinfo. Je ziet het CPU-gebruik stijgen.


6. GitOps ook hier

Probeer het Grafana-wachtwoord aan te passen:

HOST

vim manifests/monitoring/values.yaml
# Verander: adminPassword: workshop123
# Naar:     adminPassword: nieuwwachtwoord

git add manifests/monitoring/values.yaml
git commit -m "chore: pas Grafana-wachtwoord aan"
git push

ArgoCD synchroniseert de Helm-release en Grafana herstart. Log daarna in met het nieuwe wachtwoord.


Probleemoplossing

Symptoom Oplossing
Pods in Pending VM heeft te weinig geheugen — kubectl describe pod voor details
Grafana 502 van Nginx Pod is nog niet klaar, even wachten
Geen data in dashboards Prometheus heeft ~2 minuten nodig voor de eerste scrape
CRD-conflict bij sync Eerste sync installeert CRDs, tweede sync past resources toe — opnieuw proberen