mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Include scrape pool name for dropped targets in /api/v1/targets
This is needed so we can display dropped targets in the right scrape pool in the web interface even if they have a non-default job name. See also https://github.com/prometheus/prometheus/pull/16078 Fixes https://github.com/prometheus/prometheus/issues/16065 Signed-off-by: Julius Volz <julius.volz@gmail.com>
This commit is contained in:
parent
29d8372a04
commit
4be2243f06
|
@ -692,6 +692,7 @@ $ curl http://localhost:9090/api/v1/targets
|
||||||
"__scrape_timeout__": "10s",
|
"__scrape_timeout__": "10s",
|
||||||
"job": "node"
|
"job": "node"
|
||||||
},
|
},
|
||||||
|
"scrapePool": "node"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1021,6 +1021,7 @@ type ScrapePoolsDiscovery struct {
|
||||||
type DroppedTarget struct {
|
type DroppedTarget struct {
|
||||||
// Labels before any processing.
|
// Labels before any processing.
|
||||||
DiscoveredLabels labels.Labels `json:"discoveredLabels"`
|
DiscoveredLabels labels.Labels `json:"discoveredLabels"`
|
||||||
|
ScrapePool string `json:"scrapePool"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TargetDiscovery has all the active targets.
|
// TargetDiscovery has all the active targets.
|
||||||
|
@ -1181,6 +1182,7 @@ func (api *API) targets(r *http.Request) apiFuncResult {
|
||||||
for _, target := range targetsDropped[pool] {
|
for _, target := range targetsDropped[pool] {
|
||||||
res.DroppedTargets = append(res.DroppedTargets, &DroppedTarget{
|
res.DroppedTargets = append(res.DroppedTargets, &DroppedTarget{
|
||||||
DiscoveredLabels: target.DiscoveredLabels(builder),
|
DiscoveredLabels: target.DiscoveredLabels(builder),
|
||||||
|
ScrapePool: pool,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1767,6 +1767,7 @@ func testEndpoints(t *testing.T, api *API, tr *testTargetRetriever, es storage.E
|
||||||
"__scrape_interval__", "30s",
|
"__scrape_interval__", "30s",
|
||||||
"__scrape_timeout__", "15s",
|
"__scrape_timeout__", "15s",
|
||||||
),
|
),
|
||||||
|
ScrapePool: "blackbox",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
DroppedTargetCounts: map[string]int{"blackbox": 1},
|
DroppedTargetCounts: map[string]int{"blackbox": 1},
|
||||||
|
@ -1816,6 +1817,7 @@ func testEndpoints(t *testing.T, api *API, tr *testTargetRetriever, es storage.E
|
||||||
"__scrape_interval__", "30s",
|
"__scrape_interval__", "30s",
|
||||||
"__scrape_timeout__", "15s",
|
"__scrape_timeout__", "15s",
|
||||||
),
|
),
|
||||||
|
ScrapePool: "blackbox",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
DroppedTargetCounts: map[string]int{"blackbox": 1},
|
DroppedTargetCounts: map[string]int{"blackbox": 1},
|
||||||
|
@ -1875,6 +1877,7 @@ func testEndpoints(t *testing.T, api *API, tr *testTargetRetriever, es storage.E
|
||||||
"__scrape_interval__", "30s",
|
"__scrape_interval__", "30s",
|
||||||
"__scrape_timeout__", "15s",
|
"__scrape_timeout__", "15s",
|
||||||
),
|
),
|
||||||
|
ScrapePool: "blackbox",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
DroppedTargetCounts: map[string]int{"blackbox": 1},
|
DroppedTargetCounts: map[string]int{"blackbox": 1},
|
||||||
|
|
|
@ -18,6 +18,7 @@ export type Target = {
|
||||||
|
|
||||||
export interface DroppedTarget {
|
export interface DroppedTarget {
|
||||||
discoveredLabels: Labels;
|
discoveredLabels: Labels;
|
||||||
|
scrapePool: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Result type for /api/v1/targets endpoint.
|
// Result type for /api/v1/targets endpoint.
|
||||||
|
|
|
@ -109,8 +109,7 @@ const buildPoolsData = (
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const target of droppedTargets) {
|
for (const target of droppedTargets) {
|
||||||
const { job: poolName } = target.discoveredLabels;
|
const pool = pools[target.scrapePool];
|
||||||
const pool = pools[poolName];
|
|
||||||
if (!pool) {
|
if (!pool) {
|
||||||
// TODO: Should we do better here?
|
// TODO: Should we do better here?
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
@ -131,7 +130,7 @@ const buildPoolsData = (
|
||||||
.map((value) => value.original);
|
.map((value) => value.original);
|
||||||
|
|
||||||
for (const target of filteredDroppedTargets) {
|
for (const target of filteredDroppedTargets) {
|
||||||
pools[target.discoveredLabels.job].targets.push({
|
pools[target.scrapePool].targets.push({
|
||||||
discoveredLabels: target.discoveredLabels,
|
discoveredLabels: target.discoveredLabels,
|
||||||
isDropped: true,
|
isDropped: true,
|
||||||
labels: {},
|
labels: {},
|
||||||
|
|
Loading…
Reference in a new issue