开始写入数据
- 2 / 3
本教程将指导您如何创建 行协议 数据并将其写入 InfluxDB 的基本操作。
InfluxDB提供了许多不同的数据导入或写入选项,包括以下内容:
- Influx用户界面(UI)
- InfluxDB HTTP API(v1和v2)
- Telegraf
influx3
数据CLI- InfluxDB客户端库
influx
CLI
如果使用Telegraf或InfluxDB客户端库等工具,它们可以为您构建行协议,但了解行协议的工作原理还是很有帮助的。
行协议
所有写入InfluxDB的数据都是使用行协议写入的,这是一种基于文本的格式,允许您提供写入InfluxDB所需的数据点信息。本教程介绍了行协议的基本知识,但有关详细信息,请参阅行协议参考。
行协议元素
行协议的每一行包含以下元素
* 必需- * 测量:标识要存储数据的测量的字符串。
- 标签集:以逗号分隔的键值对列表,每个键值对代表一个标签。标签键和值是无引号的字符串。空格、逗号和等号字符必须转义。
- * 字段集:以逗号分隔的键值对列表,每个键值对代表一个字段。字段键是无引号的字符串。空格和逗号必须转义。字段值可以是字符串(有引号)、浮点数、整数、无符号整数或布尔值。
- 时间戳:与数据关联的Unix时间戳。InfluxDB支持高达纳秒精度。如果时间戳的精度不是纳秒,则在将数据写入InfluxDB时必须指定精度。
行协议元素解析
- 测量:第一个空白字符之前的所有内容。
- 标签集:第一个空白字符和第一个空白字符之间的键值对。
- 字段集:第一个和第二个空白字符之间的键值对。
- 时间戳:第二个空白字符后的整数值。
- 行由换行符(
\n
)分隔。行协议对空白敏感。
measurement,tag1=val1,tag2=val2 field1="v1",field2=1i 0000000000000000000
有关架构设计建议,请参阅InfluxDB架构设计。
构建行协议
了解行协议的基本知识后,您现在可以构建行协议并将数据写入InfluxDB。考虑一个用例,即您从家中的传感器收集数据。每个传感器收集温度、湿度和一氧化碳读数。要收集这些数据,请使用以下架构
- 测量:
home
- 标签
room
:客厅或厨房
- 字段
temp
:温度(°C)(浮点数)hum
:湿度百分比(浮点数)co
:一氧化碳(百万分之一)(整数)
- 时间戳:秒精度的Unix时间戳
- 标签
以下行协议示例表示从UTC时间2022年1月1日08:00:00开始,到UTC时间2022年1月1日20:00:00收集的数据。
家庭传感器数据行协议
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1719924000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719924000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1719927600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719927600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1719931200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719931200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1719934800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719934800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1719938400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719938400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1719942000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719942000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1719945600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719945600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1719949200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719949200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1719952800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719952800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1719956400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719956400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1719960000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719960000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1719963600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719963600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1719967200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719967200
将行协议写入InfluxDB
以下示例展示了如何将前面已按行协议格式编写的示例数据写入InfluxDB云无服务器桶。
要了解有关可用工具和选项的更多信息,请参阅写入数据。
本入门教程中的某些示例假设您的InfluxDB凭据(URL、组织和令牌)由环境变量提供。
在浏览器中转到cloud2.influxdata.com 登录并访问InfluxDB UI。
使用左侧导航栏转到加载数据 > 桶。
加载数据
- 在您想写入数据的桶上单击 添加数据,然后选择行协议。
- 选择手动输入。
- 重要 在行协议文本字段上方的精度下拉菜单中,选择秒(以匹配行协议中时间戳的精度)。
- 复制上面的行协议并将其粘贴到行协议文本字段中。
- 单击写入数据。
UI确认数据已成功写入。
如果您尚未安装,请下载、安装和配置
influx
CLI。使用
influx write
命令将前面的行协议写入InfluxDB。提供以下内容:
influx write \
--bucket get-started \
--precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1719924000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719924000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1719927600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719927600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1719931200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719931200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1719934800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719934800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1719938400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719938400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1719942000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719942000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1719945600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719945600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1719949200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719949200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1719952800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719952800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1719956400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719956400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1719960000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719960000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1719963600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719963600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1719967200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719967200
"
如果成功,则输出成功消息;否则,错误详细信息及失败消息。
使用Telegraf消费行协议,然后将其写入InfluxDB云无服务器。
如果您尚未安装,请遵循下载和安装Telegraf的说明。
将家庭传感器数据示例复制并保存到本地系统上的文件中 - 例如,
home.lp
。cat <<- EOF > home.lp home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1719924000 home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719924000 home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1719927600 home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719927600 home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1719931200 home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719931200 home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1719934800 home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719934800 home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1719938400 home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719938400 home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1719942000 home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719942000 home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1719945600 home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719945600 home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1719949200 home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719949200 home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1719952800 home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719952800 home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1719956400 home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719956400 home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1719960000 home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719960000 home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1719963600 home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719963600 home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1719967200 home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719967200 EOF
运行以下命令以生成启用
inputs.file
和outputs.influxdb_v2
插件的Telegraf配置文件(./telegraf.conf
)telegraf --sample-config \ --input-filter file \ --output-filter influxdb_v2 \ > telegraf.conf
在您的编辑器中打开
./telegraf.conf
并配置以下内容file
输入插件:在[[inputs.file]].files
列表中,将"/tmp/metrics.out"
替换为您的示例数据文件名。如果Telegraf启动时找不到文件,它将停止处理并退出。[[inputs.file]] ## Files to parse each interval. Accept standard unix glob matching rules, ## as well as ** to match recursive files and directories. files = ["home.lp"]
output-influxdb_v2
输出插件:在[[outputs.influxdb_v2]]
部分中,将默认值替换为您InfluxDB云无服务器桶的以下配置[[outputs.influxdb_v2]] # InfluxDB Cloud Serverless URL urls = ["${INFLUX_HOST}"] # INFLUX_TOKEN is an environment variable you assigned to your API token token = "${INFLUX_TOKEN}" # An empty string (InfluxDB ignores this parameter) organization = "" # Bucket name bucket = "get-started"
以下示例配置使用以下InfluxDB凭据
urls
:包含您的INFLUX_HOST
环境变量的数组token
:您的INFLUX_TOKEN
环境变量organization
:空字符串(InfluxDB忽略此参数)bucket
:要写入的桶的名称
要写入数据,请使用以下选项启动
telegraf
守护进程--config
:指定配置文件的路径。--once
:仅运行一次 Telegraf 收集周期,针对配置的输入和输出,然后退出。
在您的终端中输入以下命令:
telegraf --once --config ./telegraf.conf
如果写入成功,输出类似于以下内容:
2023-05-31T20:09:08Z D! [agent] Starting service inputs 2023-05-31T20:09:19Z D! [outputs.influxdb_v2] Wrote batch of 52 metrics in 348.008167ms 2023-05-31T20:09:19Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics
Telegraf 及其插件提供了许多读取和写入数据的功能。要了解更多信息,请参阅如何使用 Telegraf 写入数据。
使用已经使用 InfluxDB v1 /write
API 端点的现有工作负载来写入数据。
如果您要从 InfluxDB 1.x 迁移数据,请参阅从 InfluxDB 1.x 迁移数据到 InfluxDB Cloud Serverless指南。
要使用 InfluxDB v1 HTTP API 将数据写入 InfluxDB,请使用 POST
请求方法向 InfluxDB API 的 /write 端点发送请求。
POST https://cloud2.influxdata.com/write
请求中包含以下内容:
- 头部:
- Authorization: Token <INFLUX_TOKEN>
- Content-Type: text/plain; charset=utf-8
- Accept: application/json
- 查询参数:
- 请求体:纯文本行协议
以下示例使用 cURL 和 InfluxDB v1 API 将行协议写入 InfluxDB。假设 API_TOKEN
是一个所有访问 API 令牌,InfluxDB 将创建一个名为 get-started/autogen
的存储桶和一个 autogen
DBRP 映射,然后将数据写入存储桶。
response=$(curl --silent --write-out "%{response_code}:-%{errormsg}" \
"https://cloud2.influxdata.com/write?db=get-started&precision=s" \
--header "Authorization: Token API_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
")
# Format the response code and error message output.
response_code=${response%%:-*}
errormsg=${response#*:-}
# Remove leading and trailing whitespace from errormsg
errormsg=$(echo "${errormsg}" | tr -d '[:space:]')
echo "$response_code"
if [[ $errormsg ]]; then
echo "$response"
fi
替换以下内容:
API_TOKEN
:一个拥有对指定存储桶充分权限的令牌。 为了使 InfluxDB 自动生成 DBRP 映射,您必须在写入请求中使用一个所有访问 API 令牌。
如果成功,输出将是 HTTP 204 No Content
状态码;否则,将输出错误状态码和失败信息。
204
要使用 InfluxDB v2 HTTP API 将数据写入 InfluxDB,请使用 POST
请求方法向 InfluxDB API 的 /api/v2/write
端点发送请求。
POST https://cloud2.influxdata.com/api/v2/write
请求中包含以下内容:
- 头部:
- Authorization: Token <INFLUX_TOKEN>
- Content-Type: text/plain; charset=utf-8
- Accept: application/json
- 查询参数:
- bucket: InfluxDB 存储桶名称
- precision: 时间戳精度(默认为
ns
)
- 请求体:纯文本行协议
以下示例使用 cURL 和 InfluxDB v2 API 将行协议写入 InfluxDB
response=$(curl --silent --write-out "%{response_code}:-%{errormsg}" \
"https://cloud2.influxdata.com/api/v2/write?bucket=get-started&precision=s" \
--header "Authorization: Token DATABASE_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
")
# Format the response code and error message output.
response_code=${response%%:-*}
errormsg=${response#*:-}
# Remove leading and trailing whitespace from errormsg
errormsg=$(echo "${errormsg}" | tr -d '[:space:]')
echo "$response_code"
if [[ $errormsg ]]; then
echo "$errormsg"
fi
替换以下内容:
API_TOKEN
:一个拥有对指定存储桶充分权限的令牌
如果成功,输出将是 HTTP 204 No Content
状态码;否则,将输出错误状态码和失败信息。
204
要使用 Python 将数据写入 InfluxDB Cloud Serverless,请使用influxdb_client_3
模块。以下步骤包括设置 Python 虚拟环境,以便将依赖项限制到您的当前项目。
创建一个模块目录并导航到其中——例如
mkdir -p influxdb_py_client && cd influxdb_py_client
在您的模块目录中设置 Python 虚拟环境。
python -m venv envs/virtual-env
激活虚拟环境。
source ./envs/virtual-env/bin/activate
安装客户端库包
pip install influxdb3-python
influxdb3-python
包提供了 influxdb_client_3
模块,并且安装了 pyarrow
包,以便与查询返回的 Arrow 数据一起使用。
在您的终端或编辑器中,为您要编写的代码创建一个新文件——例如:
write.py
。touch write.py
在
write.py
中,输入以下示例代码from influxdb_client_3 import InfluxDBClient3 import os # INFLUX_TOKEN is an environment variable you assigned to your # API WRITE token value. token = os.getenv('INFLUX_TOKEN') # host is the URL hostname without protocol or trailing slash client = InfluxDBClient3( host='cloud2.influxdata.com', token=token, database='get-started' ) lines = [ "home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1719924000", "home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719924000", "home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1719927600", "home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719927600", "home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1719931200", "home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719931200", "home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1719934800", "home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719934800", "home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1719938400", "home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719938400", "home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1719942000", "home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719942000", "home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1719945600", "home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719945600", "home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1719949200", "home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719949200", "home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1719952800", "home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719952800", "home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1719956400", "home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719956400", "home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1719960000", "home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719960000", "home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1719963600", "home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719963600", "home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1719967200", "home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719967200" ] client.write(lines,write_precision='s')
以下示例执行以下操作
从
influxdb_client_3
模块导入InfluxDBClient3
对象。调用
InfluxDBClient3()
构造函数以实例化一个配置了以下凭证的 InfluxDB 客户端host
:InfluxDB Cloud Serverless 区域主机名(URL 无协议或尾部斜杠)token
:一个token,具有对指定存储桶的写入访问权限。将其存储在密钥存储库或环境变量中,以避免暴露原始 token 字符串。database
:要写入的 InfluxDB Cloud Serverless 存储桶的名称
定义了一个列表,其中包含行协议字符串,每个字符串表示一条数据记录。
使用行协议记录列表和写入选项调用
client.write()
方法。由于示例行协议中的时间戳具有秒精度,因此示例传递了
write_precision='s'
选项来设置 时间戳精度 为秒。
要在终端中执行模块并将行协议写入您的 InfluxDB Cloud Serverless 存储桶,请输入以下命令
python write.py
如果成功,则输出成功消息;否则,错误详细信息及失败消息。
要使用 Go 将数据写入 InfluxDB Cloud Serverless,请使用 InfluxDB v3 influxdb3-go 客户端库包。
在您的项目目录中,创建一个新模块目录并进入该目录。
mkdir -p influxdb_go_client && cd influxdb_go_client
在目录中初始化一个新的 Go 模块。
go mod init influxdb_go_client
在终端或编辑器中,为您要编写的代码创建一个新文件——例如:
write.go
。touch write.go
在
write.go
中,输入以下示例代码package main import ( "context" "os" "fmt" "log" "github.com/InfluxCommunity/influxdb3-go/influxdb3" ) // Write line protocol data to InfluxDB func WriteLineProtocol() error { // INFLUX_TOKEN is an environment variable you assigned to your // API WRITE token value. token := os.Getenv("INFLUX_TOKEN") database := os.Getenv("INFLUX_DATABASE") // Initialize a client with URL and token, // and set the timestamp precision for writes. client, err := influxdb3.New(influxdb3.ClientConfig{ Host: "https://cloud2.influxdata.com", Token: token, Database: database, WriteOptions: &influxdb3.WriteOptions{Precision: lineprotocol.Second}, }) // Close the client when the function returns. defer func(client *influxdb3.Client) { err := client.Close() if err != nil { panic(err) } }(client) // Define line protocol records to write. // Use a raw string literal (denoted by backticks) // to preserve backslashes and prevent interpretation // of escape sequences--for example, escaped spaces in tag values. lines := [...]string{ `home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1719124000`, `home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719124000`, `home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1719127600`, `home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719127600`, `home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1719131200`, `home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719131200`, `home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1719134800`, `home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719134800`, `home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1719138400`, `home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719138400`, `home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1719142000`, `home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719142000`, `home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1719145600`, `home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719145600`, `home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1719149200`, `home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719149200`, `home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1719152800`, `home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719152800`, `home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1719156400`, `home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719156400`, `home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1719160000`, `home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719160000`, `home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1719163600`, `home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719163600`, `home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1719167200`, `home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719167200`, } // Iterate over the lines array and write each line // separately to InfluxDB for _, record := range lines { err = client.Write(context.Background(), []byte(record)) if err != nil { log.Fatalf("Error writing line protocol: %v", err) } } if err != nil { panic(err) } fmt.Println("Data has been written successfully.") return nil }
以下示例执行以下操作
导入所需的包。
定义一个
WriteLineProtocol()
函数,执行以下操作要实例化客户端,调用
influxdb3.New(influxdb3.ClientConfig)
函数并传递以下内容定义一个延迟函数,当函数返回时关闭客户端。
定义一个行协议字符串数组,其中每个字符串表示一条数据记录。
遍历行协议数组,并调用写客户端的
Write()
方法,将每行行协议单独写入 InfluxDB。
在您的编辑器中创建一个
main.go
文件,并输入以下示例代码,该代码调用WriteLineProtocol()
函数package main // Module main function func main() { WriteLineProtocol() }
要在终端中安装依赖关系并将数据写入您的 InfluxDB Cloud Serverless 存储桶,请输入以下命令
go mod tidy && go run influxdb_go_client
如果成功,则输出成功消息;否则,错误详细信息及失败消息。
如果您尚未安装,请按照 下载和安装 Node.js 和 npm 的说明 在您的系统上操作。
在您的终端中,输入以下命令以为您的项目创建一个
influxdb_js_client
目录mkdir influxdb_js_client && cd influxdb_js_client
在
influxdb_js_client
目录内,输入以下命令以初始化一个包。此示例配置了包以使用 ECMAScript 模块 (ESM)。npm init -y; npm pkg set type="module"
将
@influxdata/influxdb3-client
JavaScript 客户端库作为依赖项安装到您的项目中。npm install --save @influxdata/influxdb3-client
在您的终端或编辑器中,创建一个
write.js
文件。touch write.js
在
write.js
文件中,输入以下示例代码// write.js import { InfluxDBClient } from "@influxdata/influxdb3-client"; /** * Set InfluxDB credentials. */ const host = 'cloud2.influxdata.com'; const database = 'get-started'; /** * INFLUX_TOKEN is an environment variable you assigned to your * API WRITE token value. */ const token = process.env.INFLUX_TOKEN; /** * Write line protocol to InfluxDB using the JavaScript client library. */ export async function writeLineProtocol() { /** * Instantiate an InfluxDBClient */ const client = new InfluxDBClient({ host, token }); /** * Define line protocol records to write. */ const records = [ `home,room=Living\\ Room temp=21.1,hum=35.9,co=0i 1719124000`, `home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719124000`, `home,room=Living\\ Room temp=21.4,hum=35.9,co=0i 1719127600`, `home,room=Kitchen temp=23.0,hum=36.2,co=0 1719127600`, `home,room=Living\\ Room temp=21.8,hum=36.0,co=0i 1719131200`, `home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719131200`, `home,room=Living\\ Room temp=22.2,hum=36.0,co=0i 1719134800`, `home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719134800`, `home,room=Living\\ Room temp=22.2,hum=35.9,co=0i 1719138400`, `home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719138400`, `home,room=Living\\ Room temp=22.4,hum=36.0,co=0i 1719142000`, `home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719142000`, `home,room=Living\\ Room temp=22.3,hum=36.1,co=0i 1719145600`, `home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719145600`, `home,room=Living\\ Room temp=22.3,hum=36.1,co=1i 1719149200`, `home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719149200`, `home,room=Living\\ Room temp=22.4,hum=36.0,co=4i 1719152800`, `home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719152800`, `home,room=Living\\ Room temp=22.6,hum=35.9,co=5i 1719156400`, `home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719156400`, `home,room=Living\\ Room temp=22.8,hum=36.2,co=9i 1719160000`, `home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719160000`, `home,room=Living\\ Room temp=22.5,hum=36.3,co=14i 1719163600`, `home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719163600`, `home,room=Living\\ Room temp=22.2,hum=36.4,co=17i 1719167200`, `home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719167200`, ]; /** * Creates an array that contains separate write request promises * for all the records. */ const writePromises = records.map((record) => { return client.write(record, database, "", { precision: "s" }) .then(() => `Data has been written successfully: ${record}`, () => `Failed writing data: ${record}`); }); /** * Wait for all the write promises to settle, and then output the results. */ const writeResults = await Promise.allSettled(writePromises); writeResults.forEach(write => console.log(write.value)); /** Close the client to release resources. */ await client.close(); }
示例代码执行以下操作
导入
InfluxDBClient
类。调用
new InfluxDBClient()
构造函数,并传递一个ClientOptions
对象以实例化一个配置有 InfluxDB 凭据的客户端。host
:您的 InfluxDB 云无服务器区域 URLtoken
:一个token,具有对指定存储桶的写入访问权限。将其存储在密钥存储库或环境变量中,以避免暴露原始 token 字符串。
定义了一个列表,其中包含行协议字符串,每个字符串表示一条数据记录。
调用客户端的
write()
方法以写入每个记录,定义返回的成功或失败消息,并将挂起的承诺收集到writePromises
数组中。每次调用write()
都传递以下参数record
:行协议记录database
:要写入的 InfluxDB Cloud Serverless 存储桶的名称{precision}
:一个WriteOptions
对象,该对象设置precision
值。
由于示例行协议中的时间戳以秒精度,因此示例传递
s
作为precision
值,以将写入的 时间戳精度 设置为秒。使用承诺数组调用
Promise.allSettled()
以暂停执行,直到承诺完成,然后将包含成功和失败消息的数组分配给一个writeResults
常量。遍历并打印
writeResults
中的消息。关闭客户端以释放资源。
在您的终端或编辑器中,创建一个
index.js
文件。在
index.js
文件中,输入以下示例代码以导入和调用writeLineProtocol()
// index.js import { writeLineProtocol } from "./write.js"; /** * Execute the client functions. */ async function main() { /** Write line protocol data to InfluxDB. */ await writeLineProtocol(); } main();
在您的终端中,执行
index.mjs
以写入 InfluxDB 云无服务器node index.js
如果成功,则输出成功消息;否则,错误详细信息及失败消息。
如果您尚未安装,请按照 Microsoft.com 的下载说明 安装 .NET 和
dotnet
CLI。在您的终端中,使用 .NET 控制台 模板创建一个可执行的 C# 项目。
dotnet new console --name influxdb_csharp_client
切换到生成的
influxdb_csharp_client
目录。cd influxdb_csharp_client
运行以下命令以安装 InfluxDB v3 C# 客户端库的最新版本。
dotnet add package InfluxDB3.Client
在您的编辑器中,创建一个
Write.cs
文件并输入以下示例代码// Write.cs using System; using System.Threading.Tasks; using InfluxDB3.Client; using InfluxDB3.Client.Query; namespace InfluxDBv3; public class Write { /** * Writes line protocol to InfluxDB using the C# .NET client * library. */ public static async Task WriteLines() { // Set InfluxDB credentials const string host = "https://cloud2.influxdata.com"; string? database = "get-started"; /** * INFLUX_TOKEN is an environment variable you assigned to your * WRITE token value. */ string? token = System.Environment .GetEnvironmentVariable("INFLUX_TOKEN"); // Instantiate the InfluxDB client with credentials. using var client = new InfluxDBClient( host, token: token, database: database); /** * Define an array of line protocol strings to write. * Include an additional backslash to preserve backslashes * and prevent interpretation of escape sequences---for example, * escaped spaces in tag values. */ string[] lines = new string[] { "home,room=Living\\ Room temp=21.1,hum=35.9,co=0i 1719924000", "home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719924000", "home,room=Living\\ Room temp=21.4,hum=35.9,co=0i 1719927600", "home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719927600", "home,room=Living\\ Room temp=21.8,hum=36.0,co=0i 1719931200", "home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719931200", "home,room=Living\\ Room temp=22.2,hum=36.0,co=0i 1719934800", "home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719934800", "home,room=Living\\ Room temp=22.2,hum=35.9,co=0i 1719938400", "home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719938400", "home,room=Living\\ Room temp=22.4,hum=36.0,co=0i 1719942000", "home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719942000", "home,room=Living\\ Room temp=22.3,hum=36.1,co=0i 1719945600", "home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719945600", "home,room=Living\\ Room temp=22.3,hum=36.1,co=1i 1719949200", "home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719949200", "home,room=Living\\ Room temp=22.4,hum=36.0,co=4i 1719952800", "home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719952800", "home,room=Living\\ Room temp=22.6,hum=35.9,co=5i 1719956400", "home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719956400", "home,room=Living\\ Room temp=22.8,hum=36.2,co=9i 1719960000", "home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719960000", "home,room=Living\\ Room temp=22.5,hum=36.3,co=14i 1719963600", "home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719963600", "home,room=Living\\ Room temp=22.2,hum=36.4,co=17i 1719967200", "home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719967200" }; // Write each record separately. foreach (string line in lines) { // Write the record to InfluxDB with timestamp precision in seconds. await client.WriteRecordAsync( record: line, precision: WritePrecision.S); Console.WriteLine( "Data has been written successfully: {0,-30}", line); } } }
以下示例执行以下操作
调用
new InfluxDBClient()
构造函数以实例化一个配置有 InfluxDB 凭据的客户端。- host:您的 InfluxDB 云无服务器区域 URL
- database:要写入的 InfluxDB 云无服务器存储桶的名称
- token:具有写入指定存储桶权限的 令牌。 将其存储在秘密存储库或环境变量中,以避免暴露原始令牌字符串。
使用语句确保程序在不再需要时释放客户端。
定义一个行协议字符串数组,其中每个字符串表示一条数据记录。
调用客户端的
WriteRecordAsync()
方法将每条行协议记录写入 InfluxDB。由于样本行协议中的时间戳以秒为单位,示例将
WritePrecision.S
枚举值传递给precision:
选项,以将时间戳精度设置为秒。
在您的编辑器中打开
Program.cs
文件,并用以下内容替换其内容// Program.cs using System; using System.Threading.Tasks; namespace InfluxDBv3; public class Program { public static async Task Main() { await Write.WriteLineProtocol(); } }
Program
类与您在上一步骤中定义的Write
类共享相同的InfluxDBv3
命名空间,并定义了一个Main()
函数,该函数调用Write.WriteLineProtocol()
。`dotnet` CLI将`Program.Main()`识别为您的程序的入口点。要构建和执行程序并将行协议写入您的InfluxDB Cloud Serverless桶,请在您的终端中输入以下命令
dotnet run
如果成功,则输出成功消息;否则,错误详细信息及失败消息。
本教程假定使用Maven版本3.9和Java版本>= 15。
在您的终端或编辑器中使用Maven生成项目——例如
mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate \ -DarchetypeArtifactId="maven-archetype-quickstart" \ -DarchetypeGroupId="org.apache.maven.archetypes" -DarchetypeVersion="1.4" \ -DgroupId="com.influxdbv3" -DartifactId="influxdb_java_client" -Dversion="1.0"
Maven创建了一个
<artifactId>
目录(./influxdb_java_client
),其中包含一个pom.xml
和您的com.influxdbv3.influxdb_java_client
Java应用程序的脚手架。在您的终端或编辑器中切换到
./influxdb_java_client
目录——例如cd ./influxdb_java_client
在您的编辑器中打开Maven配置文件
pom.xml
,并将com.influxdb.influxdb3-java
客户端库添加到dependencies
中。... <dependencies> ... <dependency> <groupId>com.influxdb</groupId> <artifactId>influxdb3-java</artifactId> <version>0.1.0</version> </dependency> ... </dependencies>
要检查您的
pom.xml
是否存在问题,请运行Maven的validate
命令——例如,在您的终端中输入以下内容mvn validate
在您的编辑器中,导航到
./influxdb_java_client/src/main/java/com/influxdbv3
目录,并创建一个Write.java
文件。在
Write.java
中,输入以下示例代码// Write.java package com.influxdbv3; import java.util.List; import com.influxdb.v3.client.InfluxDBClient; import com.influxdb.v3.client.write.WriteOptions; import com.influxdb.v3.client.write.WritePrecision; /** * Writes line protocol to InfluxDB using the Java client * library. */ public final class Write { /** * Write data to InfluxDB v3. */ private Write() { //not called } /** * @throws Exception */ public static void writeLineProtocol() throws Exception { // Set InfluxDB credentials final String host = "https://cloud2.influxdata.com"; final String database = "get-started"; /** * INFLUX_TOKEN is an environment variable you assigned to your * WRITE token value. */ final char[] token = (System.getenv("INFLUX_TOKEN")). toCharArray(); // Instantiate the InfluxDB client. try (InfluxDBClient client = InfluxDBClient.getInstance(host, token, database)) { // Create a list of line protocol records. final List<String> records = List.of( "home,room=Living\\ Room temp=21.1,hum=35.9,co=0i 1719924000", "home,room=Kitchen temp=21.0,hum=35.9,co=0i 1719924000", "home,room=Living\\ Room temp=21.4,hum=35.9,co=0i 1719927600", "home,room=Kitchen temp=23.0,hum=36.2,co=0i 1719927600", "home,room=Living\\ Room temp=21.8,hum=36.0,co=0i 1719931200", "home,room=Kitchen temp=22.7,hum=36.1,co=0i 1719931200", "home,room=Living\\ Room temp=22.2,hum=36.0,co=0i 1719934800", "home,room=Kitchen temp=22.4,hum=36.0,co=0i 1719934800", "home,room=Living\\ Room temp=22.2,hum=35.9,co=0i 1719938400", "home,room=Kitchen temp=22.5,hum=36.0,co=0i 1719938400", "home,room=Living\\ Room temp=22.4,hum=36.0,co=0i 1719942000", "home,room=Kitchen temp=22.8,hum=36.5,co=1i 1719942000", "home,room=Living\\ Room temp=22.3,hum=36.1,co=0i 1719945600", "home,room=Kitchen temp=22.8,hum=36.3,co=1i 1719945600", "home,room=Living\\ Room temp=22.3,hum=36.1,co=1i 1719949200", "home,room=Kitchen temp=22.7,hum=36.2,co=3i 1719949200", "home,room=Living\\ Room temp=22.4,hum=36.0,co=4i 1719952800", "home,room=Kitchen temp=22.4,hum=36.0,co=7i 1719952800", "home,room=Living\\ Room temp=22.6,hum=35.9,co=5i 1719956400", "home,room=Kitchen temp=22.7,hum=36.0,co=9i 1719956400", "home,room=Living\\ Room temp=22.8,hum=36.2,co=9i 1719960000", "home,room=Kitchen temp=23.3,hum=36.9,co=18i 1719960000", "home,room=Living\\ Room temp=22.5,hum=36.3,co=14i 1719963600", "home,room=Kitchen temp=23.1,hum=36.6,co=22i 1719963600", "home,room=Living\\ Room temp=22.2,hum=36.4,co=17i 1719967200", "home,room=Kitchen temp=22.7,hum=36.5,co=26i 1719967200" ); /** * Write each record separately to InfluxDB with timestamp * precision in seconds. * If no error occurs, print a success message. * */ for (String record : records) { client.writeRecord(record, new WriteOptions(null, null, WritePrecision.S)); System.out.printf("Data has been written successfully: %s%n", record); } } } }
示例代码执行以下操作
导入以下类
java.util.List
;com.influxdb.v3.client.InfluxDBClient
com.influxdb.v3.client.write.WriteParameters
com.influxdb.v3.client.write.WritePrecision
调用
InfluxDBClient.getInstance()
以实例化一个配置了InfluxDB凭据的客户端。host
:您的 InfluxDB 云无服务器区域 URLdatabase
:要写入的 InfluxDB Cloud Serverless 存储桶的名称token
:一个token,具有对指定存储桶的写入访问权限。将其存储在密钥存储库或环境变量中,以避免暴露原始 token 字符串。
定义了一个列表,其中包含行协议字符串,每个字符串表示一条数据记录。
调用客户端的
writeRecord()
方法将每个记录单独写入InfluxDB。由于示例行协议中的时间戳以秒为单位,因此示例将
WritePrecision.S
枚举值作为precision
参数传递,以将写入时间戳精度设置为秒。
在您的编辑器中打开
App.java
文件(由Maven创建),并用以下示例代码替换其内容// App.java package com.influxdbv3; /** * Execute the client functions. * */ public class App { /** * @param args * @throws Exception */ public static void main(final String[] args) throws Exception { // Write data to InfluxDB v3. Write.writeLineProtocol(); } }
App
类和Write
类属于同一个com.influxdbv3
包(您的项目groupId
)。App
定义了一个main()
函数,该函数调用Write.writeLineProtocol()
。
在您的终端或编辑器中使用Maven安装依赖关系并编译项目代码——例如
mvn compile
在您的终端或编辑器中执行
App.main()
以写入InfluxDB——例如,使用Mavenmvn exec:java -Dexec.mainClass="com.influxdbv3.App"
如果成功,则输出成功消息;否则,错误详细信息及失败消息。
查看写入的数据
时间 | 房间 | co | hum | temp |
---|---|---|---|---|
2022-01-01T08:00:00Z | 厨房 | 0 | 35.9 | 21 |
2022-01-01T09:00:00Z | 厨房 | 0 | 36.2 | 23 |
2022-01-01T10:00:00Z | 厨房 | 0 | 36.1 | 22.7 |
2022-01-01T11:00:00Z | 厨房 | 0 | 36 | 22.4 |
2022-01-01T12:00:00Z | 厨房 | 0 | 36 | 22.5 |
2022-01-01T13:00:00Z | 厨房 | 1 | 36.5 | 22.8 |
2022-01-01T14:00:00Z | 厨房 | 1 | 36.3 | 22.8 |
2022-01-01T15:00:00Z | 厨房 | 3 | 36.2 | 22.7 |
2022-01-01T16:00:00Z | 厨房 | 7 | 36 | 22.4 |
2022-01-01T17:00:00Z | 厨房 | 9 | 36 | 22.7 |
2022-01-01T18:00:00Z | 厨房 | 18 | 36.9 | 23.3 |
2022-01-01T19:00:00Z | 厨房 | 22 | 36.6 | 23.1 |
2022-01-01T20:00:00Z | 厨房 | 26 | 36.5 | 22.7 |
2022-01-01T08:00:00Z | 客厅 | 0 | 35.9 | 21.1 |
2022-01-01T09:00:00Z | 客厅 | 0 | 35.9 | 21.4 |
2022-01-01T10:00:00Z | 客厅 | 0 | 36 | 21.8 |
2022-01-01T11:00:00Z | 客厅 | 0 | 36 | 22.2 |
2022-01-01T12:00:00Z | 客厅 | 0 | 35.9 | 22.2 |
2022-01-01T13:00:00Z | 客厅 | 0 | 36 | 22.4 |
2022-01-01T14:00:00Z | 客厅 | 0 | 36.1 | 22.3 |
2022-01-01T15:00:00Z | 客厅 | 1 | 36.1 | 22.3 |
2022-01-01T16:00:00Z | 客厅 | 4 | 36 | 22.4 |
2022-01-01T17:00:00Z | 客厅 | 5 | 35.9 | 22.6 |
2022-01-01T18:00:00Z | 客厅 | 9 | 36.2 | 22.8 |
2022-01-01T19:00:00Z | 客厅 | 14 | 36.3 | 22.5 |
2022-01-01T20:00:00Z | 客厅 | 17 | 36.4 | 22.2 |
恭喜!您已将数据写入InfluxDB。现在数据已存储在InfluxDB中,让我们查询它。
这个页面有用吗?
感谢您的反馈!