SpringBoot + Prometheus 指标基数爆炸治理:Label 乱打导致内存飙升?聚合采样方案!
做监控系统的同学肯定都遇到过这个问题:Prometheus 内存占用越来越高,监控面板加载越来越慢,最后甚至 OOM 崩溃。排查后发现,罪魁祸首居然是某个接口的 Label 值太多,导致指标基数爆炸。 我之前就遇到过这样一个案例:某个接口返回了用户 ID 作为 Label,结果线上有几百万活跃用户,这个 Label 的取值就有几百万种。单个指标瞬间膨胀到几百万个 time series,Prometheus 的内存和 CPU 直接被打爆。 今天我们就来聊聊 Prometheus 指标基数爆炸的问题,以及如何通过聚合采样方案来解决。 什么是指标基数爆炸? 1. Prometheus 指标模型回顾 Prometheus 的指标由以下几个部分组成: 指标名称 + Label组合 = 唯一的time series 例如: api_request_total{method="GET", status="200", path="/users"} = 12345 api_request_total{method="POST", status="200", path="/orders"} = 6789....