先度量
在做任何改动之前,先找出数据量集中在哪些数据流上。
记下最大几个数据流的数字,作为评估每项改动的基线。
在存储前丢掉没人看的数据
最省钱的字节是从未被存储的字节。对于日志,实时流水线在接入时、存储之前运行:- 过滤事件 丢掉生产环境中没人看的健康检查、就绪探针和调试日志。
- 采样 只保留嘈杂但有用的事件类型中的一部分。使用 按字段一致采样 时,某个字段取值相同的事件(例如同一个请求 ID)会一起保留或一起丢弃。
- 删除字段 去掉没有查询用到的大字段,例如完整的请求体。
info 日志级别,或在采集器中丢弃噪声,还能节省网络。被丢弃的事件无法找回;只对重复出现的事件采样,永远不要对错误采样。
链路数据量最好在源头或 OpenTelemetry Collector 中削减。采样时保证同一条链路的 Span 一起保留,并注意应用性能指标和 SLO 只统计到达的 Span。对于用户体验数据,按应用设置会话采样。
只在需要的时间内保留数据
保留期应根据排查实际回看多远来设置,并为发现较晚的问题留出余量。缩短保留期会在下一次清理时删除随之过期的数据,降采样会删除原始样本,两者都无法撤回。日志和链路请保持 按天合并小文件 开启,这样跨多天的查询打开的文件更少。
控制指标序列规模
每种不同的标签取值组合都是一个序列。取值没有上限的标签(例如用户 ID、请求 ID 或原始 URL)会无限地产生序列,随后基数上限会拒绝整个组织的新序列。- 添加标签后检查指标页的 基数。
- 用路由模板替换原始路径,用套餐、区域这类类别替换 ID。
- 把每个请求的细节放到日志或 Span 中,它们不会按取值产生成本。
让查询保持低成本
验收标准
- 知道最大的五个数据流,以及它们在改动前后的日数据量。
- 没有数据流意外存储健康检查、就绪探针或生产环境调试日志。
- 每个数据流的保留期都是有意设置的,长期保留的指标已开启降采样。
- 指标序列数每周保持稳定,并远低于上限。
- 大数据流设置了最大查询窗口,常用过滤字段已建索引。