文档文档

InfluxDB API 参考文档

此页面记录了早期版本的 InfluxDB OSS。 InfluxDB OSS v2 是最新的稳定版本。 请参阅对应的 InfluxDB v2 文档: InfluxDB HTTP API

InfluxDB API 提供了一种与数据库交互的简单方式。它使用 HTTP 身份验证和 JWT 令牌。响应使用标准 HTTP 响应代码和 JSON 格式。

要发送 API 请求,您可以使用 InfluxDB v1 客户端库InfluxDB v2 客户端库Telegraf 或您选择的客户端。

如果您开始使用 InfluxDB v1,我们建议使用 InfluxDB v1 客户端库和 InfluxQL 以获得 InfluxDB 3 兼容性

以下部分假设您的 InfluxDB 实例运行在 localhost 端口 8086 上,并且未启用 HTTPS。这些设置是可配置的

InfluxDB 3 兼容性

InfluxDB 3 是 InfluxDB 的下一代产品,它允许无限的序列基数,而不会影响整体数据库性能,并带来了原生的 SQL 支持和改进的 InfluxQL 性能。

InfluxDB 3 支持 v1 版本的 /write/query HTTP API 端点。InfluxDB 3 未针对 Flux 进行优化。

如果您开始使用 InfluxDB v1,我们建议使用 InfluxDB v1 客户端库和 InfluxQL。当您准备就绪时,您可以迁移到 InfluxDB 3 并继续使用 v1 客户端库,同时逐步将您的查询工作负载迁移到使用 v3 客户端库(和 v3 Flight API)。

有关更多信息,请参阅 InfluxDB 3 的 API 兼容性和迁移指南

InfluxDB 2.x API 兼容性端点

InfluxDB 1.8.0 引入了 InfluxDB v2 的向前兼容性 API。InfluxDB v2 客户端库是为 InfluxDB v2 API 构建的,但也适用于 InfluxDB 1.8+

InfluxDB v1 支持以下 v2 兼容的 API

端点描述
/api/v2/query使用 InfluxDB v2 API 和 Flux 在 InfluxDB 1.8.0+ 中查询数据
/api/v2/write使用 InfluxDB v2 API 写入数据到 InfluxDB 1.8.0+ (兼容 InfluxDB v2 客户端库)
/api/v2/buckets允许一些使用 bucket 的客户端代码在 1.x 和 2.x 版本上运行而无需修改
/api/v2/delete支持使用 InfluxDB v2 API 按标签值、时间戳和 measurement 删除数据 (兼容 InfluxDB v2 客户端库)
/health检查 InfluxDB 实例的健康状况

/api/v2/query/ HTTP 端点

/api/v2/query 端点接受 POST HTTP 请求。使用此端点使用 FluxInfluxDB v2 客户端库查询数据。Flux 是在 InfluxDB v2 中处理数据的主要语言。

包含以下 HTTP 标头

  • Accept: application/csv
  • Content-type: application/vnd.flux
  • 如果启用了身份验证,请提供您的 InfluxDB 用户名和密码
    Authorization: Token username:password
curl -XPOST localhost:8086/api/v2/query -sS \
  -H 'Accept:application/csv' \
  -H 'Content-type:application/vnd.flux' \
  -d 'from(bucket:"telegraf")
        |> range(start:-5m)
        |> filter(fn:(r) => r._measurement == "cpu")'
curl -XPOST localhost:8086/api/v2/query -sS \
  -H 'Accept:application/csv' \
  -H 'Content-type:application/vnd.flux' \
  -H 'Authorization: Token username:password' \
  -d 'from(bucket:"telegraf")
        |> range(start:-5m)
        |> filter(fn:(r) => r._measurement == "cpu")'

/api/v2/write/ HTTP 端点

/api/v2/write 端点接受 POST HTTP 请求。使用此端点,通过 InfluxDB v2 客户端库写入数据到 InfluxDB 1.8.0+ 数据库。

InfluxDB 1.x 和 2.0 API 都支持原始时间序列数据的相同行协议格式。就写入数据而言,API 仅在 URL 参数和请求标头方面有所不同。InfluxDB v2 使用 organizationbucket 来代替数据库和保留策略。/api/v2/write 端点将提供的 1.x 版本数据库和保留策略映射到一个 bucket。

