菜单
开源 RSS

表管理器

注意

表管理器仅在使用多存储后端时才需要。如果您使用 TSDB(推荐)或 BoltDB(已弃用),则不需要表管理器。

Grafana Loki 支持将索引和 Chunk 存储在基于表的存储中。使用此类存储类型时,会随时间创建多个表:每个表(也称为周期表)包含特定时间范围内的数据。

此设计带来两个主要优势

  1. 模式配置更改:每个表都绑定到一个模式配置和版本,因此可以随时间引入更改,并且多个模式配置可以共存
  2. 保留:保留期通过删除整个表来实现,从而实现快速删除操作

表管理器是 Loki 的一个组件,负责在周期表的时间段开始之前创建它,并在其数据时间范围超过保留期后删除它。

表管理器支持以下后端

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 条目的“现在”)之间使用的存储。

这允许随时间使用多个不重叠的模式配置,以便执行模式版本升级或更改存储设置(包括更改存储类型)。

periodic tables

写入路径命中日志条目时间戳所在的表(通常是最后一个表,但靠近一个表末尾和下一个表开头的短时间段除外),而读取路径命中包含查询时间范围内数据的表。

模式配置示例

例如,以下 schema_config 定义了两个配置:第一个使用模式 v10,当前使用 v11

第一个配置存储 2019-01-012019-04-14(包含)之间的数据,然后添加了一个新配置 - 用于将模式版本升级到 v11 - 从 2019-04-15 开始使用 v11 模式存储数据。

对于每个 config,都会创建多个表,每个表存储 period 时长(168 小时 = 7 天)的数据。

yaml
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 设置为大于零来启用数据保留。

yaml
table_manager:
  retention_deletes_enabled: true
  retention_period: 336h

表管理器通过删除数据超出 retention_period 的整个表来实现保留。这种设计允许快速删除操作,但代价是保留的粒度由表的 period 控制。

鉴于每个表包含 period 时长的数据且整个表被删除,表管理器使用以下公式保留最新的表

number_of_tables_to_keep = floor(retention_period / table_period) + 1
retention

注意

需要注意的是 - 由于内部实现的原因 - 表的 periodretention_period 必须24h 的倍数,才能获得预期的行为。

有关配置保留的详细信息,请参阅Loki 存储保留文档。

活动/非活动表

表可以是活动或非活动的。

如果当前时间在以下范围内,则表被视为活动

active_vs_inactive_tables

目前,活动表和非活动表之间的差异仅适用于 DynamoDB 存储设置:容量模式(按需或预置)、读/写容量单位和自动扩展。

DynamoDB活动表非活动表
容量模式enable_ondemand_throughput_modeenable_inactive_throughput_on_demand_mode
读容量单位provisioned_read_throughputinactive_read_throughput
写容量单位provisioned_write_throughputinactive_write_throughput
自动扩展已启用(如果已配置)始终禁用

DynamoDB 预置

使用表管理器配置 DynamoDB 时,默认的按需预置读容量单位设置为 300,写容量单位设置为 3000。默认值可以被覆盖

yaml
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

表管理器部署模式

表管理器可以通过两种方式执行

  1. 当 Loki 在单体模式下运行(单进程)时隐式执行
  2. 当 Loki 在微服务模式下运行时显式执行

单体模式

当 Loki 在单体模式下运行时,表管理器也作为整个技术栈的一个组件启动。

微服务模式

当 Loki 在微服务模式下运行时,表管理器应作为名为 table-manager 的独立服务启动。

您可以在table-manager.libsonnet查看生产级部署示例。