配置 TSDB 块上传
Grafana Mimir 支持上传历史 TSDB 块,这些块源自 Prometheus、Cortex,甚至其他 Grafana Mimir 安装。目前不支持从 Thanos 上传;更多信息,请参阅TSDB 块上传的已知限制。
为了简化块上传操作,我们已将此功能内置到 Mimir 的 CLI 工具 mimirtool 中。更多信息,请参阅mimirtool backfill。
块上传目前仍处于实验阶段,因此默认禁用。您可以通过 -compactor.block-upload-enabled
CLI 标志或相应的 limits.compactor_block_upload_enabled
配置参数启用此功能。
limits:
# Enable TSDB block upload
compactor_block_upload_enabled: true
块验证
在开始上传块数据之前,Grafana Mimir 会对 meta.json
文件执行以下检查:
- 仅支持 TSDB "v1" 块。这是 Prometheus v2、Grafana Mimir 和 Thanos 使用的格式。
- MinTime 或 MaxTime 无效的块将被拒绝(负值或 MaxTime < MinTime)。
- MinTime 或 MaxTime 在未来的块将被拒绝。
- 超出保留期范围的块将被拒绝。
- 覆盖时间范围大于最大压缩范围(
-compactor.block-ranges
选项,最大值默认为 24 小时)的块将被拒绝。 - 跨越最大压缩范围边界的块将被拒绝。例如,如果最大压缩范围是 24 小时,则开始时间在午夜之前、结束时间在午夜之后的块将被拒绝。
- 带有 Thanos 降采样配置的块将被拒绝。
- 大于
compactor_block_upload_max_block_size_bytes
(按租户覆盖)设置的块将被拒绝。 - 带有“外部标签”(Thanos 功能)的块将被拒绝。允许一些 Mimir 特定的标签。
上传块索引和 chunks 后,Grafana Mimir 会执行额外的块验证,以验证块是否格式良好,以及它们不会导致 Mimir 运行出现问题。您可以通过 compactor_block_upload_validation_enabled
按租户覆盖来禁用这些“完整块”验证。要在保持索引验证的同时禁用 chunks 验证,请改用 compactor_block_upload_verify_chunks
按租户覆盖。
按租户启用 TSDB 块上传
如果您的 Grafana Mimir 启用了多租户,您仍然可以使用上述方法为所有租户启用 TSDB 块上传。如果您希望按租户启用此功能,则可以使用运行时配置设置按租户覆盖:
- 启用运行时配置。
- 为应启用 TSDB 块上传的租户添加覆盖:
overrides:
tenant1:
compactor_block_upload_enabled: true
TSDB 块上传的已知限制
Thanos 块无法上传
由于 Thanos 块的元数据中包含不受支持的标签,因此无法上传。
有关从 Thanos 导入块相关的限制以及现有解决方法的信息,请参阅从 Thanos 或 Prometheus 迁移到 Grafana Mimir。
结果缓存需要刷新
Grafana Mimir 会缓存早于 10 分钟(可通过 -query-frontend.max-cache-freshness 配置)的样本用于范围查询结果。但是,上传块后,查询可能会返回不同的结果,因为上传了新数据。这意味着缓存的结果可能不正确。要修复缓存结果,Mimir 操作员可以手动刷新结果缓存。一种可能的替代方法是,通过使用 -query-frontend.results-cache-ttl
命令行选项(或按租户),将缓存结果的生存时间 (TTL) 从默认的 7 天减少到更短的时间,例如 6 小时。这将保证查询结果最多在此时间段后使用回填数据。
太新的块在稍后才能查询
当 querier 接收到针对给定 [开始时间, 结束时间] 期间的查询时,它们会检查该时间段,以决定是从存储、ingester,还是两者读取数据。假设 -querier.query-store-after
设置为 12h
。这意味着查询 [现在-13h, 现在]
将从存储读取数据。但查询 [现在-5h, 现在]
则**不会**。如果用户上传了“太新”的块,querier 可能不会查询它们,因为它配置为仅查询 ingester 获取“新鲜”时间范围的数据。