包含以下 URL 参数

  • bucket: 提供数据库名称和保留策略,用正斜杠 (/) 分隔。例如:database/retention-policy。空的保留策略映射到默认保留策略。database/weekly 映射到名为 “database” 的数据库和名为 “weekly” 的保留策略。database/database 映射到名为 “database” 的数据库和默认保留策略。
  • org: 在 InfluxDB 1.x 中,没有 organization 的概念。org 参数将被忽略,可以留空。
  • precision: 行协议中时间戳的精度。接受 ns (纳秒)、us(微秒)、ms (毫秒) 和 s (秒)。

包含以下 HTTP 标头

  • Authorization: 在 InfluxDB v2 中,使用 API 令牌来访问平台及其所有功能。InfluxDB v1.x 在访问 HTTP API 时使用用户名和密码组合。使用 Token schema 提供您的 InfluxDB 1.x 用户名和密码,用冒号 (:) 分隔。Token schema 是单词 Token,一个空格,以及您的凭据(所有内容都区分大小写)。例如:Authorization: Token username:password
curl -XPOST "localhost:8086/api/v2/write?bucket=db/rp&precision=s" \
  --data-raw "mem,host=host1 used_percent=23.43234543 1556896326"
curl -XPOST "localhost:8086/api/v2/write?bucket=db/rp&precision=s" \
  -H 'Authorization: Token <username>:<password>' \
  --data-raw "mem,host=host1 used_percent=23.43234543 1556896326"

/api/v2/buckets/ HTTP 端点

/api/v2/buckets 端点接受 GETPOSTDELETE HTTP 请求。使用此端点在您的 InfluxDB 实例中创建删除列出更新检索 bucket。请注意,InfluxDB 2.x 使用 organization 和 bucket 来代替数据库和保留策略。

包含以下 URL 参数

  • bucket: 提供数据库名称和保留策略,用正斜杠 (/) 分隔。例如:database/retention-policy。空的保留策略映射到默认保留策略。
  • org: 在 InfluxDB 1.x 中,没有 organization 的概念。org 参数将被忽略,可以留空。

包含以下 HTTP 标头

  • Authorization: InfluxDB 2.x 使用此标头与 Token schema 和 API 令牌来验证每个 API 请求。InfluxDB v1.x 使用用户名和密码凭据来验证 API 请求。要提供 InfluxDB 1.x 凭据,请使用 Token schema 并包含您的用户名和密码,用冒号 (:) 分隔。

    • Token schema 与 v1.x 凭据

      Authorization: Token USERNAME:PASSWORD
      

以下示例展示了如何列出所有数据库

curl --request GET "https://127.0.0.1:8086/api/v2/buckets"   
  -H 'Authorization: Token <username>:<password>'

以下示例展示了如何删除名为 test 的数据库

curl --request DELETE "https://127.0.0.1:8086/api/v2/buckets/test/autogen" 
  --header "Content-type: application/json"   
  -H 'Authorization: Token <username>:<password>'

/api/v2/delete/ HTTP 端点

/api/v2/delete 端点接受 POST HTTP 请求。使用此端点从 InfluxDB 中删除数据点,包括具有特定标签值、时间戳和 measurement 的数据点。

包含以下 URL 参数

  • bucket: 提供数据库名称和保留策略,用正斜杠 (/) 分隔。例如:database/retention-policy
  • precision: 行协议中时间戳的精度。接受 ns (纳秒)、us(微秒)、ms (毫秒) 和 s (秒)。

包含以下 HTTP 标头

  • Authorization: InfluxDB 2.x 使用此标头与 Token schema 和 API 令牌来验证每个 API 请求。InfluxDB v1.x 使用用户名和密码凭据来验证 API 请求。要提供 InfluxDB 1.x 凭据,请使用 Token schema 并包含您的用户名和密码,用冒号 (:) 分隔。

    • Token schema 与 v1.x 凭据

      Authorization: Token USERNAME:PASSWORD
      

删除指定时间范围内的所有数据点

curl --request POST "https://127.0.0.1:8086/api/v2/delete?bucket=exampleDB/autogen \
  --header 'Authorization: Token <username>:<password>' \
  --header 'Content-Type: application/json' \
  --data '{
    "start": "2020-03-01T00:00:00Z",
    "stop": "2020-11-14T00:00:00Z"
    }'

删除具有特定标签值的特定 measurement 中的数据点

