mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-02 08:31:11 -08:00
Address comments
Signed-off-by: Fabian Reinartz <freinartz@google.com>
This commit is contained in:
parent
0ff42e754e
commit
057a5ae2b1
|
@ -363,9 +363,10 @@ $ curl http://localhost:9090/api/v1/targets
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Target metadata
|
## Querying target metadata
|
||||||
|
|
||||||
The following endpoint returns metadata about metrics currently scraped by targets.
|
The following endpoint returns metadata about metrics currently scraped by targets.
|
||||||
|
This is **experimental** and might change in the future.
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /api/v1/targets/metadata
|
GET /api/v1/targets/metadata
|
||||||
|
@ -373,7 +374,8 @@ GET /api/v1/targets/metadata
|
||||||
|
|
||||||
URL query parameters:
|
URL query parameters:
|
||||||
|
|
||||||
- `match=<series_selector>`: A selector that matches targets by label matchers. If a metric name is provided, only metadata for that metric name is returned.
|
- `match_target=<label_selectors>`: Label selectors that match targets by their label sets. All targets are selected if left empty.
|
||||||
|
- `metric=<string>`: A metric name to retrieve metadata for. All metric metadata is retrieved if left empty.
|
||||||
- `limit=<number>`: Maximum number of targets to match.
|
- `limit=<number>`: Maximum number of targets to match.
|
||||||
|
|
||||||
The `data` section of the query result consists of a list of objects that
|
The `data` section of the query result consists of a list of objects that
|
||||||
|
@ -384,7 +386,8 @@ from the first two targets with label `job="prometheus"`.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
curl -G http://localhost:9091/api/v1/targets/metadata \
|
curl -G http://localhost:9091/api/v1/targets/metadata \
|
||||||
--data-urlencode 'match=go_goroutines{job="prometheus"}' \
|
--data-urlencode 'metric=go_goroutines' \
|
||||||
|
--data-urlencode 'match_target={job="prometheus"}' \
|
||||||
--data-urlencode 'limit=2'
|
--data-urlencode 'limit=2'
|
||||||
{
|
{
|
||||||
"status": "success",
|
"status": "success",
|
||||||
|
@ -409,12 +412,12 @@ curl -G http://localhost:9091/api/v1/targets/metadata \
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The following example returns metadata for all metrics for the target with
|
The following example returns metadata for all metrics for all targets with
|
||||||
label `instance="127.0.0.1:9090`.
|
label `instance="127.0.0.1:9090`.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
curl -G http://localhost:9091/api/v1/targets/metadata \
|
curl -G http://localhost:9091/api/v1/targets/metadata \
|
||||||
--data-urlencode 'match={instance="127.0.0.1:9090"}'
|
--data-urlencode 'match_target={instance="127.0.0.1:9090"}'
|
||||||
{
|
{
|
||||||
"status": "success",
|
"status": "success",
|
||||||
"data": [
|
"data": [
|
||||||
|
|
|
@ -547,7 +547,7 @@ type scrapeCache struct {
|
||||||
|
|
||||||
// metaEntry holds meta information about a metric.
|
// metaEntry holds meta information about a metric.
|
||||||
type metaEntry struct {
|
type metaEntry struct {
|
||||||
lastIter uint64 // last scrape iteration the entry was observed
|
lastIter uint64 // Last scrape iteration the entry was observed at.
|
||||||
typ textparse.MetricType
|
typ textparse.MetricType
|
||||||
help string
|
help string
|
||||||
}
|
}
|
||||||
|
@ -684,10 +684,12 @@ func (c *scrapeCache) getMetadata(metric string) (MetricMetadata, bool) {
|
||||||
}, true
|
}, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *scrapeCache) listMetadata() (res []MetricMetadata) {
|
func (c *scrapeCache) listMetadata() []MetricMetadata {
|
||||||
c.metaMtx.Lock()
|
c.metaMtx.Lock()
|
||||||
defer c.metaMtx.Unlock()
|
defer c.metaMtx.Unlock()
|
||||||
|
|
||||||
|
res := make([]MetricMetadata, 0, len(c.metadata))
|
||||||
|
|
||||||
for m, e := range c.metadata {
|
for m, e := range c.metadata {
|
||||||
res = append(res, MetricMetadata{
|
res = append(res, MetricMetadata{
|
||||||
Metric: m,
|
Metric: m,
|
||||||
|
|
|
@ -488,29 +488,21 @@ func (api *API) targets(r *http.Request) (interface{}, *apiError, func()) {
|
||||||
return res, nil, nil
|
return res, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API) targetMetadata(r *http.Request) (interface{}, *apiError) {
|
func (api *API) targetMetadata(r *http.Request) (interface{}, *apiError, func()) {
|
||||||
limit := -1
|
limit := -1
|
||||||
if s := r.FormValue("limit"); s != "" {
|
if s := r.FormValue("limit"); s != "" {
|
||||||
var err error
|
var err error
|
||||||
if limit, err = strconv.Atoi(s); err != nil {
|
if limit, err = strconv.Atoi(s); err != nil {
|
||||||
return nil, &apiError{errorBadData, fmt.Errorf("limit must be a number")}
|
return nil, &apiError{errorBadData, fmt.Errorf("limit must be a number")}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
matchers, err := promql.ParseMetricSelector(r.FormValue("match"))
|
matchers, err := promql.ParseMetricSelector(r.FormValue("match_target"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &apiError{errorBadData, err}
|
return nil, &apiError{errorBadData, err}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var metric string
|
metric := r.FormValue("metric")
|
||||||
for i, m := range matchers {
|
|
||||||
// Extract metric matcher.
|
|
||||||
if m.Name == labels.MetricName && m.Type == labels.MatchEqual {
|
|
||||||
metric = m.Value
|
|
||||||
matchers = append(matchers[:i], matchers[i+1:]...)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var res []metricMetadata
|
var res []metricMetadata
|
||||||
Outer:
|
Outer:
|
||||||
|
@ -546,9 +538,9 @@ Outer:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(res) == 0 {
|
if len(res) == 0 {
|
||||||
return nil, &apiError{errorNotFound, errors.New("specified metadata not found")}
|
return nil, &apiError{errorNotFound, errors.New("specified metadata not found")}, nil
|
||||||
}
|
}
|
||||||
return res, nil
|
return res, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type metricMetadata struct {
|
type metricMetadata struct {
|
||||||
|
|
Loading…
Reference in a new issue