08/03/2006
At opretholde en sund og performant applikationsinfrastruktur er afgørende i den moderne cloud-native verden. Når du kører dine workloads på en platform som Amazon EKS (Elastic Kubernetes Service), bliver behovet for en dybdegående og pålidelig overvågningsløsning endnu mere kritisk. Prometheus er blevet de facto-standarden for overvågning og alarmering i Kubernetes-økosystemet. Denne artikel er en omfattende guide, der viser dig, hvordan du implementerer en komplet overvågningsstak ved hjælp af Prometheus på din EKS-klynge. Vi vil fokusere på at bruge Prometheus Operator, som markant forenkler implementering og administration, installeret via Helm, pakkehåndteringen til Kubernetes.

Hvad er Prometheus Operator?
Før vi dykker ned i installationen, er det vigtigt at forstå, hvad Prometheus Operator er, og hvorfor det er den foretrukne metode til at køre Prometheus på Kubernetes. Traditionelt kunne konfiguration og administration af Prometheus være en kompleks opgave, der involverede manuelle ændringer i statiske konfigurationsfiler. Prometheus Operator ændrer dette fundamentalt ved at introducere Kubernetes Custom Resource Definitions (CRDs).
Kort sagt er Prometheus Operator en controller, der overvåger et sæt af specifikke Kubernetes-ressourcer (CRD'er) og automatisk konfigurerer og administrerer Prometheus-instanser baseret på disse ressourcer. Dette gør din overvågning dynamisk og Kubernetes-native. I stedet for at redigere en YAML-fil manuelt, definerer du blot ressourcer som ServiceMonitor eller PodMonitor, og operatøren tager sig af resten.
Fordele ved at bruge Prometheus Operator
- Forenklet konfiguration: Du administrerer din overvågningskonfiguration ved hjælp af simple Kubernetes-objekter. Det er nemmere at vedligeholde, versionere og integrere i GitOps-workflows.
- Automatiseret administration: Operatøren håndterer automatisk opgaver som skalering af Prometheus-servere, rullende opdateringer og konfigurationsændringer uden nedetid.
- Forbedret sikkerhed: Den giver indbyggede sikkerhedsfunktioner, herunder godkendelse og autorisation, som hjælper med at sikre dine Prometheus-instanser.
- Skalerbar og udvidelig: Det er nemt at udvide overvågningskapaciteterne ved at integrere med andre værktøjer som Grafana, Alertmanager og et væld af 'exporters' for forskellige tjenester.
Forståelse af Prometheus Operator CRD'er
Kernen i Prometheus Operators funktionalitet er dens CRD'er. At forstå, hvad hver af disse gør, giver dig mulighed for bedre at optimere din overvågningsstak. Her er de mest almindelige:
| CRD Navn | Beskrivelse |
|---|---|
Prometheus | Definerer den ønskede tilstand for en Prometheus-implementering, herunder antal replikaer, datalagring og version. |
Alertmanager | Definerer den ønskede tilstand for en Alertmanager-implementering, der håndterer alarmer sendt fra Prometheus. |
ServiceMonitor | Angiver deklarativt, hvordan en gruppe af Kubernetes-tjenester (Services) skal overvåges. Operatøren genererer automatisk den relevante scrape-konfiguration for Prometheus. |
PodMonitor | Ligner ServiceMonitor, men angiver deklarativt, hvordan grupper af pods skal overvåges direkte, uden om en service. |
PrometheusRule | Definerer et sæt af alarmerings- og/eller registreringsregler for Prometheus. Operatøren sikrer, at disse regler indlæses i de relevante Prometheus-instanser. |
AlertmanagerConfig | Giver mulighed for deklarativt at specificere dele af Alertmanager-konfigurationen, såsom routing af alarmer til specifikke modtagere. |
Trin-for-trin guide til implementering på EKS
Nu hvor vi har den teoretiske forståelse på plads, lad os gå videre til den praktiske implementering. Denne guide antager, at du allerede har en kørende Amazon EKS-klynge og har kubectl konfigureret til at kommunikere med den. Du skal også have Helm v3 installeret.
Trin 1: Tilføj Helm Repository
Den mest populære og velholdte Helm-pakke til Prometheus Operator er kube-prometheus-stack fra prometheus-community-repositoriet. Først tilføjer vi dette repository til vores Helm-konfiguration:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo updateTrin 2: Installer kube-prometheus-stack
Med repositoriet tilføjet kan vi nu installere pakken. Denne pakke installerer ikke kun Prometheus Operator, men også en komplet overvågningsstak, der inkluderer Prometheus, Alertmanager, Grafana, kube-state-metrics og node-exporter. Vi installerer den i et dedikeret namespace, f.eks. monitoring.
Opret først namespacet:
kubectl create namespace monitoringInstaller derefter Helm-pakken. Vi giver den et release-navn, f.eks. prom-stack.
helm install prom-stack prometheus-community/kube-prometheus-stack --namespace monitoringGiv installationen et par minutter til at downloade alle container-images og starte de forskellige komponenter. Processen vil oprette en række Deployments, StatefulSets, Services og andre Kubernetes-ressourcer.

Trin 3: Verificer installationen
Når Helm-kommandoen er færdig, kan du verificere, at alle pods kører korrekt i monitoring-namespacet:
kubectl get pods -n monitoringDu bør se en liste af pods, der inkluderer navne som prom-stack-grafana, prom-stack-kube-prometheus-st-prometheus-0, prom-stack-kube-state-metrics, og en prometheus-node-exporter-pod for hver node i din klynge.
Adgang til dine dashboards
Med stakken kørende er det tid til at visualisere de data, der bliver indsamlet. Helm-pakken installerer og konfigurerer Grafana til automatisk at bruge den nye Prometheus-instans som datakilde.
Adgang til Grafana
Grafana-tjenesten er som standard ikke eksponeret eksternt. Den nemmeste måde at få adgang til den på er ved at bruge kubectl port-forward. Find navnet på Grafana-servicen:
kubectl get svc -n monitoringNavnet vil typisk være noget i stil med prom-stack-grafana. Brug dette navn til at forwarde en lokal port til servicen:
kubectl port-forward svc/prom-stack-grafana 3000:80 -n monitoringÅbn nu din browser og gå til http://localhost:3000. Du vil blive mødt af Grafana's login-side.
- Brugernavn:
admin - Adgangskode:
prom-stack
Du vil blive bedt om at ændre adgangskoden ved første login. Når du er logget ind, kan du udforske de mange præ-installerede dashboards, der giver dyb indsigt i din klynges tilstand, herunder CPU/hukommelsesforbrug, netværksstatistikker og meget mere.
Adgang til Prometheus UI
Du kan også tilgå Prometheus' eget webinterface på samme måde. Dette er ofte nyttigt til debugging af scrape-targets eller til at køre komplekse PromQL-forespørgsler. Find Prometheus-servicen (typisk prom-stack-kube-prometheus-st-prometheus) og brug port-forward:
kubectl port-forward svc/prom-stack-kube-prometheus-st-prometheus 9090:9090 -n monitoringGå derefter til http://localhost:9090 i din browser.
Vigtige overvejelser og bedste praksis
- Persistens: Som standard bruger Helm-pakken ikke nødvendigvis persistente volumes. For et produktionsmiljø er det afgørende at konfigurere Prometheus til at gemme sine metrikdata på et persistent volume (f.eks. Amazon EBS). Dette sikrer, at dine historiske data ikke går tabt, hvis en Prometheus-pod genstarter. Dette konfigureres typisk i en custom
values.yaml-fil under installationen. - Sikkerhed i produktion: At bruge
port-forwarder fint til test og udvikling. I produktion bør du ikke eksponere dine dashboards direkte. Brug i stedet en Kubernetes Ingress med TLS og autentificering for at give sikker adgang. - Ressourceforbrug: Prometheus kan være ressourcekrævende, især i store klynger med mange targets. Sørg for at allokere tilstrækkelig CPU og hukommelse til dine Prometheus- og Grafana-pods og indstil passende resource requests og limits.
- Label-matching: Husk, at en
ServiceMonitorfinder de tjenester, den skal overvåge, baseret på labels. Sørg for, atspec.selector.matchLabelsi dinServiceMonitor-definition matcher de labels, der er sat på dine applikationers services.
Ofte Stillede Spørgsmål (FAQ)
- Hvorfor bruge Prometheus Operator i stedet for en manuel installation?
- Prometheus Operator automatiserer hele livscyklussen for din overvågningsstak. Den gør konfiguration, skalering og opdateringer markant nemmere og mindre fejlbehæftede ved at udnytte Kubernetes' egne API'er og mønstre.
- Hvad er forskellen på en ServiceMonitor og en PodMonitor?
- En
ServiceMonitorer designet til at finde og scrape endpoints, der er eksponeret via en Kubernetes Service. Dette er den mest almindelige metode. EnPodMonitoromgår servicen og scraper pod'ens IP-adresse direkte. Det kan være nyttigt i specifikke scenarier, f.eks. når en service ikke eksisterer for de pods, du vil overvåge. - Skal jeg eksponere min Prometheus-server offentligt?
- Nej, generelt er dette en dårlig praksis fra et sikkerhedsperspektiv. Prometheus-serveren indeholder detaljerede oplysninger om din infrastruktur. Den bør kun fungere som en intern datakilde for Grafana. Hvis du har brug for ekstern adgang, skal den sikres grundigt via en Ingress med stærk autentificering og autorisation.
- Hvordan overvåger jeg mine egne applikationer?
- For at overvåge dine egne applikationer skal du først eksponere metrikker i Prometheus-format (typisk via et
/metricsendpoint). Derefter opretter du enServiceMonitor-ressource, der matcher labels på din applikations Kubernetes Service. Operatøren vil derefter automatisk konfigurere Prometheus til at begynde at indsamle data fra din applikation.
Konklusion
Ved at følge denne guide har du med succes implementeret en kraftfuld, skalerbar og Kubernetes-native overvågningsløsning på din Amazon EKS-klynge. Kombinationen af Prometheus Operator og Helm fjerner en stor del af den operationelle byrde, der historisk har været forbundet med at administrere en omfattende overvågningsinfrastruktur. Du har nu et solidt fundament for at opnå dyb indsigt i dine applikationers og din klynges ydeevne og sundhed, hvilket giver dig mulighed for proaktivt at identificere og løse problemer, før de påvirker dine brugere.
Hvis du vil læse andre artikler, der ligner Prometheus på EKS: En Komplet Guide til Overvågning, kan du besøge kategorien Teknologi.
