> ## Documentation Index
> Fetch the complete documentation index at: https://docs.molesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 控制遥测数据量与成本

> 先弄清字节从哪里来，在存储前丢掉没人看的数据，只在需要的时间内保留数据，并控制指标序列和查询的规模。

遥测数据的增长总是快于它能回答的问题。一个忘记关闭的调试日志、一个带用户 ID 的标签、一个每秒记录一次的健康检查，都可能让存储翻倍，却不会让任何一次故障更容易解决。在无用的地方削减数据量，保留排查真正需要的数据。

## 先度量

在做任何改动之前，先找出数据量集中在哪些数据流上。

| 位置 | 显示内容 |
| - | - |
| [首页](https://docs.molesignal.com/zh-Hans/home.md#接入结论与关键指标) | 工作区的 **原始摄入量** 和 **压缩后数据量**，以及存储比摄入小了多少。 |
| [数据流](https://docs.molesignal.com/zh-Hans/streams.md#数据流列表) | 每个数据流的时段内压缩数据、转换前的 **采集数据大小**、**实际存储大小**、**索引大小** 和 **数据量**。比较这些数字，找出最大的数据流。 |
| [指标](https://docs.molesignal.com/zh-Hans/metrics.md#分析结果) | 指标的 **基数**，即它的活跃序列数。 |
| [Mole Agent 用量](https://docs.molesignal.com/zh-Hans/agent#用量与预算) | 按来源和日期统计的模型 token 用量，以及每日预算。 |

记下最大几个数据流的数字，作为评估每项改动的基线。

## 在存储前丢掉没人看的数据

最省钱的字节是从未被存储的字节。对于日志，[实时流水线](https://docs.molesignal.com/zh-Hans/pipelines#实时流水线)在接入时、存储之前运行：

* **过滤事件** 丢掉生产环境中没人看的健康检查、就绪探针和调试日志。
* **采样** 只保留嘈杂但有用的事件类型中的一部分。使用 **按字段一致采样** 时，某个字段取值相同的事件（例如同一个请求 ID）会一起保留或一起丢弃。
* **删除字段** 去掉没有查询用到的大字段，例如完整的请求体。

能改发送端时优先改发送端：生产环境使用 `info` 日志级别，或在采集器中丢弃噪声，还能节省网络。被丢弃的事件无法找回；只对重复出现的事件采样，永远不要对错误采样。

链路数据量最好在源头或 OpenTelemetry Collector 中削减。采样时保证同一条链路的 Span 一起保留，并注意应用性能指标和 SLO 只统计到达的 Span。对于用户体验数据，按应用设置[会话采样](https://docs.molesignal.com/zh-Hans/rum/sampling.md)。

## 只在需要的时间内保留数据

| 数据 | 保留期 | 做法 |
| - | - | - |
| 调试日志和详细日志 | 数天 | 单独一个数据流，设置较短的 **数据保留期（天）**。 |
| 应用日志和访问日志 | 数周 | 使用[平台默认值](https://docs.molesignal.com/zh-Hans/settings/platform.md#数据保留) 30 天，或单独设置。 |
| 审计与合规日志 | 数月或数年 | 单独一个保留期较长、访问范围较窄的数据流。 |
| 指标 | 数月 | 在指标数据流的 **保留策略** 标签页开启 **降采样较早的样本**：旧样本聚合为时间桶，长时间范围的查询读取量大幅减少。 |

保留期应根据排查实际回看多远来设置，并为发现较晚的问题留出余量。缩短保留期会在下一次清理时删除随之过期的数据，降采样会删除原始样本，两者都无法撤回。日志和链路请保持 **按天合并小文件** 开启，这样跨多天的查询打开的文件更少。

## 控制指标序列规模

每种不同的标签取值组合都是一个序列。取值没有上限的标签（例如用户 ID、请求 ID 或原始 URL）会无限地产生序列，随后[基数上限](https://docs.molesignal.com/zh-Hans/settings/platform.md#指标基数)会拒绝整个组织的新序列。

* 添加标签后检查指标页的 **基数**。
* 用路由模板替换原始路径，用套餐、区域这类类别替换 ID。
* 把每个请求的细节放到日志或 Span 中，它们不会按取值产生成本。

## 让查询保持低成本

| 习惯 | 效果 |
| - | - |
| 为大数据流设置 **最大查询窗口（小时）** | 误选的“最近 90 天”会被拒绝，而不是扫描全部数据。 |
| 为仪表盘常用的过滤字段建索引 | 过滤时跳过文件，而不是读取它们。参见[规划数据流与字段](https://docs.molesignal.com/zh-Hans/best-practices/stream-design.md#为过滤字段建索引)。 |
| 从最小的时间范围开始 | 先收窄，只在需要时再放大。 |
| 把长时间扫描作为[搜索任务](https://docs.molesignal.com/zh-Hans/streams.md#搜索任务)运行 | 查询在后台运行并保留结果，不必一直开着页面。 |
| 仪表盘的刷新频率与查看频率相当 | **自动** 刷新会随时间范围调整；大屏上的重面板避免使用很短的间隔。 |

## 验收标准

* 知道最大的五个数据流，以及它们在改动前后的日数据量。
* 没有数据流意外存储健康检查、就绪探针或生产环境调试日志。
* 每个数据流的保留期都是有意设置的，长期保留的指标已开启降采样。
* 指标序列数每周保持稳定，并远低于上限。
* 大数据流设置了最大查询窗口，常用过滤字段已建索引。

## 相关指南

* [流水线](https://docs.molesignal.com/zh-Hans/pipelines)
* [数据流](https://docs.molesignal.com/zh-Hans/streams.md)
* [平台设置](https://docs.molesignal.com/zh-Hans/settings/platform.md)
* [规划经得起时间的数据流与字段](https://docs.molesignal.com/zh-Hans/best-practices/stream-design.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.