道家人 发表于 2022-12-29 11:06:29

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

前言

随着 Prometheus 监控的组件、数量、指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多。
在这种情况下,要优化 Prometheus 性能, 优化存储占用. 第一时间想到的可能是各种 Prometheus 的兼容存储方案, 如 Thanos 或 VM、Mimir 等。但是实际上虽然集中存储、长期存储、存储降采样及存储压缩可以一定程度解决相关问题,但是治标不治本。

[*]真正的本,还是在于指标量(series)过于庞大。
[*]治本之法,应该是减少指标量。有 2 种办法:

[*]Prometheus 性能调优 - 解决高基数问题
[*]根据实际使用情况,只保留(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 Mimirtool 从 releases 中找到 mimirtool 对应平台的版本下载即可使用;
[*]已创建 Grafana API token
[*]Prometheus已安装和配置.
第一步: 分析 Grafana Dashboards 用到的指标

通过 Grafana API

具体如下:
# 通过 Grafana API分析 Grafana 用到的指标
# 前提是现在 Grafana上创建 API Keys
mimirtool analyze grafana --address http://172.16.0.20:32651 --key=eyJrIjoiYjBWMGVoTHZTY3BnM3V5UzNVem9iWDBDSG5sdFRxRVoiLCJuIjoibWltaXJ0b29sIiwiaWQiOjF9

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 如何精简 Prometheus 的指标和存储占用