curl --request POST "https://127.0.0.1:8086/api/v2/delete?bucket=exampleDB/autogen \
  --header 'Authorization: Token <username>:<password>' \
  --header 'Content-Type: application/json' \
  --data '{
    "start": "2020-03-01T00:00:00Z",
    "stop": "2020-11-14T00:00:00Z",
    "predicate": "_measurement=\"example-measurement\" AND exampleTag=\"exampleTagValue\""
    }'

如果您在请求中使用 predicate 选项,请查看 删除谓词语法并注意其局限性

/health HTTP 端点

/health 端点接受 Get HTTP 请求。使用此端点检查您的 InfluxDB 实例的健康状况。

curl -XGET "localhost:8086/health"
/health 端点响应
响应代码健康状况消息状态
200健康准备好进行查询和写入通过
503不健康失败

InfluxDB 1.x HTTP 端点

以下 InfluxDB 1.x API 端点可用

端点描述
/debug/pprof生成用于故障排除的 profile
/debug/requests跟踪 HTTP 客户端对 /write/query 端点的请求
/debug/vars收集 InfluxDB 内部统计信息
/ping检查 InfluxDB 实例的状态和 InfluxDB 版本
/query使用 InfluxQL 查询数据,管理数据库、保留策略和用户
/write写入数据到数据库

/debug/pprof HTTP 端点

InfluxDB 支持 Go net/http/pprof HTTP 端点,这些端点对于故障排除非常有用。pprof 包以 pprof 可视化工具期望的格式提供运行时 profile 数据。

定义

curl https://127.0.0.1:8086/debug/pprof/

/debug/pprof/ 端点生成一个 HTML 页面,其中包含内置 Go profile 列表以及每个 profile 的超链接。

Profile描述
block导致在同步原语上阻塞的堆栈跟踪。
goroutine所有当前 goroutine 的堆栈跟踪。
heap堆分配的堆栈跟踪采样。
mutex争用互斥锁持有者的堆栈跟踪。
threadcreate导致创建新 OS 线程的堆栈跟踪。

要访问上面列出的 /debug/pprof/ profile 之一,请使用以下 cURL 请求,将 <profile> 替换为 profile 的名称。生成的 profile 将输出到 <path/to/output-file> 中指定的文件。

curl -o <path/to/output-file>  https://127.0.0.1:8086/debug/pprof/<profile>

在以下示例中,cURL 命令将生成的 heap profile 输出到文件

curl -o <path/to/output-file> https://127.0.0.1:/8086/debug/pprof/heap

您还可以使用 Go pprof 交互式工具来访问 InfluxDB /debug/pprof/ profile。例如,要使用此工具查看 InfluxDB 实例的 heap profile,您可以使用如下命令

go tool pprof https://127.0.0.1:8086/debug/pprof/heap

有关 Go /net/http/pprof 包和交互式 pprof 分析和可视化工具的更多信息,请参阅

/debug/pprof/all HTTP 端点

/debug/pprof/all 端点是一个自定义的 /debug/pprof profile,主要供 InfluxData 支持部门使用。此端点生成一个 profile.tar.gz 归档文件,其中包含带有标准 Go profile 信息的文本文件以及其他调试数据。当使用 cpu= 选项后跟持续时间(以秒为单位)(例如,cpu=30s)时,将生成可选的 CPU profile。

要创建 profile.tar.gz 归档文件,请使用以下 cURL 命令生成 profile.tar.gz 文件,以便与 InfluxData 支持部门共享。

curl -o profiles.tar.gz "https://127.0.0.1:8086/debug/pprof/all?cpu=30s"

如下例所示,cURL 输出包括 “Time Spent”,即经过的时间(以秒为单位)。收集 30 秒的数据后,结果将输出到文件。

➜  ~ curl -o profiles.tar.gz "https://127.0.0.1:8086/debug/pprof/all?cpu=30s"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  237k    0  237k    0     0   8025      0 --:--:--  0:00:30 --:--:-- 79588

如果使用 InfluxDB 1.8.3 或更早版本,请使用 /debug/pprof/all?cpu=true

/debug/requests HTTP 端点

使用此端点跟踪 HTTP 客户端对 /write/query 端点的请求。/debug/requests 端点返回每个用户名和 IP 地址对 InfluxDB 的写入和查询次数。

定义

curl https://127.0.0.1:8086/debug/requests

查询字符串参数

查询字符串参数可选/必需定义
seconds=<integer>可选设置客户端收集信息的持续时间(以秒为单位)。默认持续时间为十秒。

