


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.
De incomplete data repareren met auto-discovery
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.
1. Voeg configMap toe voor Prometheus
Voeg dit toe aan het einde van de prometheus.yaml in je Prometheus configMap. De jobnaam is 'kubernetes-service-endpoints', omdat het toepasselijk leek.
# Scrape config voor service endpoints. # # De herlabeling laat toe dat het eigenlijke service scrape endpoint geconfigureerd wordt # via de volgende annotaties: # # * `prometheus.io/scrape`: Alleen services scrapen die de waarde `true` hebben # * `prometheus.io/scheme`: Als het metrics endpoint beveiligd is dan moet je # dit instellen op `https` & waarschijnlijk de `tls_config` van de scrape config. # `prometheus.io/path`: Als het metrics pad niet `/metrics` is, overschrijf dit dan. # * `prometheus.io/port`: Als de metrics zijn blootgesteld op een andere poort dan de # service, stel dit dan op de juiste manier in. - job_name: 'kubernetes-service-endpoints' scrape_interval: 5s scrape_timeout: 2s kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] actie: vervang doel_label: __scheme__ regex: (https?) - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] actie: vervang doel_label: __metrics_path__ regex: (.+) - source_labels: [__adres__, __meta_kubernetes_service_annotation_prometheus_io_port] actie: vervang doel_label: __address__ regex: (.+)(?::\d+);(\d+) vervanging: $1:$2 - actie: labelmap regex: __meta_kubernetes_service_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_service_name] actie: vervang doel_label: kubernetes_naam
2. De services configureren
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:
- prometheus.io/scrape: Alleen services scrapen die de waarde `true` hebben
- prometheus.io/schema: Als het metrics endpoint beveiligd is dan moet je dit instellen op `https` & hoogstwaarschijnlijk de `tls_config` van de scrape config instellen.
- prometheus.io/path: Als het metrics pad niet `/metrics` is overschrijf dit dan.
- prometheus.io/port: Als de metrics op een andere poort dan de service worden blootgesteld, stel dit dan op de juiste manier in.
Laten we eerst eens kijken naar een voorbeeld voor een Longhorn Service. (Longhorn is een geweldige gerepliceerde opslagoplossing!)
apiVersion: v1 soort: Service metadata: annotaties: prometheus.io/port: "9500" prometheus.io/scrape: "true" labels: app: longhorn-manager naam: longhorn-backend namespace: longhorn-system spec: ports: - naam: manager poort: 9500 protocol: TCP targetPort: manager selector: app: longhorn-manager sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800 type: ClusterIP
Laten we nu eens kijken naar een voorbeeld voor een Spring Boot Application Service. Let op het niet-standaard scrape-pad /actuator/prometheus.
apiVersion: v1 soort: Service metadata: naam: springbootapp namespace: spring labels: app: gateway annotaties: prometheus.io/path: "/actuator/prometheus" prometheus.io/port: "8080" prometheus.io/scrape: "true" spec: ports: - name: management port: 8080 - naam: http poort: 80 selector: app: gateway sessionAffinity: Geen type: ClusterIP
3. Configureer Prometheus rollen
ClusterRol
Wijzig eerst de namespace als dat nodig is. Opmerking: mogelijk moet deze clusterRole iets strakker zijn dan hij nu is.
apiVersion: rbac.authorization.k8s.io/v1 soort: ClusterRole metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/naam: prometheus naam: prometheus namespace: prometheus regels: - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions werkwoorden: - create - apiGroups: - apiextensions.k8s.io resourceNames: - alertmanagers.monitoring.coreos.com - podmonitors.monitoring.coreos.com - prometheuses.monitoring.coreos.com - prometheusrules.monitoring.coreos.com - servicemonitors.monitoring.coreos.com - thanosrulers.monitoring.coreos.com bronnen: - customresourcedefinitions werkwoorden: - get - update - apiGroups: - monitoring.coreos.com bronnen: - alertmanagers - alertmanagers/finalizers - prometheuses - prometheuses/finalizers - thanosrulers - thanosrulers/finalizers - servicemonitors - podmonitors - prometheusrules werkwoorden: - '*' - apiGroups: - apps bronnen: - statefulsets werkwoorden: - '*' - apiGroups: - "" bronnen: - configmaps - secrets werkwoorden: - '*' - apiGroups:
- "" middelen: - pods werkwoorden: - get - list - watch - apiGroups: - "" middelen: - services - services/finalizers - endpoints werkwoorden: - '*' - apiGroups: - "" middelen: - nodes werkwoorden: - list - watch - apiGroups: - "" middelen: - namespaces werkwoorden: - get - list - watch - apiGroups: - extensions middelen: - ingresses werkwoorden: ["get", "list", "watch"] - nonResourceURLs: [/metrics] werkwoorden: ["get"].
ClusterRoleBinding
Nogmaals, verander de naamruimte als dat nodig is.
apiVersion: rbac.authorization.k8s.io/v1 soort: ClusterRoleBinding metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/naam: prometheus naam: prometheus namespace: prometheus roleRef: apiGroup: rbac.authorization.k8s.io soort: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: default namespace: prometheus
ServiceAccount
Verander nogmaals de namespace als dat nodig is. Wijzig de naam NIET tenzij u de ClusterRoleBinding subjects.name ook wijzigt.
apiVersion: v1 soort: ServiceAccount metadata: naam: standaard namespace: prometheus
Toepassen
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.
Resultaten in Prometheus
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!

Grafana Longhorn dashboard
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!

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

What others have also read


