入门指南:如何将数据写入InfluxDB

导航至

这是一篇入门教程,介绍了如何使用以下三种方法将静态数据批量写入InfluxDB 2.0:

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

开始之前,请确保您已安装InfluxDB OSS或注册了一个免费的InfluxDB Cloud账号。注册InfluxDB Cloud账号是开始使用InfluxDB的最快方式。

数据集

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

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

1. 通过Chronograf上传

Chronograf上传数据有两个要求。文件大小不得超过25MB,并且使用行协议,这是InfluxDB的数据导入格式。我已将数据转换为行协议保存在myLineProtocolData.txt中。要将包含上述数据的csv文件“BTC.csv”转换为行协议,我使用了以下脚本,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内容如下

接下来,导航到https://127.0.0.1:9999/或您所在地区的InfluxDB Cloud URL,登录。例如,我的InfluxDB Cloud URL为https://us-west-2-1.aws.cloud2.influxdata.com

登录到InfluxDB v2后,我们现在可以将我们的行协议数据写入一个InfluxDB的。我们点击登录页面左侧的数据标签

influxdb v2 landing page

InfluxDB v2的登录页面。左侧的数据标签将带您进入加载数据页面。

“数据”标签允许我们创建桶,创建Telegraf配置,创建令牌并初始化客户端库。点击“创建桶”按钮创建一个用于BTC数据的目标桶。

influxdb v2 load data

管理您的桶、Telegraf配置、令牌和客户端库的“加载数据”页面。

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

influxdb v2 create bucket

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

现在我们可以将我们的行协议写入BTC桶。我们点击“+添加数据”按钮并选择将数据写入相应桶的方法。

influxdb v2 add data

在“加载数据”页面的“桶”标签中添加特定桶的数据

我们可以复制并粘贴我们的行协议,并指定我们希望写入点的精度。

Adding data using line protocol via the InfluxDB v2 UI

通过InfluxDB v2 UI使用行协议添加数据

点击写入数据按钮完成。恭喜!您已成功将一个点写入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,您需要指定您的bucket名称-b,您的org名称-o,您的时间戳精度-o,以及您的文件的格式。在我们的示例中,我们的文件是行协议或--format=lp,以及您的文件路径。

3. 使用Telegraf和InfluxDB OSS及InfluxDB Cloud的Tail插件

Tail插件主要用来读取流数据。例如,您可以持续对API发起请求,将新的数据追加到myLineProtocolData.txt文件中,然后带有Tail插件的Telegraf将写入新的点。然而,您可以更改配置文件(conf)中tail输入的读取设置,以便您可以读取静态文件。我们稍后会介绍这个。

接下来,您需要创建一个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 设置为true,这样Telegraf就不会设置一个'host'标签(第93行)。
  • 导航到OUTPUT PLUGIN部分。
  • 指定您的InfluxDB实例(第111行):urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"] # required
  • 指定您的bucket,token和组织(第113-120行)
  • 导航到SERVICES INPUT PLUGIN部分。
  • 指定您的行协议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。如果您有任何问题,请将它们发布在社区网站上或给我们发推文@InfluxDB。谢谢!

既然您已经阅读了这篇教程(我们的入门系列的第一部分),请确保阅读第二部分,“入门:将流数据导入InfluxDB”。