CRDs statt Config-Files
ServiceMonitor (Services),
PodMonitor (Pods), Probe
(Blackbox/Ingress), ScrapeConfig (Targets
außerhalb des Clusters), PrometheusRule
(Recording/Alerting), AlertmanagerConfig
(Routing-Teilbäume, matchen per Default nur Alerts, deren
namespace-Label dem eigenen Namespace entspricht). Der Operator generiert daraus die
laufende Prometheus-Konfiguration; die Prometheus-CR wählt
CRs per Label-Selektor aus.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: api
labels: {team: platform}
spec:
selector:
matchLabels: {app: api}
endpoints:
- port: http-metrics
interval: 30s
path: /metrics
Stolperfallen
port im ServiceMonitor ist der
Port-Name des Service, nicht die Nummer. CR wird
nicht gescraped? Label-Selektor der Prometheus-CR prüfen,
nicht selektierte CRs werden still ignoriert:
serviceMonitorSelector: {} wählt alle, fehlt er,
wählt er keine; ohne serviceMonitorNamespaceSelector
nur den eigenen Namespace. ServiceMonitors
nutzen per Default die SD-Rolle endpoints; ab K8s 1.33
in der Prometheus-CR serviceDiscoveryRole: EndpointSlice
setzen.