入门指南:将数据写入 InfluxDB

导航至

这是一个初学者教程,介绍如何使用以下三种方法将静态数据批量写入 InfluxDB 2.0

  • 通过 InfluxDB UI 上传数据
  • 直接导入到 InfluxDB
  • 使用 Telegraf 和 Tail 插件

在开始之前,请确保您已安装 InfluxDB OSS 或已注册免费的 InfluxDB Cloud 帐户。注册 InfluxDB Cloud 帐户是开始使用 InfluxDB 的最快方法。

数据集

在本教程中,我使用了来自 kaggle 的比特币历史数据“BTC.csv”(33 MB),时间范围为 2016-12-31 至 2018-06-17,精度为 Unix 时间的分钟级(约 760,000 个点)。数据如下所示

我还将时间戳转换为纳秒精度。

1. 通过 Chronograf 上传

Chronograf 对上传数据有两个要求。文件大小必须不大于 25MB,并且以 行协议 格式编写,这是 InfluxDB 的数据摄取格式。我将数据转换为 line protocol 格式,保存在 myLineProtocolData.txt 中。为了将包含上述数据的 csv 文件“BTC.csv” 转换为 line protocol 格式,我使用了以下脚本 csv_to_line.py

import pandas as pd
#convert csv to line protocol;

#convert sample data to line protocol (with nanosecond precision)
df = pd.read_csv("data/BTC_sm_ns.csv")
lines = ["price"
         + ",type=BTC"
         + " "
         + "close=" + str(df["close"][d]) + ","
         + "high=" + str(df["high"][d]) + ","
         + "low=" + str(df["low"][d]) + ","
         + "open=" + str(df["open"][d]) + ","
         + "volume=" + str(df["volume"][d])
         + " " + str(df["time"][d]) for d in range(len(df))]
thefile = open('data/chronograf.txt', 'w')
for item in lines:
    thefile.write("%s\n" % item)

转换后,myLineProtocolData.txt 看起来像

接下来,导航到 http://localhost:9999/ 或您的 InfluxDB Cloud url,该 url 因地区而异,然后登录。例如,我的 InfluxDB Cloud url 是 https://us-west-2-1.aws.cloud2.influxdata.com

登录 InfluxDB v2 后,我们现在可以将我们的 line protocol 数据写入到 InfluxDB 的 存储桶 (bucket) 中,通过 UI 完成。我们将点击着陆页左侧的 Data 选项卡

influxdb v2 landing page

InfluxDB v2 的着陆页。左侧的 Data 选项卡将您带到 Load Data 页面。

Data 选项卡允许我们创建存储桶、创建 Telegraf 配置、创建 令牌 (token) 并初始化客户端库。单击“创建存储桶”按钮,为我们的 BTC 数据创建一个目标存储桶。

influxdb v2 load data

Load Data 页面,您可以在其中管理存储桶、Telegraf 配置、令牌和客户端库。

现在,我们创建一个存储桶,将其命名为“BTC”,并设置保留策略。我们的数据将在超过 30 天后自动删除。

influxdb v2 create bucket

创建存储桶的配置选项。在这里,我们命名我们的存储桶并为其分配保留策略。

现在我们可以将我们的 line protocol 写入到我们的 BTC 存储桶中。我们单击 + Add Data 按钮,然后选择我们要将数据写入到相应存储桶的方法。

influxdb v2 add data

Load Data 页面中的 Buckets 选项卡中,将数据添加到特定的存储桶

我们可以复制并粘贴我们的 line protocol,并指定我们想要写入点的精度。

Adding data using line protocol via the InfluxDB v2 UI

使用 InfluxDB v2 UI 通过 line protocol 添加数据

单击 Write Data 按钮完成。恭喜!您已将一个点写入 InfluxDB v2。

writing point influxdb 2

成功将数据写入 InfluxDB v2 后收到的确认信息

2. 直接导入到 InfluxDB 2.0 OSS

如果您的数据大小大于 25 MB 并且您正在使用 InfluxDB 2.0 OSS,我建议使用此方法将数据直接写入 InfluxDB v2。使用以下 CLI 命令

influx write \
  -b bucketName \
  -o orgName \
  -p ns \
  --format=lp
  -f /path/to/myLineProtocolData.txt

使用 influx write 您只需要指定您的存储桶名称 -b、您的组织名称 -o 和您的时间戳精度 -o、您的文件格式。在我们的示例中,我们的文件采用 line protocol 格式,即 --format=lp,以及您的文件路径。

3. 将 Telegraf 和 Tail 插件用于 InfluxDB OSS 和 InfluxDB Cloud

Tail 插件 实际上是用于读取流式数据的。例如,您可以连续向 API 发出请求,将您的新数据附加到您的 myLineProtocolData.txt 文件中,Telegraf 和 Tail 插件将写入新点。但是,您可以更改 tail 输入的配置文件 (conf) 中的读取设置,以便您可以读取静态文件。我们将在稍后介绍。

接下来,您需要创建一个 telegraf.conf 文件。如果您在本地安装了 Telegraf,您可以运行此 CLI 命令来生成一个带有适当输入和输出过滤器的 Telegraf 配置

telegraf --input-filter tail --output-filter influxdb_v2 config > telegraf.conf

也可以随意将您的 conf 命名为更具描述性的名称,例如 tail.conf,这样您就可以记住您稍后在您的 conf 中包含了哪些插件。

如果您没有在本地安装 Telegraf,您可以在此处搜索正确的配置,并将配置手动复制并粘贴到 UI 中

对配置文件进行以下更改

  • 指定数据的精度(第 64 行)。在本示例中,我们的 BTC 数据已转换为 ns 精度,因此:precision = "ns"
  • 由于我们没有执行监控任务,因此我们不关心设置“host”标签。设置 omit_hostname = true,以便 Telegraf 不设置“host”标签(第 93 行)。
  • 导航到 OUTPUT PLUGIN 部分。
  • 指定您的 InfluxDB 实例(第 111 行):urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"] # 必需
  • 指定您的存储桶、令牌和组织(第 113-120 行)
  • 导航到 SERVICES INPUT PLUGIN 部分。
  • 指定您的 line protocol txt 文件的绝对路径(第 544 行)
  • 通常(使用 Tail 插件),Telegraf 不会开始写入 InfluxDB,除非数据已附加到您的 .txt 文件,因为 Tail 插件的主要目的是将流式数据写入 InfluxDB。这由 from_beginning 配置确定,该配置通常设置为 false,以便您不写入重复的点。由于我们的数据是静态的,请将此配置更改为 true(第 546 行)
    • from_beginning = true
  • 指定数据消化方法(最后一行)
    • data_format = "influx"

要在 InfluxDB v2 中使用此 Telegraf 配置,请按照有关如何使用 UI 手动配置 Telegraf 的以下文档进行操作。本质上,您只需要将您的配置复制并粘贴到正确的位置即可。

我希望本教程可以帮助您开始使用 Telegraf。如果您有任何问题,请将它们发布在社区站点上,或在 Twitter 上 @InfluxDB 上给我们发推文。谢谢!

既然您已经阅读了本教程(我们的入门系列的第一部分),请务必阅读第二部分,“入门指南:将流式数据导入 InfluxDB”。