Prometheus 教程

Prometheus 数据恢复

当 Prometheus 服务器发生宕机,磁盘损坏等情况,如果我们想要恢复数据,可以使用 Prometheus 数据回填来恢复数据,注意:前提是你已经提前备份好了 Prometheus 数据。

Prometheus 的数据回填通常指的是在数据丢失或中断后,重新获取并存储这些数据的过程。这可能是因为各种原因,如网络中断、存储故障或 Prometheus 实例的重启等。

数据回填的过程可能涉及以下几个步骤:

(1)数据识别:首先,需要识别哪些数据是缺失的或中断的。这可以通过比较时间序列的连续性、检查时间戳或使用专门的监控工具来完成。

(2)数据获取:一旦确定了缺失的数据范围,就需要从源头重新获取这些数据。这可能涉及从其他 Prometheus 实例、存储后端或直接从数据源获取数据。

(3)数据回填:获取到数据后,需要将其回填到 Prometheus 中。这通常涉及更新时间序列、添加新的样本或调整现有样本的时间戳。

(4)验证和修复:回填数据后,需要进行验证以确保数据的完整性和准确性。如果发现任何问题,可能需要进行修复或调整。

OpenMetrics 格式回填

如果用户想根据 OpenMetrics 格式的数据在 TSDB 中创建数据块,可以使用回填的方法。不过,用户应注意,回填过去 3 小时(当前头部数据块)的数据并不安全,因为该时间范围可能与 Prometheus 仍在变化的当前头部数据块重叠。回填将创建新的 TSDB 块,每个块包含两个小时的指标数据。这限制了块创建的内存需求。随后,Prometheus 服务器会将两个小时的数据块压缩成更大的数据块。

一个典型的使用案例是将指标数据从不同的监控系统或时间序列数据库迁移到 Prometheus。为此,用户必须首先将源数据转换为 OpenMetrics 格式,也就是下文所述的回填输入格式。

用法

可以通过 Promtool 命令行进行回填。Promtool 会将数据块写入一个目录。默认情况下,输出目录是 ./data/,你可以通过在子命令中使用输出目录的名称作为可选参数来更改它。如下:

promtool tsdb create-blocks-from openmetrics <input file> [<output directory>]

创建区块后,将其移动到 Prometheus 的数据目录。如果与 Prometheus 中的现有数据块重叠,则需要为 Prometheus v2.38 及以下版本设置 --storage.tsdb.allow-overlapping-blocks 标志。需要注意的是,任何回填的数据都会受到为 Prometheus 服务器配置的保留时间(按时间或大小)的限制。

更长块持续时间

默认情况下,promtool 将使用块的默认块持续时间(2 小时);这是最普遍适用和正确的行为。不过,当回填数据的时间范围较长时,使用较大的块持续时间值可能会更有利于加快回填速度,并防止 TSDB 稍后进行额外的压缩。

用户可以使用 --max-block-duration(最大块持续时间)标志配置块的最大持续时间。回填工具会选择一个合适的块持续时间,但不会大于此值。

虽然较大的数据块可以提高回填大型数据集的性能,但也存在一些缺点。基于时间的保留策略必须保留整个数据块,哪怕该数据块(可能很大)的一个样本仍在保留策略范围内。相反,基于大小的保留策略会移除整个数据块,即使 TSDB 只是稍微超出了大小限制。

因此,在任何生产实例中,回填时都必须小心谨慎,不建议使用较少的块持续时间,而选择较大的块持续时间。

记录规则的回填

创建新的记录规则时,没有历史数据。记录规则数据只从创建时开始存在。promtool 可以创建记录规则的历史数据。

用法

要查看所有选项,请使用: $ promtool tsdb create-blocks-from rules --help 命令。例如:

$ promtool tsdb create-blocks-from rules \
    --start 1617079873 \
    --end 1617097873 \
    --url http://mypromserver.com:9090 \
    rules.yaml rules2.yaml

提供的记录规则文件应该是普通的 Prometheus 规则文件。

promtool tsdb create-blocks-from rules 命令的输出是一个目录,其中包含记录规则文件中所有规则的历史规则数据块。默认情况下,输出目录是 data/。为了使用这些新块数据,必须将这些块移动到正在运行的 Prometheus 实例数据目录 storage.tsdb.path(对于 Prometheus v2.38 及以下版本,必须启用 --storage.tsdb.allow-overlapping-blocks 标志)。移动后,新块将在下一次压缩运行时与现有块合并。

局限性

  • 如果在开始/结束时间重叠的情况下多次运行规则回填,则每次运行规则回填时都会创建包含相同数据的数据块。

  • 将对记录规则文件中的所有规则进行评估。

  • 如果在记录规则文件中设置了时间间隔,该间隔将优先于规则回填命令中的评估间隔标志。

  • 如果警报在记录规则文件中,目前会被忽略。

  • 同一组中的规则无法查看之前规则的结果。这意味着不支持引用其他正在回填的规则。解决方法是多次回填并先创建依赖数据(并将依赖数据移至 Prometheus 服务器数据目录,以便从 Prometheus API 访问)。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号