示例

跟踪十秒间隔内的请求
$ curl https://127.0.0.1:8086/debug/requests

{
"user1:123.45.678.91": {"writes":1,"queries":0},
}

响应显示,在过去十秒内,user1 用户从 123.45.678.91 IP 地址向 /write 端点发送了一个请求,并且没有向 /query 端点发送任何请求。

跟踪一分钟间隔内的请求
$ curl https://127.0.0.1:8086/debug/requests?seconds=60

{
"user1:123.45.678.91": {"writes":3,"queries":0},
"user1:000.0.0.0": {"writes":0,"queries":16},
"user2:xx.xx.xxx.xxx": {"writes":4,"queries":0}
}

响应显示,在过去一分钟内,user1123.45.678.91/write 端点发送了三个请求,user1000.0.0.0/query 端点发送了 16 个请求,user2xx.xx.xxx.xxx/write 端点发送了四个请求。

/debug/vars HTTP 端点

InfluxDB 通过 /debug/vars 端点公开有关其运行时的统计信息和信息,可以使用以下 cURL 命令访问该端点

curl https://127.0.0.1:8086/debug/vars

服务器统计信息和信息以 JSON 格式显示。有关 InfluxDB HTTP 服务器指标的信息,请参阅 httpd measurement

注意: InfluxDB 输入插件(InfluxDB input plugin)可用于从指定的 Kapacitor 实例收集指标(使用 /debug/vars 端点)。有关 measurement 和字段的列表,请参阅 InfluxDB 输入插件 README

/ping HTTP 端点

ping 端点接受 GETHEAD HTTP 请求。使用此端点检查 InfluxDB 实例的状态和 InfluxDB 版本。

定义

GET https://127.0.0.1:8086/ping
HEAD https://127.0.0.1:8086/ping

verbose 选项

默认情况下,/ping HTTP 端点返回一个简单的 HTTP 204 状态响应,以告知客户端服务器正在运行。默认值为 false。当 verbose 选项设置为 true (/ping?verbose=true) 时,将返回 HTTP 200 状态。verbose=true 选项是 Google Cloud Load Balancing 健康检查所必需的。

示例

您可以使用 /ping 端点查找 InfluxDB 实例的 build 和版本。X-Influxdb-Build 标头字段显示 InfluxDB build 类型,OSS (开源) 或 ENT (企业版)。X-Influxdb-Version 标头字段显示 InfluxDB 版本。

~ curl -sl -I https://127.0.0.1:8086/ping

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 9c353b0e-aadc-11e8-8023-000000000000
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.11.8
X-Request-Id: 9c353b0e-aadc-11e8-8023-000000000000
Date: Tue, 05 Nov 2018 16:08:32 GMT

状态代码和响应

响应正文为空。

HTTP 状态代码描述
204成功!您的 InfluxDB 实例已启动并运行。

/query HTTP 端点

/query 端点接受 GETPOST HTTP 请求。使用此端点查询数据并管理数据库、保留策略和用户。

定义

GET https://127.0.0.1:8086/query
POST https://127.0.0.1:8086/query

动词用法

动词查询类型
GET用于所有以 开头的查询

SELECT*

SHOW
POST用于所有以 开头的查询

ALTER

CREATE

DELETE

DROP

GRANT

KILL

REVOKE

* 唯一的例外是包含 INTO 子句SELECT 查询。这些 SELECT 查询需要 POST 请求。

示例

使用 SELECT 语句查询数据
$ curl -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas"'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null],["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

mymeas measurement 有两个数据点。第一个数据点的时间戳为 2017-03-01T00:16:18Zmyfield 值为 33.1,并且 mytag1mytag2 标签键没有标签值。第二个数据点的时间戳为 2017-03-01T00:17:18Zmyfield 值为 12.4mytag1 值为 12mytag2 值为 14

在 InfluxDB 命令行界面 (CLI) 中的相同查询返回以下表格

name: mymeas
time                  myfield  mytag1  mytag2
----                  -------  ------  ------
2017-03-01T00:16:18Z  33.1
2017-03-01T00:17:18Z  12.4     12      14
使用 SELECT 语句和 INTO 子句查询数据
$ curl -XPOST 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * INTO "newmeas" FROM "mymeas"'

{"results":[{"statement_id":0,"series":[{"name":"result","columns":["time","written"],"values":[["1970-01-01T00:00:00Z",2]]}]}]}

