TiDB Lightning 监控告警

tidb-lightning 支持使用 Prometheus 采集监控指标 (metrics)。本文主要介绍 TiDB Lightning 的监控配置与监控指标。

监控配置

如果是手动部署 TiDB Lightning,则参照以下步骤进行配置。

只要 Prometheus 能发现 tidb-lightningtikv-importer 的监控地址,就能收集对应的监控指标。

监控的端口可在 tidb-lightning.toml 中配置:

  1. [lightning]
  2. # 用于调试和 Prometheus 监控的 HTTP 端口。输入 0 关闭。
  3. pprof-port = 8289
  4. ...

配置 Prometheus 后,tidb-lightning 才能发现服务器。配置方法如下,将服务器地址直接添加至 scrape_configs 部分:

  1. ...
  2. scrape_configs:
  3. - job_name: 'tidb-lightning'
  4. static_configs:
  5. - targets: ['192.168.20.10:8289']

Grafana 面板

Grafana 的可视化面板可以让你在网页上监控 Prometheus 指标。

第一行:速度面板

第一行速度面板

面板名称序列描述
Import speedwrite from lightning从 TiDB Lightning 向 TiKV Importer 发送键值对的速度,取决于每个表的复杂性
Import speedupload to tikv从 TiKV Importer 上传 SST 文件到所有 TiKV 副本的总体速度
Chunk process duration完全编码单个数据文件所需的平均时间

有时导入速度会降到 0,这是为了平衡其他部分的速度,属于正常现象。

第二行:进度面板

第二行进度面板

面板名称描述
Import progress已编码的文件所占百分比
Checksum progress已导入的表所占百分比
Failures导入失败的表的数量以及故障点,通常为空

第三行:资源使用面板

第三行资源使用面板

面板名称描述
Memory usage每个服务占用的内存
Number of Lightning GoroutinesTiDB Lightning 使用的运行中的 goroutines 数量
CPU%每个服务使用的逻辑 CPU 数量

第四行:配额使用面板

第四行配额使用面板

面板名称序列描述
Idle workersio未使用的 io-concurrency 的数量,通常接近配置值(默认为 5),接近 0 时表示磁盘运行太慢
Idle workersclosed-engine已关闭但未清理的引擎数量,通常接近 index-concurrencytable-concurrency 的和(默认为 8),接近 0 时表示 TiDB Lightning 比 TiKV Importer 快,导致 TiDB Lightning 延迟
Idle workerstable未使用的 table-concurrency 的数量,通常为 0,直到进程结束
Idle workersindex未使用的 index-concurrency 的数量,通常为 0,直到进程结束
Idle workersregion未使用的 region-concurrency 的数量,通常为 0,直到进程结束
External resourcesKV Encoder已激活的 KV encoder 的数量,通常与 region-concurrency 的数量相同,直到进程结束
External resourcesImporter Engines打开的引擎文件数量,不应超过 max-open-engines 的设置

第五行:读取速度面板

第五行读取速度面板

面板名称序列描述
Chunk parser read block durationread block读取一个字节块来准备解析时所消耗的时间
Chunk parser read block durationapply worker等待 io-concurrency 空闲所消耗的时间
SQL process durationrow encode解析和编码单行所消耗的时间
SQL process durationblock deliver将一组键值对发送到 TiKV Importer 所消耗的时间

如果上述项的持续时间过长,则表示 TiDB Lightning 使用的磁盘运行太慢或 I/O 太忙。

第六行:存储空间面板

第六行存储空间面板

面板名称序列描述
SQL process ratedata deliver rate向 TiKV Importer 发送数据键值对的速度
SQL process rateindex deliver rate向 TiKV Importer 发送索引键值对的速度
SQL process ratetotal deliver rate发送数据键值对及索引键值对的速度之和
Total bytesparser read sizeTiDB Lightning 正在读取的字节数
Total bytesdata deliver size已发送到 TiKV Importer 的数据键值对的字节数
Total bytesindex deliver size已发送到 TiKV Importer 的索引键值对的字节数
Total bytesstorage_size/3TiKV 集群占用的存储空间大小的 1/3(3 为默认的副本数量)

第七行:导入速度面板

第七行导入速度面板

