diff --git a/lib/promscrape/discovery/kubernetes/endpoints.go b/lib/promscrape/discovery/kubernetes/endpoints.go index a4a9b21b9..8c1fe6b9d 100644 --- a/lib/promscrape/discovery/kubernetes/endpoints.go +++ b/lib/promscrape/discovery/kubernetes/endpoints.go @@ -5,6 +5,7 @@ import ( "fmt" "io" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape/discoveryutils" ) @@ -103,6 +104,14 @@ func (eps *Endpoints) getTargetLabels(gw *groupWatcher) []map[string]string { ms = appendEndpointLabelsForAddresses(ms, gw, podPortsSeen, eps, ess.NotReadyAddresses, epp, svc, "false") } } + // See https://kubernetes.io/docs/reference/labels-annotations-taints/#endpoints-kubernetes-io-over-capacity + // and https://github.com/kubernetes/kubernetes/pull/99975 + switch eps.Metadata.Annotations.GetByName("endpoints.kubernetes.io/over-capacity") { + case "truncated": + logger.Warnf(`the number of targets for "role: endpoints" %q exceeds 1000 and has been truncated; please use "role: endpointslice" instead`, eps.Metadata.key()) + case "warning": + logger.Warnf(`the number of targets for "role: endpoints" %q exceeds 1000 and will be truncated in the next k8s releases; please use "role: endpointslice" instead`, eps.Metadata.key()) + } // Append labels for skipped ports on seen pods. portSeen := func(port int, ports []int) bool { diff --git a/lib/promscrape/discoveryutils/utils.go b/lib/promscrape/discoveryutils/utils.go index 18c7d00e0..cd0d103c9 100644 --- a/lib/promscrape/discoveryutils/utils.go +++ b/lib/promscrape/discoveryutils/utils.go @@ -33,6 +33,16 @@ func JoinHostPort(host string, port int) string { // SortedLabels represents sorted labels. type SortedLabels []prompbmarshal.Label +// GetByName returns the label with the given name from sls. +func (sls *SortedLabels) GetByName(name string) string { + for _, lb := range *sls { + if lb.Name == name { + return lb.Value + } + } + return "" +} + // UnmarshalJSON unmarshals JSON from data. func (sls *SortedLabels) UnmarshalJSON(data []byte) error { var m map[string]string