包含 INTO 子句SELECT 查询需要 POST 请求。

响应显示 InfluxDB 将两个数据点写入 newmeas measurement。请注意,系统使用 epoch 0 (1970-01-01T00:00:00Z) 作为空时间戳的等效值

创建数据库
$ curl -XPOST 'https://127.0.0.1:8086/query' --data-urlencode 'q=CREATE DATABASE "mydb"'

{"results":[{"statement_id":0}]}

成功的 CREATE DATABASE 查询不返回任何其他信息。

查询字符串参数

查询字符串参数可选/必需定义
chunked=[true | <number_of_points>]可选以流式批处理形式返回数据点,而不是以单个响应形式返回。如果设置为 true,InfluxDB 将按 series 或每 10,000 个数据点对响应进行分块,以先发生者为准。如果设置为特定值,InfluxDB 将按 series 或按该数量的数据点对响应进行分块。*
db=<database_name>数据库相关查询必需(大多数 SELECT 查询和 SHOW 查询都需要此参数)。设置查询的目标 数据库
epoch=[ns,u,µ,ms,s,m,h]可选返回具有指定精度的 epoch 时间戳。默认情况下,InfluxDB 返回 RFC3339 格式的时间戳,精度为纳秒。uµ 都表示微秒。
p=<password>如果您尚未启用身份验证,则为可选。如果您已启用身份验证,则为必需。**如果您已启用身份验证,则设置用于身份验证的密码。与查询字符串参数 u 一起使用。
pretty=true可选启用格式化 JSON 输出。虽然这对于调试很有用,但不建议在生产环境中使用,因为它会消耗不必要的网络带宽。
q=<query>必需要执行的 InfluxQL 字符串。另请参阅请求正文
u=<username>如果您尚未启用身份验证,则为可选。如果您已启用身份验证,则为必需。*如果您已启用身份验证,则设置用于身份验证的用户名。用户必须具有数据库的读取权限。与查询字符串参数 p 一起使用。

* 对于没有 chunked 参数的请求,InfluxDB 不会截断返回的行数。此行为是可配置的;有关更多信息,请参阅 max-row-limit 配置选项。

** InfluxDB API 也支持基本身份验证。如果您已启用身份验证且未使用查询字符串参数 up,请使用基本身份验证。请参阅下文中的基本身份验证示例

示例

使用 SELECT 语句查询数据并返回格式化 JSON
$ curl -G 'https://127.0.0.1:8086/query?db=mydb&pretty=true' --data-urlencode 'q=SELECT * FROM "mymeas"'

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "mymeas",
                    "columns": [
                        "time",
                        "myfield",
                        "mytag1",
                        "mytag2"
                    ],
                    "values": [
                        [
                            "2017-03-01T00:16:18Z",
                            33.1,
                            null,
                            null
                        ],
                        [
                            "2017-03-01T00:17:18Z",
                            12.4,
                            "12",
                            "14"
                        ]
                    ]
                }
            ]
        }
    ]
}
使用 SELECT 语句查询数据并返回秒精度 epoch 时间戳
$ curl -G 'https://127.0.0.1:8086/query?db=mydb&epoch=s' --data-urlencode 'q=SELECT * FROM "mymeas"'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[[1488327378,33.1,null,null],[1488327438,12.4,"12","14"]]}]}]}
使用 HTTP 身份验证创建数据库

有效凭据

$ curl -XPOST 'https://127.0.0.1:8086/query?u=myusername&p=mypassword' --data-urlencode 'q=CREATE DATABASE "mydb"'

{"results":[{"statement_id":0}]}

成功的 CREATE DATABASE 查询不返回任何其他信息。

无效凭据

$ curl -XPOST 'https://127.0.0.1:8086/query?u=myusername&p=notmypassword' --data-urlencode 'q=CREATE DATABASE "mydb"'

{"error":"authorization failed"}
使用基本身份验证创建数据库

以下示例使用有效凭据。

$ curl -XPOST -u myusername:mypassword 'https://127.0.0.1:8086/query' --data-urlencode 'q=CREATE DATABASE "mydb"'

{"results":[{"statement_id":0}]}

成功的 CREATE DATABASE 查询不返回任何其他信息。

以下示例使用无效凭据。

$ curl -XPOST -u myusername:notmypassword 'https://127.0.0.1:8086/query' --data-urlencode 'q=CREATE DATABASE "mydb"'

