入门指南:如何将数据写入InfluxDB
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2020年8月9日
导航至
这是一篇入门教程,介绍了如何使用以下三种方法将静态数据批量写入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的桶。我们点击登录页面左侧的数据标签
“数据”标签允许我们创建桶,创建Telegraf配置,创建令牌并初始化客户端库。点击“创建桶”按钮创建一个用于BTC数据的目标桶。
现在,我们创建一个桶,将其命名为“BTC”并设置一个保留策略。当数据超过30天时,数据将自动被删除。
现在我们可以将我们的行协议写入BTC桶。我们点击“+添加数据”按钮并选择将数据写入相应桶的方法。
我们可以复制并粘贴我们的行协议,并指定我们希望写入点的精度。
点击写入数据按钮完成。恭喜!您已成功将一个点写入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”。