从 Prometheus 到 TSDB 的数据迁移

更新时间:

本文介绍如何使用阿里巴巴的开源工具Datax 实现从 Prometheus 到 TSDB 的数据迁移。

背景

本文介绍如何使用阿里巴巴的开源工具Datax 实现从 Prometheus 到 TSDB 的数据迁移。

DataX相关使用介绍请参阅 DataX 的 README 文档。

下面将首先介绍 DataX 工具本身,以及本次迁移工作涉及到的两个插件(Prometheus Reader 和 TSDB Writer)。

DataX

 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具 / 平台,实现包括 MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

Prometheus Reader

 Prometheus Reader 是 DataX 的一个插件,实现了从 Prometheus 读取数据。

TSDB Writer

 TSDB Writer 是 DataX 的一个插件,实现了将数据点写入到阿里巴巴自研 TSDB 数据库中。

Quick Start

步骤一:环境准备

  • Linux

  • JDK(1.8 以上,推荐 1.8)

  • Python(推荐 Python 2.6.x)

  • Prometheus(目前只支持兼容 2.9.x,其他版本暂不保证兼容)

  • TSDB(目前只支持兼容 2.4.x 及以上版本,其他版本暂不保证兼容)

步骤二:下载 DataX 及其插件

  • 点击 链接 进行下载DataX及TSDB Writer插件

  • 点击 链接 下载Prometheus Reader插件

步骤三:利用 DataX 自带的迁移任务,检查迁移流程能否走通

 这里,我们先以最简单的 Stream Reader 到 Stream Writer 为例。因为这两个插件不依赖任何的外部环境,特别适合用来测试流程是否能走通。简单介绍下这两个插件,其中 Stream Reader 会随机地产生字符串,而 Stream Writer 则会将接受到的字符串输出到控制台,以此模拟一个最简单的数据迁移过程。

工具部署

 将下载后的安装包,解压至某个目录(作为 DATAX_HOME),即可运行迁移任务:

$ cd ${DATAX_HOME}
$ python bin/datax.py job/job.json

检查任务是否成功

 下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:

任务启动时刻:2019-04-2611:18:07
任务结束时刻:2019-04-2611:18:17
任务总计耗时:10s
任务平均流量:253.91KB/s
记录写入速度:10000rec/s
读出记录总数:100000
读写失败总数:0

录制的命令行:数据迁移 Quick Start

步骤四:配置和启动 Prometheus 到 TSDB 的迁移任务

 通过上述 Stream Reader 到 Stream Writer 的迁移任务,我们就可以确保整个 DataX 流程是没有问题的。下面就可以真正开始 Prometheus Reader 到 TSDB Writer 迁移任务了。

配置迁移任务

 配置一个从 Prometheus 数据库同步抽取数据到 TSDB 的任务,命名为 prometheus2tsdb.json,完整的配置信息如下(针对各个配置参数的详细说明,请看下一章节”参数说明”):

{
"job":{
"content":[
{
"reader":{
"name":"prometheusreader",
"parameter":{
"endpoint":"http://localhost:9090",
"column":[
"up"
],
"beginDateTime":"2019-05-20T16:00:00Z",
"endDateTime":"2019-05-20T16:00:10Z"
}
},
"writer":{
"name":"tsdbwriter",
"parameter":{
"endpoint":"http://localhost:8242"
}
}
}
],
"setting":{
"speed":{
"channel":1
}
}
}
}

启动 Prometheus 2 TSDB 迁移任务

$ cd ${DATAX_HOME}/..
$ ls
  datax/  datax.tar.gz  prometheus2tsdb.json
$ python datax/bin/datax.py prometheus2tsdb.json

检查任务是否成功

 下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:

任务启动时刻:2019-05-2020:22:39
任务结束时刻:2019-05-2020:22:50
任务总计耗时:10s
任务平均流量:122.07KB/s
记录写入速度:1000rec/s
读出记录总数:10000
读写失败总数:0

录制的命令行:从 Prometheus 到 TSDB 数据迁移

参数说明

 接下来,我们来看下各个配置项的含义:

Prometheus Reader 相关

名称

类型

是否必需

描述

默认值

举例

endpoint

String

Prometheus 的 HTTP 连接地址

http://127.0.0.1:9090

column

Array

数据迁移任务需要迁移的 Metric 列表

[]

["m"]

beginDateTime

String

和 endDateTime 配合使用,用于指定哪个时间段内的数据点,需要被迁移

2019-05-13 15:00:00

endDateTime

String

和 beginDateTime 配合使用,用于指定哪个时间段内的数据点,需要被迁移

2019-05-13 17:00:00

TSDB Writer 相关

名称

类型

是否必需

描述

默认值

举例

endpoint

String

TSDB 的 HTTP 连接地址

http://127.0.0.1:8242

batchSize

Integer

每次批量数据的条数,需要保证大于 0

100

100

maxRetryTime

Integer

失败后重试的次数,需要保证大于 1

3

3

ignoreWriteError

Boolean

多次重试后,如果该参数设置为 true,则忽略错误,继续写入;否则,则会终止写入任务

false

false

注意事项

确保与 TSDB 的网络是连通的

 因为 TSDB Writer 写入数据的方式是调用 HTTP 接口(/api/put)来完成的,所以需要确保迁移任务的进程能正常访问到 TSDB 暴露出来的 HTTP 接口的。否则,会报错 Connect Exception 异常。

确保与 Prometheus 的网络是连通的

 因为 Prometheus Reader 读取数据是通过调用 HTTP 接口(/api/v1/query_range)来完成的,所以需要确保迁移任务的进程能正常访问到 Prometheus 暴露出来的 HTTP 接口的。否则,会报错 Connect Exception 异常。

FAQ

Q:是否支持调整迁移进程的 JVM 内存大小?

A:支持的。以”从 Prometheus 到 TSDB 的数据迁移任务”为例,启动命令如下:

python datax/bin/datax.py prometheus2tsdb.json -j "-Xms4096m -Xmx4096m"

Q:如何给 TSDB 设置网络白名单?

A:参考《时序数据库 TSDB 版 > 快速入门 > 设置网络白名单》。

Q:将迁移任务运行在 ECS 上的用户,如何配置 VPC,以及常见问题有哪些?

A:参考《ECS 安全组配置案例》和《VPC 常见问题》。