如何精简 Prometheus 的指标和存储占用

2022-12-01 16:15:49 浏览数 (1)

前言

随着 Prometheus 监控的组件、数量、指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多。

在这种情况下,要优化 Prometheus 性能, 优化存储占用. 第一时间想到的可能是各种 Prometheus 的兼容存储方案, 如 Thanos 或 VM、Mimir 等。但是实际上虽然集中存储、长期存储、存储降采样及存储压缩可以一定程度解决相关问题,但是治标不治本。

•真正的本,还是在于指标量(series)过于庞大。•治本之法,应该是减少指标量。有 2 种办法:•Prometheus 性能调优 - 解决高基数问题[1]•根据实际使用情况,只保留(keep)展示(Grafana Dashboards)和告警(prometheus rules)会用到的指标。

本次重点介绍第二种办法:如何根据实际的使用情况精简 Prometheus 的指标和存储占用?

思路

1.分析当前 Prometheus 中存储的所有的 metric name(指标项);2.分析展示环节用到的所有 metric name,即 Grafana 的 Dashboards 用到的所有指标;3.分析告警环节用到的所有 metric name,即 Prometheus Rule 配置中用到的所有指标;4.(可选)分析诊断环境用到的所有 metric name,即经常在 Prometheus UI 上 query 的指标;5.通过 relabel[2] 在 metric_relabel_configswrite_relabel_configskeep 2-4 中的指标, 以此大幅减少 Prometheus 需要存储的指标量.

要具体实现这个思路, 可以通过 Grafana Labs 出品的 mimirtool[3] 来搞定.

我这里有个前后的对比效果, 可供参考这样做效果有多惊人:

1.精简前: 270336 活动 series2.精简后: 61055 活动 series3.精简效果: 将近 5 倍的精简率!

Grafana Mimirtool

Grafana Mimir 是一款以对象存储为存储方式的 Prometheus 长期存储解决方案, 从 Cortex 演化而来. 官方号称支持亿级别的 series 写入存储和查询.

Grafana Mimirtool 是 Mimir 发布的一个实用工具, 可单独使用.

Grafana Mimirtool 支持从以下方面提取指标:

•Grafana 实例中的Grafana Dashboards(通过 Grafana API)•Mimir 实例中的 Prometheus alerting 和 recording rules•Grafana Dashboards JSON文件•Prometheus记alerting 和 recording rules 的 YAML文件

然后,Grafana Mimirtool可以将这些提取的指标与Prometheus或Cloud Prometheus实例中的活动 series 进行比较,并输出一个 used 指标和 unused 指标的列表。

Prometheus 精简指标实战

假设

假定:

•通过kube-prometheus-stack 安装 Prometheus•已安装 Grafana 且作为展示端•已配置相应的 告警规则•除此之外, 无其他需要额外保留的指标

前提

1.Grafana Mimirtool[4] 从 releases 中找到 mimirtool 对应平台的版本下载即可使用;2.已创建 Grafana API token[5]3.Prometheus[6]已安装和配置.

第一步: 分析 Grafana Dashboards 用到的指标

通过 Grafana API

具体如下:

代码语言:javascript复制
# 通过 Grafana API分析 Grafana 用到的指标
# 前提是现在 Grafana上创建 API Keys
mimirtool analyze grafana --address http://172.16.0.20:32651 --key=eyJrIjoiYjBWMGVoTHZTY3BnM3V5UzNVem9iWDBDSG5sdFRxRVoiLCJuIjoibWltaXJ0b29sIiwiaWQiOjF9

0 人点赞