


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

