如何精简 Prometheus 的指标和存储占用
作者:互联网
前言
随着 Prometheus 监控的组件、数量、指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多。
在这种情况下,要优化 Prometheus 性能, 优化存储占用. 第一时间想到的可能是各种 Prometheus 的兼容存储方案, 如 Thanos 或 VM、Mimir 等。但是实际上虽然集中存储、长期存储、存储降采样及存储压缩可以一定程度解决相关问题,但是治标不治本。
- 真正的本,还是在于指标量(series)过于庞大。
- 治本之法,应该是减少指标量。有 2 种办法:
- 根据实际使用情况,只保留(keep)展示(Grafana Dashboards)和告警(prometheus rules)会用到的指标。
本次重点介绍第二种办法:如何根据实际的使用情况精简 Prometheus 的指标和存储占用?
思路
- 分析当前 Prometheus 中存储的所有的 metric name(指标项);
- 分析展示环节用到的所有 metric name,即 Grafana 的 Dashboards 用到的所有指标;
- 分析告警环节用到的所有 metric name,即 Prometheus Rule 配置中用到的所有指标;
- (可选)分析诊断环境用到的所有 metric name,即经常在 Prometheus UI 上 query 的指标;
- 通过 relabel 在 metric_relabel_configs 或 write_relabel_configs 仅 keep 2-4 中的指标, 以此大幅减少 Prometheus 需要存储的指标量.
要具体实现这个思路, 可以通过 Grafana Labs 出品的 mimirtool 来搞定.
我这里有个前后的对比效果, 可供参考这样做效果有多惊人:
- 精简前: 270336 活动 series
- 精简后: 61055 活动 series
- 精简效果: 将近 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 且作为展示端
- 已配置相应的 告警规则
- 除此之外, 无其他需要额外保留的指标
前提
第一步: 分析 Grafana Dashboards 用到的指标
通过 Grafana API
具体如下:
# 通过 Grafana API分析 Grafana 用到的指标
# 前提是现在 Grafana上创建 API Keys
mimirtool analyze grafana --address http://172.16.0.20:32651 --key=eyJrIjoiYjBWMGVoTHZTY3BnM3V5UzNVem9iWDBDSG5sdFRxRVoiLCJuIjoibWltaXJ0b29sIiwiaWQiOjF9