Documentation

使用InfluxDB API写入数据

使用命令行接口客户端库和用于常见数据格式的插件(如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 API写入数据库,发送一个POST请求到/write端点,并包含以下内容:

    • db=DATABASE_NAME query parameter: Specifies the database to write data to.
    • rp=RETENTION_POLICY query parameter: Optional. If set, InfluxDB uses the specified retention policy; otherwise, uses the default retention policy.
    • A request body that contains time series data in InfluxDB line protocol format.

    有关可用查询参数的完整列表,请参见InfluxDB API Reference文档。

    以下示例展示了如何将单个点写入mydb数据库:

    curl -i -XPOST 'http://localhost:8086/write?db=mydb' \
    --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
    

    以下示例展示了如何将一个点写入mydb数据库和90d保留策略:

    curl -i -XPOST 'http://localhost:8086/write?db=mydb&rp=90d' \
    --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 请求,并包含?bucket=DATABASE_NAME/RETENTION_POLICY 查询参数——例如:

    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'
    

前面的例子使用了 curl --data- 选项来包含一个 POST 请求体,该请求体包含您想要存储的时间序列数据的 InfluxDB 行协议

// Syntax
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]

// Example
cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000

行协议元素

每行行协议包含以下元素:

* Required
  • * measurement: 用于标识存储数据的measurement的字符串。
  • tag set: 以逗号分隔的键值对列表,每个代表一个标签。Tag keystag values 是未加引号的字符串。 空格、逗号和等号字符必须被转义。
  • * 字段集: 以逗号分隔的键值对列表,每个表示一个字段。 字段键 是未加引号的字符串。 空格和逗号必须转义。 字段值 可以是字符串(带引号)、 浮点数、 整数、 布尔值。 默认是浮点数。
  • timestamp: 与数据相关的Unix时间戳。 InfluxDB支持高达纳秒的精度。 如果数据中的时间戳精度不是纳秒,请在写入数据到InfluxDB时指定 精度。有关更多信息,请参见 line protocol data types

行协议元素解析

  • measurement: 在第一个未转义的逗号之前的第一个空格之前的所有内容
  • 标签集: 在第一个未转义的逗号第一个未转义的空格之间的键值对。
  • 字段集: 在第一个和第二个未转义的空白字符之间的键值对。
  • timestamp: 在第二个未转义空格之后的整数值。
  • 行通过换行符分隔 (\n)。行协议对空格敏感。

myMeasurement,tag1=val1,tag2=val2 field1="v1",field2=1i 0000000000000000000

注意: 避免使用以下保留关键字: _field_measurement, 和 time。 如果将保留关键字作为标签或字段键包含,相关的点将被丢弃。

配置 gzip 压缩

InfluxDB 支持 gzip 压缩,以减少 API 请求期间消耗的带宽。

  • 要接受来自 InfluxDB 的压缩数据,请在您的 InfluxDB API 请求中包含 Accept-Encoding: gzip 头部。

  • 当向 InfluxDB 发送 gzip 压缩数据时,在您的 InfluxDB API 请求中包含 Content-Encoding: gzip 头部。

    例如,使用 curl 将压缩数据写入 InfluxDB,请执行以下操作:

    1. 使用gzip创建一个包含压缩行协议的文件—例如,在终端中输入以下命令:

      echo "mem,host=host1 used_percent=23.43234543 1641024000
      mem,host=host2 used_percent=26.81522361 1641027600
      mem,host=host1 used_percent=22.52984738 1641031200
      mem,host=host2 used_percent=27.18294630 1641034800" | gzip > system.gzip
      
    2. 在你的 curl 命令中,包含 Content-Encoding: gzip 头和 --data-binary 选项——例如:

      curl "http://localhost:8086/write?db=mydb&rp=90d&precision=s" \
      --header "Content-Type: text/plain; charset=utf-8" \
      --header "Content-Encoding: gzip" \
      --data-binary @system.gzip
      

有关为客户端库启用gzip的详细信息,请参阅客户端库文档。

在Telegraf InfluxDB输出插件中启用gzip压缩

  1. 在您的编辑器中,打开 telegraf.conf Telegraf 配置文件并找到 [[outputs.influxdb]]
  2. [[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

注意: 如果您的数据文件超过5000个点,可能需要将该文件拆分为多个文件,以便将数据分批写入InfluxDB。 默认情况下,HTTP请求在五秒后超时。 InfluxDB仍然尝试在超时后写入点,但服务器不会发送确认,表示它们已成功写入。

无模式设计

InfluxDB 是一个无模式数据库。
您可以随时添加新的测量值、标签和字段。
请注意,如果您尝试写入不同类型的数据(例如,将字符串写入之前接受整数的字段),InfluxDB 将拒绝这些数据点。

关于REST的说明

InfluxDB使用HTTP作为一种方便且广泛支持的数据传输协议。

现代网络API使用REST,因为它满足了一种共同的需求。 随着端点数量的增长,组织系统的需求变得紧迫。 REST是一种组织大量端点和与资源进行交互的模式。 这种模式为设计和使用API的人提供了一致性和可预测性:每个人都知道应该期待什么。

InfluxDB v1 API 的设计简单,实施了 REST 的某些特性,例如标准 HTTP 头和用于执行操作的方法。 然而,v1 API 架构并不旨在完全遵循 REST。

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中的数据!要了解有关使用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 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

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