面板名称序列描述
Delivery durationRange delivery将一个 range 的键值对上传到 TiKV 集群所消耗的时间
Delivery durationSST delivery将单个 SST 文件上传到 TiKV 集群所消耗的时间
SST process durationSplit SST将键值对流切分成若干 SST 文件所消耗的时间
SST process durationSST upload上传单个 SST 文件所消耗的时间
SST process durationSST ingestingest 单个 SST 文件所消耗的时间
SST process durationSST size单个 SST 文件的大小

监控指标

本节将详细描述 tidb-lightning 的监控指标。

tidb-lightning 的监控指标皆以 lightning_* 为前缀。

  • lightning_importer_engine(计数器)

    计算已开启及关闭的引擎文件数量。标签:

    • type:
      • open
      • closed
  • lightning_idle_workers(计量表盘)

    计算闲置的 worker。标签:

    • name
      • table — 未使用的 table-concurrency 的数量,通常为 0,直到进程结束
      • index — 未使用的 index-concurrency 的数量,通常为 0,直到进程结束
      • region — 未使用的 region-concurrency 的数量,通常为 0,直到进程结束
      • io — 未使用的 io-concurrency 的数量,通常接近配置值(默认为 5),接近 0 时表示磁盘运行太慢
      • closed-engine — 已关闭但未清理的引擎数量,通常接近 index-concurrencytable-concurrency 的和(默认为 8),接近 0 时表示 TiDB Lightning 比 TiKV Importer 快,导致 TiDB Lightning 延迟
  • lightning_kv_encoder(计数器)

    计算已开启及关闭的 KV 编码器。KV 编码器是运行于内存的 TiDB 实例,用于将 SQL 的 INSERT 语句转换成键值对。此度量的净值(开启减掉关闭)在正常情况下不应持续增长。标签:

    • type:
      • open
      • closed
  • lightning_tables(计数器)

    计算处理过的表及其状态。标签:

    • state:表的状态,表明当前应执行的操作
      • pending — 等待处理
      • written — 所有数据已编码和传输
      • closed — 所有对应的引擎文件已关闭
      • imported — 所有引擎文件已上传到目标集群
      • altered_auto_inc — 自增 ID 已改
      • checksum — 已计算校验和
      • analyzed — 已进行统计信息分析
      • completed — 表格已完全导入并通过验证
    • result:当前操作的执行结果
      • success — 成功
      • failure — 失败(未完成)
  • lightning_engines(计数器)

    计算处理后引擎文件的数量以及其状态。标签:

    • state:引擎文件的状态,表明当前应执行的操作
      • pending — 等待处理
      • written — 所有数据已编码和传输
      • closed — 引擎文件已关闭
      • imported — 当前引擎文件已上传到目标集群
      • completed — 当前引擎文件已完全导入
    • result:当前操作的执行结果
      • success — 成功
      • failure — 失败(未完成)
  • lightning_chunks(计数器)

    计算处理过的 Chunks 及其状态。标签:

    • state: 单个 Chunk 的状态,表明该 Chunk 当前所处的阶段
      • estimated — (非状态)当前任务中 Chunk 的数量
      • pending — 已载入但未执行
      • running — 正在编码和发送数据
      • finished — 该 Chunk 已处理完毕
      • failed — 处理过程中发生错误
  • lightning_import_seconds(直方图)

    导入每个表所需时间的直方图。

  • lightning_row_read_bytes(直方图)

    单行 SQL 数据大小的直方图。

  • lightning_row_encode_seconds(直方图)

    解码单行 SQL 数据到键值对所需时间的直方图。

  • lightning_row_kv_deliver_seconds(直方图)

    发送一组与单行 SQL 数据对应的键值对所需时间的直方图。

  • lightning_block_deliver_seconds(直方图)

    每个键值对中的区块传送到 tikv-importer 所需时间的直方图。

  • lightning_block_deliver_bytes(直方图)

    发送到 Importer 的键值对中区块(未压缩)的大小的直方图。

  • lightning_chunk_parser_read_block_seconds(直方图)

    数据文件解析每个 SQL 区块所需时间的直方图。

  • lightning_checksum_seconds(直方图)

    计算表中 Checksum 所需时间的直方图。

  • lightning_apply_worker_seconds(直方图)

    获取闲置 worker 等待时间的直方图 (参见 lightning_idle_workers 计量表盘)。标签:

    • name
      • table
      • index
      • region
      • io
      • closed-engine