Documentation

使用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标签键 hostregion 以及 标签值 server01us-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.txtmydb 数据库:

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 参考



Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: