使用InfluxDB API写入数据
此页面记录了InfluxDB OSS的早期版本。InfluxDB OSS v2 是最新的稳定版本。请参见等效的 InfluxDB v2 文档: 将数据写入InfluxDB。
使用命令行接口、客户端库和用于常见数据格式的插件(如Graphite)将数据写入InfluxDB。
注意: 以下示例使用
curl,一个通过 URLs 传输数据的命令行工具。了解curl的基础知识请参考 HTTP 脚本指南。
使用InfluxDB API创建数据库
要创建数据库,向 /query 端点发送一个 POST 请求,并将 URL 参数 q 设置为 CREATE DATABASE 。
以下示例向运行在 localhost 上的 InfluxDB 发送请求并创建 mydb 数据库:
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"
使用 InfluxDB API 写入数据
InfluxDB API 是将数据写入 InfluxDB 的主要方式。
要使用 InfluxDB v1 API 向数据库写入数据,请向
/write端点发送POST请求。以下示例展示了如何将一个点写入
mydb数据库。点数据由测量cpu_load_short、标签键host和region以及 标签值server01和us-west、字段键value以及 字段值 为0.64、和 时间戳1434055562000000000组成。
curl -i -XPOST 'http://localhost:8086/write?db=mydb'
--data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
- 要使用 InfluxDB 2.0 API(兼容 InfluxDB 1.8+)写入数据库,请向
/api/v2/write端点发送POST请求:
curl -i -XPOST 'http://localhost:8086/api/v2/write?bucket=db/rp&precision=ns' \
--header 'Authorization: Token username:password' \
--data-raw 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
在写入点时,您必须在 db 查询参数中指定一个现有的数据库。如果您未通过 rp 查询参数提供保留策略,点将写入 db 的默认保留策略。有关可用查询参数的完整列表,请参阅 InfluxDB API Reference 文档。
POST的主体或InfluxDB行协议包含您想要存储的时间序列数据。数据包括:
- 测量(必填)
- 标签: 严格来说,标签是可选的,但大多数系列包括标签以区分数据源,并使查询既简单又高效。标签键和值都是字符串。
- 字段(必填): 字段键是必需的,并且总是字符串,并且, 默认情况下,字段值是浮点数。
- 时间戳: 在行的末尾以自1970年1月1日UTC以来的纳秒为单位的Unix时间提供 - 是可选的。如果不指定时间戳,InfluxDB将使用服务器的本地纳秒时间戳(Unix纪元)。在InfluxDB中的时间默认采用UTC格式。
注意: 避免使用以下保留关键字:
_field,_measurement, 和time。 如果将保留关键字作为标签或字段键包含,相关的点将被丢弃。
配置 gzip 压缩
InfluxDB支持gzip压缩。为了减少网络流量,请考虑以下选项:
要接受来自InfluxDB的压缩数据,请在InfluxDB API请求中添加
Accept-Encoding: gzip头部。在将数据发送到 InfluxDB 之前,要对其进行压缩,请在 InfluxDB API 请求中添加
Content-Encoding: gzip标头。
有关为客户端库启用gzip的详细信息,请参阅您的客户端库文档。
在Telegraf InfluxDB输出插件中启用gzip压缩
- 在Telegraf配置文件(telegraf.conf)中,在[[outputs.influxdb]]下,将
content_encoding = "identity"(默认)更改为content_encoding = "gzip"
注意 写入 InfluxDB 2.x [[outputs.influxdb_v2]] 默认配置为以 gzip 格式压缩内容。
写多个点
通过用换行符分隔每个点,同时将多个点发布到多个系列中。以这种方式批处理点会导致更高的性能。
以下示例将三个点写入数据库 mydb。 第一个点属于测量 cpu_load_short 的系列,标签集为 host=server02,并具有服务器的本地时间戳。 第二个点属于测量 cpu_load_short 的系列,标签集为 host=server02,region=us-west,并具有指定的时间戳 1422568543702900257。 第三个点具有与第二个点相同的指定时间戳,但它被写入测量 cpu_load_short 的系列,标签集为 direction=in,host=server01,region=us-west。
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'
从文件中写入要点
通过将 @filename 传递给 curl 来写入文件中的数据点。文件中的数据应遵循 InfluxDB 行协议语法。
正确格式的文件示例 (cpu_data.txt):
cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257
将数据写入 cpu_data.txt 到 mydb 数据库:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @cpu_data.txt
注意: 如果您的数据文件超过5,000个点,可能需要将该文件拆分为多个文件,以便将您的数据分批写入InfluxDB。 默认情况下,HTTP请求在五秒后超时。 InfluxDB仍会尝试在超时后写入这些数据点,但无法确认它们是否已成功写入。
无模式设计
InfluxDB 是一个无模式数据库。 您可以随时添加新的测量值、标签和字段。 请注意,如果您尝试写入与之前使用的不同类型的数据(例如,将字符串写入之前接受整数的字段),InfluxDB 将拒绝这些数据。
关于REST的说明
InfluxDB仅将HTTP作为一种方便且广泛支持的数据传输协议。
现代网络API已选择REST,因为它满足了一个共同的需求。随着端点数量的增加,对组织系统的需求变得迫切。REST是行业公认的大量端点组织风格。这种一致性对开发和使用API的人员都是有益的:所有相关人员都知道该期待什么。
然而,REST是一种约定。 InfluxDB 仅提供三个 API 端点。 这个简单、易于理解的系统使用 HTTP 作为InfluxQL的传输方法。 InfluxDB API并没有试图遵循RESTful标准。
HTTP响应摘要
- 2xx: 如果您的写入请求收到
HTTP 204 No Content,那么它是成功的! - 4xx:InfluxDB 无法理解请求。
- 5xx: 系统过载或严重受损。
示例
将浮点数写入先前接受布尔值的字段
curl -i -XPOST 'http://localhost:8086/write?db=hamlet' --data-binary 'tobeornottobe booleanonly=true'
curl -i -XPOST 'http://localhost:8086/write?db=hamlet' --data-binary 'tobeornottobe booleanonly=5'
返回:
HTTP/1.1 400 Bad Request
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 01 Mar 2017 19:38:01 GMT
Content-Length: 150
{"error":"field type conflict: input field \"booleanonly\" on measurement \"tobeornottobe\" is type float, already exists as type boolean dropped=1"}
将一个点写入一个不存在的数据库
curl -i -XPOST 'http://localhost:8086/write?db=atlantis' --data-binary 'liters value=10'
返回:
HTTP/1.1 404 Not Found
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 01 Mar 2017 19:38:35 GMT
Content-Length: 45
{"error":"database not found: \"atlantis\""}
后续步骤
现在您知道如何使用 InfluxDB API 写入数据,来了解如何使用 查询数据 指南进行查询吧!有关使用 InfluxDB API 写入数据的更多信息,请参见 InfluxDB API 参考。