开始编写数据
InfluxDB 提供了许多不同的数据摄取或写入选项,包括以下内容:
- Influx 用户界面 (UI)
- InfluxDB HTTP API
influx命令行工具- Telegraf
- InfluxDB 客户端库
本教程将指导您了解如何使用行协议将数据写入InfluxDB的基本知识。如果使用像Telegraf或InfluxDB客户端库这样的工具,它们会为您构建行协议,但了解行协议的工作原理是很好的。
行协议
所有写入InfluxDB的数据都是使用行协议写入的,这是一种基于文本的格式,可让您提供必要的信息以将数据点写入InfluxDB。本教程涵盖了行协议的基本知识,但有关详细信息,请参阅行协议参考。
行协议元素
每行行协议包含以下元素:
* Required- * measurement: 用于标识存储数据的measurement的字符串。
- 标签集: 以逗号分隔的键值对列表,每个代表一个标签。标签键和值为未加引号的字符串。 空格、逗号和等号字符必须被转义。
- * 字段集: 以逗号分隔的键值对列表,每个表示一个字段。字段键是未加引号的字符串。 空格和逗号必须转义。 字段值可以是 字符串 (带引号), 浮点数, 整数, 无符号整数,或 布尔值。
- timestamp: Unix 时间戳 与数据相关。InfluxDB 支持高达纳秒的精度。 如果时间戳的精度不是纳秒,你必须在将数据写入 InfluxDB 时指定精度。
行协议元素解析
- measurement: 在第一个未转义的逗号之前的第一个空格之前的所有内容。
- 标签集: 在第一个未转义的逗号和第一个未转义的空格之间的键值对。
- 字段集: 在第一个和第二个未转义的空白字符之间的键值对。
- timestamp: 在第二个未转义空格之后的整数值。
- 行通过换行符分隔 (
\n)。行协议对空格敏感。
有关架构设计建议,请参见 InfluxDB schema design。
构建行协议
通过对行协议的基本理解,您现在可以构建行协议并将数据写入InfluxDB。考虑一个使用案例,您从家中的传感器收集数据。每个传感器收集温度、湿度和一氧化碳读数。要收集这些数据,请使用以下模式:
- 测量:
home- 标签
room: 客厅或厨房
- 字段
temp: 摄氏度中的温度 (浮点数)hum: 湿度百分比 (浮点数)co: 一百万分之一的空气中一氧化碳含量 (整数)
- 时间戳: Unix 时间戳,单位为秒精度
- 标签
数据从2022-01-01T08:00:00Z (UTC)开始,每小时收集,直到2022-01-01T20:00:00Z (UTC)。 生成的行协议可能如下所示:
家庭传感器数据线路协议
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200
将行协议写入InfluxDB
使用InfluxDB UI、influx CLI或InfluxDB API将上述行协议写入InfluxDB。
访问 cloud2.influxdata.com 在浏览器中登录并访问 InfluxDB 用户界面。
使用左侧导航栏导航到 加载数据 > 桶。
- 点击 添加数据 到您想要写入数据的桶,然后选择 行协议。
- 选择 手动输入。
- 重要 在上面的精度下拉菜单中,选择秒(以匹配行协议中的时间戳精度)。
- 复制上面的 行协议 并粘贴到行协议文本字段中。
- 点击 写入数据.
用户界面将确认数据已成功写入。
如果您还没有,请下载、安装并配置
influxCLI。使用
influx write命令将以上的行协议写入InfluxDB。提供以下内容:
-b, --bucket或--bucket-id标志,后面跟要写入的桶名称或 ID。-p, --precision标志与时间戳精度 (s)。- 字符串编码的行协议。
- 连接和认证凭据
influx write \ --bucket get-started \ --precision s " home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000 home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000 home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600 home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600 home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200 home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200 home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800 home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800 home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400 home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400 home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000 home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000 home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600 home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600 home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200 home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200 home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800 home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800 home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400 home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400 home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000 home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000 home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600 home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600 home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200 home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200 "
要使用InfluxDB HTTP API将数据写入InfluxDB,请使用POST请求方法向InfluxDB API /api/v2/write端点发送请求。
POST http://localhost:8086/api/v2/write
请在您的请求中包含以下内容:
- Headers:
- Authorization: Token <INFLUX_TOKEN>
- Content-Type: 文本/纯文本; 字符集=utf-8
- Accept: 应用/json
- 查询参数:
- org: InfluxDB 组织名称
- bucket: InfluxDB 数据桶名称
- precision: 时间戳精度 (默认是
ns)
- 请求体: 行协议作为纯文本
以下示例使用 cURL 和 InfluxDB API 将行协议写入 InfluxDB:
export INFLUX_HOST=http://localhost:8086
export INFLUX_ORG=<YOUR_INFLUXDB_ORG>
export INFLUX_TOKEN=<YOUR_INFLUXDB_API_TOKEN>
curl --request POST \
"$INFLUX_HOST/api/v2/write?org=$INFLUX_ORG&bucket=get-started&precision=s" \
--header "Authorization: Token $INFLUX_TOKEN" \
--header "Content-Type: text/plain; charset=utf-8" \
--header "Accept: application/json" \
--data-binary "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200
"
恭喜! 你已经将数据写入InfluxDB。上述方法是手动写入数据的方式,但还有其他可用的选项:
现在数据存储在InfluxDB中,让我们查询它。