表管理器
注意
表管理器仅在使用多存储后端时才需要。如果您使用 TSDB(推荐)或 BoltDB(已弃用),则不需要表管理器。
Grafana Loki 支持将索引和 Chunk 存储在基于表的存储中。使用此类存储类型时,会随时间创建多个表:每个表(也称为周期表)包含特定时间范围内的数据。
此设计带来两个主要优势
- 模式配置更改:每个表都绑定到一个模式配置和版本,因此可以随时间引入更改,并且多个模式配置可以共存
- 保留:保留期通过删除整个表来实现,从而实现快速删除操作
表管理器是 Loki 的一个组件,负责在周期表的时间段开始之前创建它,并在其数据时间范围超过保留期后删除它。
表管理器支持以下后端
- 索引存储
- Chunk 存储
- 文件系统(主要用于本地环境)
Loki 支持以下索引和 Chunk 存储后端,但它们已弃用,并将在未来版本中移除
Loki 支持用于存储 Chunk 的对象存储(如 Amazon S3 和 Google Cloud Storage)不由表管理器管理,应设置自定义存储桶策略来删除旧数据。
有关配置表管理器的详细信息,请参阅 Loki 配置文档中的table_manager
部分。
表和模式配置
周期表存储与特定时间段相关的索引或 Chunk 数据。存储在单个表中的数据时间范围及其存储类型的持续时间在schema_config
配置块中配置。
schema_config
可以包含一个或多个 configs
。每个 config 定义了从 from
(格式为 yyyy-mm-dd
)设置的日期到下一个 config(或最后一个 schema config 条目的“现在”)之间使用的存储。
这允许随时间使用多个不重叠的模式配置,以便执行模式版本升级或更改存储设置(包括更改存储类型)。

写入路径命中日志条目时间戳所在的表(通常是最后一个表,但靠近一个表末尾和下一个表开头的短时间段除外),而读取路径命中包含查询时间范围内数据的表。
模式配置示例
例如,以下 schema_config
定义了两个配置:第一个使用模式 v10
,当前使用 v11
。
第一个配置存储 2019-01-01
到 2019-04-14
(包含)之间的数据,然后添加了一个新配置 - 用于将模式版本升级到 v11
- 从 2019-04-15
开始使用 v11
模式存储数据。
对于每个 config,都会创建多个表,每个表存储 period
时长(168 小时 = 7 天)的数据。
schema_config:
configs:
- from: 2019-01-01
store: dynamo
schema: v10
index:
prefix: loki_
period: 168h
- from: 2019-04-15
store: dynamo
schema: v11
index:
prefix: loki_
period: 168h
表创建
表管理器在新表的开始时间之前稍微提前创建它们,以确保在当前表的结束时间到达时新表已准备就绪。
creation_grace_period
属性 - 在table_manager
配置块中 - 定义了应该提前多久创建表。
保留
由表管理器管理的保留功能默认是禁用的,因为它具有破坏性。您可以通过在配置中明确启用它并将 retention_period
设置为大于零来启用数据保留。
table_manager:
retention_deletes_enabled: true
retention_period: 336h
表管理器通过删除数据超出 retention_period
的整个表来实现保留。这种设计允许快速删除操作,但代价是保留的粒度由表的 period
控制。
鉴于每个表包含 period
时长的数据且整个表被删除,表管理器使用以下公式保留最新的表
number_of_tables_to_keep = floor(retention_period / table_period) + 1

注意
需要注意的是 - 由于内部实现的原因 - 表的
period
和retention_period
必须是24h
的倍数,才能获得预期的行为。
有关配置保留的详细信息,请参阅Loki 存储保留文档。
活动/非活动表
表可以是活动或非活动的。
如果当前时间在以下范围内,则表被视为活动:
- 表开始时间 -
creation_grace_period
- 表结束时间 + 最大 Chunk 存留期(硬编码为
12h
)

目前,活动表和非活动表之间的差异仅适用于 DynamoDB 存储设置:容量模式(按需或预置)、读/写容量单位和自动扩展。
DynamoDB | 活动表 | 非活动表 |
---|---|---|
容量模式 | enable_ondemand_throughput_mode | enable_inactive_throughput_on_demand_mode |
读容量单位 | provisioned_read_throughput | inactive_read_throughput |
写容量单位 | provisioned_write_throughput | inactive_write_throughput |
自动扩展 | 已启用(如果已配置) | 始终禁用 |
DynamoDB 预置
使用表管理器配置 DynamoDB 时,默认的按需预置读容量单位设置为 300,写容量单位设置为 3000。默认值可以被覆盖
table_manager:
index_tables_provisioning:
provisioned_write_throughput: 10
provisioned_read_throughput: 10
chunk_tables_provisioning:
provisioned_write_throughput: 10
provisioned_read_throughput: 10
如果表管理器未自动管理 DynamoDB,旧数据将无法轻松清除,并且索引会无限增长。手动配置应确保主索引键设置为 h
(字符串),排序键设置为 r
(二进制)。配置 YAML 中的“period”属性应设置为 0
。
表管理器部署模式
表管理器可以通过两种方式执行
- 当 Loki 在单体模式下运行(单进程)时隐式执行
- 当 Loki 在微服务模式下运行时显式执行
单体模式
当 Loki 在单体模式下运行时,表管理器也作为整个技术栈的一个组件启动。
微服务模式
当 Loki 在微服务模式下运行时,表管理器应作为名为 table-manager
的独立服务启动。
您可以在table-manager.libsonnet
查看生产级部署示例。