关于shell:一个-Shell-脚本实现-Prometheus-Push-Gateway-指标自动过期

74次阅读

共计 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 中即可实现主动清理过期指标。

解释:

  1. Push Gateway 按 Group 来治理指标,每个 Group 蕴含一组指标和惟一的 Group Labels。
  2. Push Gateway 的 API /api/vi/metrics 能够获取所有 Group 和以后指标值、上次推送工夫。
  3. 应用 jq 语言按上次推送工夫过滤 Group,而后应用 DELETE API 删除组。
  4. Group Labels 是 Group 的惟一标识,取决于 Push Client,每个 Group 可能有不同的 Labels。个别默认有 job 和 instance,如果有其余字段也须要增加到脚本里,否则删除指定 Group 时会把雷同 job 和 instance 的 Group 全都删掉。以上脚本假如所有 Group Labels 都雷同,所以请勿用于 Group Labels 不统一的场合。
  5. Group Labels 有规定的程序,程序不正确会导致 DELETE 返回 404。你必须本人尝试正确的程序。
  6. 应用以下脚本能够获取以后所有 Group Labels,但返回的程序并不满足程序的条件:
baseurl=localhost:9091
curl -sS $baseurl/api/v1/metrics | jq -r '.data[].push_time_seconds.metrics[0].labels'

正文完
 0