CloudBrew is altijd een hoogtepunt op onze kalender geweest, maar de editie van 2025 voelde anders. Misschien lag het aan de timing. Slechts een maand eerder, in november 2025, opende de Azure Belgium Central-regio eindelijk haar deuren. ACA opereert al altijd vanuit het hart van Europa, dus het live gaan van deze grote nationale mijlpaal net voor de conferentie zorgde voor een extra dosis enthousiasme.
Lees verder

Een betere uptime, lagere kosten en vendor lock-in vermijden. Dat zijn drie van de redenen waarom onze klanten kiezen voor een multicloud-strategie. Onze Cloud project manager Roel Van Steenberghe legt uit wat zo’n strategie precies inhoudt en wat de troeven zijn van Google Cloud Platform (GCP).
Lees verder

In de complexe wereld van moderne softwareontwikkeling worden bedrijven geconfronteerd met de uitdaging om verschillende applicaties die door verschillende teams worden ontwikkeld en beheerd, naadloos te integreren. De Service Mesh is van onschatbare waarde bij het overwinnen van deze uitdaging. In dit blogartikel verdiepen we ons in Istio Service Mesh en onderzoeken we waarom investeren in een Service Mesh zoals Istio een slimme zet is." Wat is Service Mesh? Een Service Mesh is een softwarelaag die verantwoordelijk is voor alle communicatie tussen applicaties, in deze context services genoemd. Het introduceert nieuwe functionaliteiten om de interactie tussen services te beheren, zoals monitoring, logging, tracing en verkeerscontrole. Een service mesh werkt onafhankelijk van de code van elke individuele service, waardoor het over netwerkgrenzen heen kan werken en kan samenwerken met verschillende beheersystemen. Dankzij een service mesh kunnen ontwikkelaars zich richten op het bouwen van toepassingsfuncties zonder zich zorgen te maken over de complexiteit van de onderliggende communicatie-infrastructuur. Istio Service Mesh in de praktijk Denk aan het beheren van een groot cluster waarop meerdere applicaties draaien die ontwikkeld en onderhouden worden door verschillende teams, elk met verschillende afhankelijkheden zoals ElasticSearch of Kafka. Na verloop van tijd resulteert dit in een complex ecosysteem van applicaties en containers, overzien door verschillende teams. De omgeving wordt zo ingewikkeld dat het voor beheerders steeds moeilijker wordt om het overzicht te bewaren. Dit leidt tot een reeks pertinente vragen: Hoe ziet de architectuur eruit? Welke applicaties interageren met elkaar? Hoe wordt het verkeer beheerd? Bovendien zijn er specifieke uitdagingen die voor elke afzonderlijke applicatie moeten worden aangepakt: Het afhandelen van aanmeldingsprocessen Implementeren van robuuste beveiligingsmaatregelen Netwerkverkeer beheren dat naar de applicatie wordt geleid ... Een Service Mesh, zoals Istio, biedt een oplossing voor deze uitdagingen. Istio fungeert als een proxy tussen de verschillende applicaties (services) in het cluster, waarbij elk verzoek door een component van Istio gaat. Hoe werkt Istio Service Mesh? Istio introduceert een sidecar proxy voor elke service in het microservices ecosysteem. Deze sidecar proxy beheert al het inkomende en uitgaande verkeer voor de dienst. Daarnaast voegt Istio componenten toe die het inkomende en uitgaande verkeer van het cluster afhandelen. Istio's control plane maakt het mogelijk om beleidsregels te definiëren voor verkeersbeheer, beveiliging en monitoring, die vervolgens worden toegepast op de toegevoegde componenten. Voor een beter begrip van de functionaliteit van Istio Service Mesh, zie ons blogartikel "Istio Service Mesh installeren: A Comprehensive Step-by-Step Guide" , een gedetailleerde, stapsgewijze uitleg over de installatie en het gebruik van Istio. Waarom Istio Service Mesh? Verkeersbeheer: Istio maakt gedetailleerd verkeersbeheer mogelijk, waardoor ontwikkelaars eenvoudig verkeer tussen verschillende versies van hun services kunnen routeren, verdelen en controleren. Beveiliging: Istio biedt een robuuste beveiligingslaag met functies zoals verkeersversleuteling met behulp van eigen certificaten, Role-Based Access Control (RBAC) en mogelijkheden voor het implementeren van authenticatie- en autorisatiebeleid. Waarneembaarheid: Door middel van ingebouwde instrumentatie biedt Istio diepgaande observeerbaarheid met tools voor monitoring, logging en gedistribueerde tracering. Hierdoor kunnen IT-teams de prestaties van services analyseren en snel problemen opsporen. Vereenvoudigde communicatie: Istio neemt de complexiteit van servicecommunicatie weg van applicatieontwikkelaars, zodat zij zich kunnen richten op het bouwen van applicatiefuncties. Is Istio geschikt voor uw opstelling? Hoewel de voordelen duidelijk zijn, is het essentieel om te overwegen of de extra complexiteit van Istio past bij jouw specifieke opstelling. Ten eerste is er een sidecar container nodig voor elke ingezette service, wat kan leiden tot ongewenste geheugen- en CPU overhead. Daarnaast kan het zijn dat je team niet beschikt over de specialistische kennis die nodig is voor Istio. Als je overweegt om Istio Service Mesh te gaan gebruiken, vraag dan begeleiding aan specialisten met expertise. Vraag onze experts gerust om hulp. Meer informatie over Istio Istio Service Mesh is een technologische game-changer voor IT-professionals die streven naar geavanceerde controle, beveiliging en observeerbaarheid in hun microservices-architectuur. Istio vereenvoudigt en beveiligt de communicatie tussen services, waardoor IT-teams zich kunnen richten op het bouwen van betrouwbare en schaalbare applicaties. Snel antwoord nodig op al uw vragen over Istio Service Mesh? Neem contact op met onze experts
Lees verderWant to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

