Het probleem daarmee is dat dit allemaal nogal 'standaard' is. Als je al een volledig aangepaste Prometheus/Grafana setup hebt inRancher 1 , zoals wij, lijkt het zonde om dit uit het raam te gooien. De reis van een Rancher 1 'vee' Prometheus/Grafana naarRancher 2 K8s verliep erg soepel en was vrij eenvoudig.
Echter, metPrometheus moest je historisch gezien het prometheus.yaml bestand bewerken elke keer dat je een nieuwe applicatie wilde scrapen, tenzij je je eigen aangepaste discovery tool al had toegevoegd als een scrape.
Een probleem waarmee ik werd geconfronteerd bij het rechtstreeks scrapen van eenLonghorn en Spring Boot ( of een andere) Service in K8s, is dat slechts één van de vele backend pods achter die Service wordt gescrapped.Je eindigt dus met onvolledige data in Prometheus en dus onvolledige data in je dashboards in Grafana. In Prometheus kan je zien datslechts één van de drie bestaande Longhorn endpoints wordt geschraapt.
In Grafana kun je zien dat ermaar één node is en dat de andere twee worden gerapporteerd als 'Failed Nodes'. Tot overmaat van ramp wordt slechts één van de zeven volumes gerapporteerd als 'Totaal aantal volumes'.
Dit is waarauto-discovery van Kubernetes endpoint services een echte redder in de nood is . Veel webpagina's beschrijven de verschillende aspecten van scraping, maar ik vond er geen enkele volledig en andere hadden kritieke fouten.
In deze blogpost geef ik je een minimale en eenvoudige configuratie om je Prometheus-configuratie met auto-discovery van Kubernetes endpoint services op snelheid te brengen.
Voeg dit toe aan het einde van de prometheus.yaml in je Prometheus configMap. De jobnaam is 'kubernetes-service-endpoints', omdat het toepasselijk leek.
Zoals in het commentaar hierboven van de prometheus.yaml, kun je de volgende annotaties configureren. De annotatie prometheus.io/scrape: "true " is verplicht als je een bepaalde service wilt scrapen. Alle andere annotaties zijn optioneel en worden hier uitgelegd:
Laten we eerst eens kijken naar een voorbeeld voor een Longhorn Service. (Longhorn is een geweldige gerepliceerde opslagoplossing!)
Laten we nu eens kijken naar een voorbeeld voor een Spring Boot Application Service. Let op het niet-standaard scrape-pad /actuator/prometheus.
Wijzig eerst de namespace als dat nodig is. Opmerking: mogelijk moet deze clusterRole iets strakker zijn dan hij nu is.
Nogmaals, verander de naamruimte als dat nodig is.
Verander nogmaals de namespace als dat nodig is. Wijzig de naam NIET tenzij u de ClusterRoleBinding subjects.name ook wijzigt.
Pas eerst de ServiceAccount, ClusterRoleBinding, ClusterRole en Services toe op je K8s cluster. Na het updaten van de Prometheus configMap, herlaad Prometheus om er zeker van te zijn dat de nieuwe configMap is geactiveerd/geladen.
Ga naar de Prometheus GUI en navigeer naar Status -> Targets. Je zult zien dat nu alle pod endpoints 'op magische wijze' verschijnen bij het kopje kubernetes-services-endpoints. Alle toekomstige prometheus.io gerelateerde annotatie wijzigingen in k8s Services zullen onmiddellijk van kracht worden na het toepassen ervan!
Ik heb een generiek Grafana Longhorn dashboard gebruikt, dat je hier kunt vinden. Dankzij de auto-discovery toont het Grafana Longhorn dashboard nu correct drie nodes en zeven volumes, wat precies klopt!
Nadat je alle stappen in deze blogpost hebt doorlopen, hoef je in principe nooit meer naar je Prometheus-configuratie te kijken. Met auto-discovery van Kubernetes endpoint services is het toevoegen en verwijderen van Prometheus scrapes voor je applicaties nu bijna net zo eenvoudig als het ontgrendelen van je mobiele telefoon!
Ik hoop dat deze blogpost je heeft geholpen! Als je vragen hebt, neem dan contact met me op. Of, als je professioneel advies en diensten wilt, kijk dan hoe we je kunnen helpen met Kubernetes.