适用场景
可观测性成本涨得最快的地方通常不是数据量,而是「基数」:一个标签塞进用户 ID,指标数量翻几万倍。治理顺序是:先砍高基数,再谈保留期,最后才考虑换存储。
配置步骤(指标基数治理)
# 基数排查(Prometheus)
# 1) 系列总数
topk(10, count by (__name__)({__name__=~".+"}))
# 2) 单指标基数最高的标签
topk(10, count by (instance)(node_cpu_seconds_total))
topk(5, count by (path)(http_requests_total))
# 3) 高基数元凶示例
# path="/order/123456" -> 应为 "/order/:id"
# user_id="u_88213" -> 不应作为标签
# trace_id -> 绝不进指标
# 处置
- 采集端做标签规范化(路由模板化)
- 丢弃或聚合掉无界标签
- 在 relabel 配置里 drop 掉敏感/高基数标签
关键参数与建议
- 成本构成:采集与传输、存储、查询计算、商业 License 四块分开算
- 基数治理:禁止把 user_id/order_id/URL 全路径等无界值做标签
- 采样与聚合:明细降采样保留,聚合指标长期保留
- 保留期分级:核心服务 30 天、边缘服务 7 天、调试数据 3 天
- 查询优化:看板刷新频率与查询复杂度要受控
- License 管理:按节点/数据量计费的授权要核对实际使用量
- 月度报表:按环境/服务/数据源拆成本,找出增长最快的来源
- 验收:成本环比稳定,且没有因为省钱丢掉关键可观测能力
容易踩的坑
- 把 URL 全路径当标签,接口参数一变就多一条时间线
- 把用户 ID、订单号写进标签,基数爆炸
- 采集端不规范化,同一个接口有多种路径写法
- 只在 Prometheus 侧删数据,采集端继续造
- 没有基数监控,等 Prometheus OOM 才发现
- 治理前不备份配置,误删关键标签无法回退
验证与巡检
# 基数与内存
curl -s localhost:9090/api/v1/status/tsdb | head -c 400
promtool tsdb analyze /var/lib/prometheus 2>/dev/null | head -20
# 目标:单指标基数 < 10 万,总系列数增长平稳
- 巡检:基数 Top10 受控、relabel 规则存在、Prometheus 内存水位 < 70%
小结
可观测性成本验收:能说清钱花在哪三类数据上、哪一项增长最快、砍掉哪些数据不影响排障。答不上来就是没治理。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。