---
title: Hoe auto-discovery van Kubernetes endpoints services opzetten in Prometheus
description: Bekijk deze eenvoudige configuratie om je Prometheus configuratie met auto-discovery van Kubernetes endpoint services op snelheid te brengen!
---

[ACA Group Blog | Inzichten over Softwareontwikkeling, UX/UI, Data & Innovatie ](https://acagroup.be/nl/blog)

# [Hoe auto-discovery van Kubernetes endpoints services opzetten in Prometheus](https://acagroup.be/nl/blog/auto-discovery-of-kubernetes-endpoint-services-prometheus)

 Geschreven door [Jeroen Hartgers](https://acagroup.be/nl/blog/author/jeroen-hartgers) | 19-mrt-2021 0:00:00

Het probleem daarmee is dat dit allemaal nogal 'standaard' is. Als je al een volledig aangepaste Prometheus/Grafana setup hebt in[Rancher](https://rancher.com/products/rancher/) 1 , zoals wij, lijkt het zonde om dit uit het raam te gooien. De reis van een Rancher 1 'vee' Prometheus/Grafana naar**Rancher 2 K8s** verliep erg soepel en was vrij eenvoudig.

Echter, met**Prometheus** 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 een**Longhorn 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 dat**slechts één van de drie** bestaande Longhorn endpoints wordt geschraapt.

In Grafana kun je zien dat er**maar éé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 waar**auto-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` &amp; 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](https://rancher.com/products/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**](https://spring.io/projects/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](https://grafana.com/grafana/dashboards/13032) 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.

[Volledig bericht weergeven](https://acagroup.be/nl/blog/auto-discovery-of-kubernetes-endpoint-services-prometheus)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Jeroen Hartgers"
  },
  "dateModified" : "2026-03-18T12:44:29.364Z",
  "datePublished" : "2021-03-19T00:00:00Z",
  "headline" : "Hoe auto-discovery van Kubernetes endpoints services opzetten in Prometheus",
  "image" : {
    "@type" : "ImageObject",
    "height" : 1000,
    "url" : "https://25145356.fs1.hubspotusercontent-eu1.net/hubfs/25145356/Imported_Blog_Media/1631532898-img-team-02-1.jpg",
    "width" : 1500
  },
  "mainEntityOfPage" : "https://acagroup.be/nl/blog/auto-discovery-of-kubernetes-endpoint-services-prometheus",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60.0,
      "url" : "https://25145356.fs1.hubspotusercontent-eu1.net/hubfs/25145356/SVG%20Icons/aca-group%20(white).svg",
      "width" : 134.21053
    },
    "name" : "Blog"
  }
}
```