{"error":"authorization failed"}

请求正文

--data-urlencode "q=<InfluxQL query>"

所有查询都必须进行 URL 编码并遵循 InfluxQL 语法。我们的示例展示了 curl 中的 --data-urlencode 参数,我们在本页的所有示例中都使用了该参数。

选项

请求多个查询

用分号 ; 分隔多个查询。

从文件提交查询

API 支持使用 multipart POST 请求从文件提交查询。文件中的查询必须用分号 (;) 分隔。

语法

curl -F "q=@<path_to_file>" -F "async=true" https://127.0.0.1:8086/query
以 CSV 格式请求查询结果

语法

curl -H "Accept: application/csv" -G 'https://127.0.0.1:8086/query' [...]

请注意,当请求包含 -H "Accept: application/csv" 时,系统返回 epoch 格式的时间戳,而不是 RFC3339 格式。

绑定参数

API 支持将参数绑定到特定的字段值或标签值。在查询中使用语法 $<placeholder_key> 作为占位符,并在请求正文中对占位符键到占位符值的映射进行 URL 编码。这允许使用绑定参数表示所有值可自定义的 InfluxQL 查询,例如字段值、函数名称或间隔。

查询语法

--data-urlencode 'q= SELECT [...] WHERE [ <field_key> | <tag_key> ] = $<placeholder_key>'

Map 语法

--data-urlencode 'params={"<placeholder_key>":[ <placeholder_float_field_value> | <placeholder_integer_field_value> | "<placeholder_string_field_value>" | <placeholder_boolean_field_value> | "<placeholder_tag_value>" ]}'

用逗号 , 分隔多个占位符键值对。

示例

发送多个查询
$ curl -G 'https://127.0.0.1:8086/query?db=mydb&epoch=s' --data-urlencode 'q=SELECT * FROM "mymeas";SELECT mean("myfield") FROM "mymeas"'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[[1488327378,33.1,null,null],[1488327438,12.4,"12","14"]]}]},{"statement_id":1,"series":[{"name":"mymeas","columns":["time","mean"],"values":[[0,22.75]]}]}]}

该请求包含两个查询:SELECT * FROM "mymeas"SELECT mean("myfield") FROM "mymeas"'。在结果中,系统为每个查询返回分配一个语句标识符。第一个查询的结果的 statement_id0,第二个查询的结果的 statement_id1

以 CSV 格式请求查询结果
$ curl -H "Accept: application/csv" -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas"'

name,tags,time,myfield,mytag1,mytag2
mymeas,,1488327378000000000,33.1,mytag1,mytag2
mymeas,,1488327438000000000,12.4,12,14

第一个数据点没有 mytag1mytag2 标签键的标签值

从文件提交查询
curl -F "[email protected]" -F "async=true" 'https://127.0.0.1:8086/query'

queries.txt 中的查询示例

CREATE DATABASE mydb;
CREATE RETENTION POLICY four_weeks ON mydb DURATION 4w REPLICATION 1;
WHERE 子句中将参数绑定到特定标签值
$ curl -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas" WHERE "mytag1" = $tag_value' --data-urlencode 'params={"tag_value":"12"}'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

该请求将 $tag_value 映射到 12。InfluxDB 将标签值存储为字符串,并且必须在请求中用双引号引起来。

WHERE 子句中将参数绑定到数值字段值
$ curl -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas" WHERE "myfield" > $field_value' --data-urlencode 'params={"field_value":30}'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null]]}]}]}

该请求将 $field_value 映射到 30。值 30 不需要双引号,因为 myfield 存储数值 字段值

WHERE 子句中将两个参数绑定到特定标签值和数值字段值
$ curl -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas" WHERE "mytag1" = $tag_value AND  "myfield" < $field_value' --data-urlencode 'params={"tag_value":"12","field_value":30}'

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

该请求将 $tag_value 映射到 12,将 $field_value 映射到 30

状态代码和响应

响应以 JSON 格式返回。包含查询字符串参数 pretty=true 以启用格式化 JSON。

汇总表
HTTP 状态代码描述
200 OK成功!返回的 JSON 提供更多信息。
400 Bad Request不可接受的请求。当查询在语法上不正确时可能会发生。返回的 JSON 提供更多信息。
401 Unauthorized不可接受的请求。当身份验证凭据无效时可能会发生。

示例

