共计 992 个字符,预计需要花费 3 分钟才能阅读完成。
Prometheus Push Gateway 官网已示意不会实现指标主动过期。在某些利用情景下,会导致指标 Group 越来越多,导致 Push Gateway 或 Prometheus 过程耗费过多内存。
如果有需要,这里有个简略的 Shell 脚本,删除所有超过 60 秒未推送的指标:
baseurl=localhost:9091
for uri in $(curl -sS $baseurl/api/v1/metrics | jq -r '
.data[].push_time_seconds.metrics[0] |
select((now - (.value | tonumber)) > 60) |
(.labels as $labels | ["job", "instance"] | map(.+"/"+$labels[.]) | join("/"))
'); do
curl -XDELETE $baseurl/metrics/$uri | exit
echo curl -XDELETE $baseurl/metrics/$uri
done
运行以上脚本的前提是装置 jq 和 curl。将脚本增加到 Crontab 中即可实现主动清理过期指标。
解释:
- Push Gateway 按 Group 来治理指标,每个 Group 蕴含一组指标和惟一的 Group Labels。
- Push Gateway 的 API
/api/vi/metrics
能够获取所有 Group 和以后指标值、上次推送工夫。 - 应用 jq 语言按上次推送工夫过滤 Group,而后应用 DELETE API 删除组。
- Group Labels 是 Group 的惟一标识,取决于 Push Client,每个 Group 可能有不同的 Labels。个别默认有 job 和 instance,如果有其余字段也须要增加到脚本里,否则删除指定 Group 时会把雷同 job 和 instance 的 Group 全都删掉。以上脚本假如所有 Group Labels 都雷同,所以请勿用于 Group Labels 不统一的场合。
- Group Labels 有规定的程序,程序不正确会导致 DELETE 返回 404。你必须本人尝试正确的程序。
- 应用以下脚本能够获取以后所有 Group Labels,但返回的程序并不满足程序的条件:
baseurl=localhost:9091
curl -sS $baseurl/api/v1/metrics | jq -r '.data[].push_time_seconds.metrics[0].labels'
正文完