返回数据的成功请求
$ curl -i -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT * FROM "mymeas"'

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 19:22:54 GMT
Transfer-Encoding: chunked

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null],["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}
返回错误的成功请求
$ curl -i -G 'https://127.0.0.1:8086/query?db=mydb1' --data-urlencode 'q=SELECT * FROM "mymeas"'

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 19:23:48 GMT
Transfer-Encoding: chunked

{"results":[{"statement_id":0,"error":"database not found: mydb1"}]}
格式不正确的查询
$ curl -i -G 'https://127.0.0.1:8086/query?db=mydb' --data-urlencode 'q=SELECT *'

HTTP/1.1 400 Bad Request
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 19:24:25 GMT
Content-Length: 76

{"error":"error parsing query: found EOF, expected FROM at line 1, char 9"}
使用无效的身份验证凭据查询数据
$ curl -i  -XPOST 'https://127.0.0.1:8086/query?u=myusername&p=notmypassword' --data-urlencode 'q=CREATE DATABASE "mydb"'

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Request-Id: [...]
Www-Authenticate: Basic realm="InfluxDB"
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 19:11:26 GMT
Content-Length: 33

{"error":"authorization failed"}

/write HTTP 端点

/write 端点接受 POST HTTP 请求。使用此端点将数据写入预先存在的数据库。

定义

POST https://127.0.0.1:8086/write

查询字符串参数

查询字符串参数可选/必需描述
consistency=[any,one,quorum,all]可选,仅适用于 InfluxDB Enterprise 集群设置数据点的写入一致性。如果您未指定 consistency,则 InfluxDB 假定写入一致性为 one。有关每个一致性选项的详细描述,请参阅 InfluxDB Enterprise 文档
db=<database>必需设置写入的目标 数据库
p=<password>如果您尚未启用身份验证,则为可选。如果您已启用身份验证,则为必需。*如果您已启用身份验证,则设置用于身份验证的密码。与查询字符串参数 u 一起使用。
precision=[n,u,ms,s,m,h]可选设置提供的 Unix 时间值的精度。如果您未指定精度,则 InfluxDB 假定时间戳以纳秒为单位。**
rp=<retention_policy_name>可选设置写入的目标 保留策略。如果您未指定保留策略,则 InfluxDB 写入 DEFAULT 保留策略。
u=<username>如果您尚未启用身份验证,则为可选。如果您已启用身份验证,则为必需。*如果您已启用身份验证,则设置用于身份验证的用户名。用户必须具有数据库的写入权限。与查询字符串参数 p 一起使用。

* InfluxDB API 也支持基本身份验证。如果您已启用身份验证且未使用查询字符串参数 up,请使用基本身份验证。请参阅下文中的基本身份验证示例

** 我们建议尽可能使用最低的精度,因为这可以显著提高压缩率。

示例

以秒为时间戳,向数据库 mydb 写入一个数据点
$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb&precision=s" --data-binary 'mymeas,mytag=1 myfield=90 1463683075'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 17:33:23 GMT
向数据库 mydb 和保留策略 myrp 写入一个数据点
$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb&rp=myrp" --data-binary 'mymeas,mytag=1 myfield=90'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 17:34:31 GMT
使用 HTTP 身份验证,向数据库 mydb 写入一个数据点

有效凭据

$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb&u=myusername&p=mypassword" --data-binary 'mymeas,mytag=1 myfield=91'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 17:34:56 GMT

无效凭据

$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb&u=myusername&p=notmypassword" --data-binary 'mymeas,mytag=1 myfield=91'

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Request-Id: [...]
Www-Authenticate: Basic realm="InfluxDB"
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 17:40:30 GMT
Content-Length: 33

{"error":"authorization failed"}
使用基本身份验证,向数据库 mydb 写入一个数据点

有效凭据

$ curl -i -XPOST -u myusername:mypassword "https://127.0.0.1:8086/write?db=mydb" --data-binary 'mymeas,mytag=1 myfield=91'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 17:36:40 GMT

无效凭据

$ curl -i -XPOST -u myusername:notmypassword "https://127.0.0.1:8086/write?db=mydb" --data-binary 'mymeas,mytag=1 myfield=91'

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Request-Id: [...]
Www-Authenticate: Basic realm="InfluxDB"
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 17:46:40 GMT
Content-Length: 33

{"error":"authorization failed"}

请求正文

--data-binary '<Data in InfluxDB line protocol format>'

所有数据必须以二进制编码,并采用 InfluxDB 行协议 格式。我们的示例展示了 curl 的 --data-binary 参数,我们将在本页的所有示例中使用它。使用除 --data-binary 以外的任何编码方法都可能导致问题;-d--data-urlencode--data-ascii 可能会删除换行符或引入新的、意外的格式。

选项

  • 通过用换行符分隔每个数据点,使用一个请求向数据库写入多个数据点。

  • 使用 @ 标志从文件写入数据点。该文件应包含 InfluxDB 行协议格式的一批数据点。各个数据点必须独占一行,并用换行符 (\n) 分隔。包含回车符的文件将导致解析器错误。

    我们建议以 5,000 到 10,000 个数据点的批次写入数据点。较小的批次和更多的 HTTP 请求将导致性能欠佳。

示例

以纳秒为时间戳,向数据库 mydb 写入一个数据点
$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb" --data-binary 'mymeas,mytag=1 myfield=90 1463683075000000000'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 18:02:57 GMT
使用本地服务器的纳秒时间戳,向数据库 mydb 写入一个数据点
$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb" --data-binary 'mymeas,mytag=1 myfield=90'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 18:03:44 GMT
通过用换行符分隔数据点,向数据库 mydb 写入多个数据点
$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb" --data-binary 'mymeas,mytag=3 myfield=89 1463689152000000000
mymeas,mytag=2 myfield=34 1463689152000000000'

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 18:04:02 GMT
从文件 data.txt 向数据库 mydb 写入多个数据点
$ curl -i -XPOST "https://127.0.0.1:8086/write?db=mydb" --data-binary @data.txt

HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.11.8
Date: Wed, 08 Nov 2017 18:08:11 GMT

data.txt 中的数据示例

mymeas,mytag1=1 value=21 1463689680000000000
mymeas,mytag1=1 value=34 1463689690000000000
mymeas,mytag2=8 value=78 1463689700000000000
mymeas,mytag3=9 value=89 1463689710000000000

状态代码和响应

通常,2xx 形式的状态码表示成功,4xx 表示 InfluxDB 无法理解请求,5xx 表示系统过载或严重受损。错误以 JSON 格式返回。

汇总表
HTTP 状态代码描述
204 无内容成功!
400 Bad Request不可接受的请求。当 InfluxDB 行协议存在语法错误,或者用户尝试向之前接受不同值类型的字段写入值时,可能会发生这种情况。返回的 JSON 提供了更多信息。
401 Unauthorized不可接受的请求。当身份验证凭据无效时可能会发生。
404 未找到不可接受的请求。当用户尝试写入不存在的数据库时,可能会发生这种情况。返回的 JSON 提供了更多信息。
413 请求实体过大不可接受的请求。当 POST 请求的有效负载大于允许的最大大小时,会发生这种情况。有关更多详细信息,请参阅 max-body-size 参数。
500 内部服务器错误系统过载或严重受损。当用户尝试写入不存在的保留策略时,可能会发生这种情况。返回的 JSON 提供了更多信息。

示例

成功写入
HTTP/1.1 204 No Content
写入具有不正确时间戳的数据点
HTTP/1.1 400 Bad Request
[...]
{"error":"unable to parse 'mymeas,mytag=1 myfield=91 abc123': bad timestamp"}
向之前接受浮点数的字段写入整数
HTTP/1.1 400 Bad Request
[...]
{"error":"field type conflict: input field \"myfield\" on measurement \"mymeas\" is type int64, already exists as type float"}
写入具有无效身份验证凭据的数据点
HTTP/1.1 401 Unauthorized
[...]
{"error":"authorization failed"}
向不存在的数据库写入数据点
HTTP/1.1 404 Not Found
[...]
{"error":"database not found: \"mydb1\""}
发送过大的请求体
HTTP/2 413 Request Entity Too Large
[...]
{"error":"Request Entity Too Large"}
向不存在的保留策略写入数据点
HTTP/1.1 500 Internal Server Error
[...]
{"error":"retention policy not found: myrp"}

此页内容对您有帮助吗?

感谢您的反馈!


Flux 的未来

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

阅读更多

InfluxDB 3 开源版现已公开发布 Alpha 版本

InfluxDB 3 开源版现已可用于 Alpha 测试,并根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 Alpha 版本的一部分。

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

有关如何入门的更多信息,请查看