使用InfluxDB v1 API与InfluxDB集群
使用InfluxDB v1 API的/write
和/query
端点与您带入InfluxDB集群的v1工作负载。v1端点与用户名/密码认证以及现有的InfluxDB 1.x工具和代码一起工作。InfluxDB v1 API的/write
端点与InfluxDB 1.x客户端库以及Telegraf v1输出插件一起工作。InfluxDB v1 API的/query
端点支持InfluxQL和第三方集成,如Grafana。
了解如何进行请求认证、调整现有v1工作负载的请求参数以及找到用于写入和查询存储在InfluxDB集群数据库中的数据的兼容工具。
认证API请求
InfluxDB集群要求每个API请求使用数据库令牌进行认证。使用InfluxDB v1 API,您可以在InfluxDB 1.x用户名和密码方案、InfluxDB v2的Authorization: Token
方案或OAuth的Authorization: Bearer
方案中使用数据库令牌。
使用用户名和密码方案进行认证
使用 InfluxDB v1 API,您可以通过传递一个 数据库令牌 作为 password
凭证,使用 InfluxDB 1.x 的用户名和密码约定来验证数据库的读取和写入。当验证对 v1 API 的 /write
和 /query
端点的请求时,InfluxDB 集群检查 password
(p
) 的值是否是授权的 数据库令牌。InfluxDB 集群忽略请求中的 username
(u
) 参数。
使用以下认证方案之一,这些方案适用于支持基本认证或查询参数(不支持 令牌认证)的客户端。
基本认证
使用 Authorization
标头和 Basic
方案来认证 v1 API 的 /write
和 /query
请求。在验证请求时,InfluxDB 集群检查解码凭证中的 password
部分是否是授权的 数据库令牌。InfluxDB 集群忽略解码凭证中的 username
部分。
语法
Authorization: Basic <base64-encoded [USERNAME]:DATABASE_TOKEN>
使用 base64 编码将 [USERNAME]:DATABASE_TOKEN
凭证编码,然后将编码后的字符串附加到 Authorization: Basic
标头。
大多数 HTTP 客户端都提供了接受 <username>:<password>
语法并在发送请求之前对凭证进行编码的 基本认证 选项。
示例
以下示例展示了如何使用 cURL 和 Basic
认证方案以及 数据库令牌。
curl --get "https://cluster-host.com/query" \
--user "":"DATABASE_TOKEN" \
--data-urlencode "db=DATABASE_NAME" \
--data-urlencode "q=SELECT * FROM MEASUREMENT"
替换以下内容
查询字符串认证
在 URL 中,通过传递 p
查询参数来验证 /write
和 /query
请求。在验证请求时,InfluxDB 集群检查 p
(密码) 的值是否是授权的数据库令牌,并忽略 u
(用户名) 参数。
语法
https://cluster-host.com/query/?[u=any]&p=DATABASE_TOKEN
https://cluster-host.com/write/?[u=any]&p=DATABASE_TOKEN
示例
以下示例展示了如何使用 cURL 和查询字符串认证以及 数据库令牌。
curl --get "https://cluster-host.com/query" \
--data-urlencode "p=DATABASE_TOKEN" \
--data-urlencode "db=DATABASE_NAME" \
--data-urlencode "q=SELECT * FROM MEASUREMENT"
替换以下内容
使用令牌方案进行认证
使用 Authorization: Bearer
或 Authorization: Token
方案来传递 数据库令牌,以认证 v1 API 的 /write
和 /query
请求。
Bearer
和 Token
在 InfluxDB 集群中是等效的。在 InfluxDB 2.x API 中使用 Token
方案。在 OAuth 2.0 框架 中定义了 Bearer
。对其中一个或另一个的支持可能因 InfluxDB API 客户端而异。
语法
Authorization: Bearer DATABASE_TOKEN
Authorization: Token DATABASE_TOKEN
示例
使用 Bearer
来认证写请求
使用 Token
来认证写请求
替换以下内容
响应
InfluxDB API 响应使用标准的 HTTP 状态码。对于成功的写入,InfluxDB 使用 204 No Content
状态码进行响应。错误响应包含一个包含 code
和 message
属性的 JSON 对象,这些属性描述了错误。响应体中的消息可能因 InfluxDB 集群 v1 API、v2 API、InfluxDB Cloud 和 InfluxDB OSS 而异。
错误示例
无效的命名空间名称:
400 Bad Request
{ "code":"invalid", "message":"namespace name length must be between 1 and 64 characters" }
请求中缺少
?db=
参数值。提供 数据库 名称。反序列化 db/rp/precision 失败
400 Bad Request
{ "code":"invalid", "message":"failed to deserialize db/rp/precision in request: unknown variant `u`, expected one of `s`, `ms`, `us`, `ns`" }
?precision=
参数包含一个未知值。提供 时间戳精度。
写入数据
使用您现有的工作负载(这些工作负载已经使用 InfluxDB v1 或 v1.x 兼容的 /write
API 端点)写入数据。
POST https://cluster-host.com/write
v1 API /write参数
对于 InfluxDB 集群 v1 API 的 /write
请求,参数设置如下表所示
参数 | 允许在 | 忽略 | 值 |
---|---|---|---|
一致性 | 查询字符串 | 忽略 | 不适用 |
db * | 查询字符串 | 受尊重 | 数据库名称 |
精度 | 查询字符串 | 受尊重 | 时间戳精度 |
rp | 查询字符串 | 受尊重,但不建议使用 | 保留策略 |
u | 查询字符串 | 忽略 | 对于 查询字符串身份验证,任意字符串 |
p | 查询字符串 | 受尊重 | 对于 查询字符串身份验证,一个 数据库令牌,具有写入数据库的权限 |
内容编码 | 头信息 | 受尊重 | gzip (压缩数据)或 identity (未压缩) |
授权 | 头信息 | 受尊重 | Bearer DATABASE_TOKEN 、Token DATABASE_TOKEN 或 Basic <base64 [USERNAME]:DATABASE_TOKEN> |
时间戳精度
在 v1 API /write
请求中使用以下任一 precision
值
ns
:纳秒us
:微秒ms
:毫秒s
:秒m
:分钟h
:小时
写入v1 API的工具
以下工具与 InfluxDB 集群 /write
端点一起使用
Telegraf
如果您有现有的 v1 工作负载并使用 Telegraf,您可以使用 InfluxDB v1.x influxdb
Telegraf 输出插件来写入数据。
查看如何 使用 Telegraf 和 v2 API 来处理尚未使用 v1 API 的新工作负载。
以下表格显示了写入 InfluxDB 集群 v1 API 的 outputs.influxdb
插件参数和值
参数 | 忽略 | 值 |
---|---|---|
数据库 | 受尊重 | 数据库名称 |
保留策略 | 受尊重,但不建议使用 | 持续时间 |
用户名 | 忽略 | 字符串或空字符串 |
密码 | 受尊重 | 数据库令牌,具有写入数据库的权限 |
内容编码 | 受尊重 | gzip (压缩数据)或 identity (未压缩) |
跳过数据库创建 | 忽略 | 不适用(请参阅如何 创建数据库) |
要配置 v1.x 输出插件以写入 InfluxDB 集群,请在您的 telegraf.conf
文件中添加以下 outputs.influxdb
配置
[[outputs.influxdb]]
urls = ["https://cluster-host.com"]
database = "DATABASE_NAME"
skip_database_creation = true
retention_policy = ""
username = "ignored"
password = "DATABASE_TOKEN"
content_encoding = "gzip”
替换以下内容
其他Telegraf配置选项
influx_uint_support
:在 InfluxDB v3 中受支持。
有关更多插件选项,请参阅 GitHub 上的 influxdb
。
交互式客户端
要交互式地从命令行测试 InfluxDB v1 API 写入,请使用 cURL 和 Postman 等常见的 HTTP 客户端。
在您的请求中包含以下内容
- 一个
db
查询字符串参数,用于指定要写入的数据库名称。 - 一个请求正文,包含以 行协议 语法表示的数据字符串。
- 在以下认证方案之一中包含 数据库令牌:基本认证、查询字符串认证 或 令牌认证。
- 可选的 参数。
以下示例显示了如何使用 cURL 命令行工具和 InfluxDB 集群 v1 API 将行协议数据写入数据库
替换以下内容
v1 CLI(不支持)
不要使用 v1 CLI 与 InfluxDB 集群一起使用。虽然它可能偶然有效,但并未官方支持。
客户端库
使用特定于语言的 v1 客户端库 和您的自定义代码将数据写入 InfluxDB。v1 客户端库以 行协议 语法向 v1 API /write
端点发送数据。
以下示例显示了如何配置 v1 客户端库以写入 InfluxDB 集群
使用 node-influx JavaScript 客户端库创建 v1 API 客户端
const Influx = require('influx')
// Instantiate a client for writing to InfluxDB Clustered v1 API
const client = new Influx.InfluxDB({
host: 'cluster-host.com',
port: 443,
protocol: 'https'
database: 'DATABASE_NAME',
username: 'ignored',
password: 'DATABASE_TOKEN'
})
使用 influxdb-python Python 客户端库创建 v1 API 客户端
from influxdb import InfluxDBClient
# Instantiate a client for writing to InfluxDB Clustered v1 API
client = InfluxDBClient(
host='cluster-host.com',
ssl=True,
database='DATABASE_NAME',
username='',
password='DATABASE_TOKEN'
headers={'Content-Type': 'text/plain; charset=utf-8'}
)
替换以下内容
查询数据
InfluxDB 集群版提供了以下协议来执行查询
- Flight+gRPC 请求,包含 SQL 或 InfluxQL 查询。要了解如何使用 Flight 和 SQL 查询 InfluxDB 集群版,请参阅入门教程。
- InfluxDB v1 API
/query
请求,包含 InfluxQL 查询。当您将已使用 InfluxQL 和 v1 API/query
端点的 InfluxDB 1.x 工作负载引入 InfluxDB 集群版时,请使用此端点。
执行查询的工具
InfluxDB 集群版支持许多不同的工具来查询数据,包括
v1 API /query参数
对于 InfluxDB 集群版 v1 API /query
请求,按照以下表格中的参数设置
参数 | 允许在 | 忽略 | 值 |
---|---|---|---|
chunked | 查询字符串 | 受尊重 | 以流式批量返回点,而不是单个响应。如果设置为 true ,InfluxDB 将根据系列或每 10,000 个点进行响应分块,以先到者为准。 |
chunked_size | 查询字符串 | 受尊重 | 需要将 chunked 设置为 true 。如果设置为特定值,InfluxDB 将根据系列或此数量进行响应分块。 |
db | 查询字符串 | 受尊重 | 数据库名称 |
epoch | 查询字符串 | 受尊重 | 时间戳精度 |
p | 查询字符串 | 受尊重 | 数据库令牌 |
pretty | 查询字符串 | 忽略 | 不适用 |
u | 查询字符串 | 忽略 | 对于 查询字符串身份验证,任意字符串 |
p | 查询字符串 | 受尊重 | 对于 查询字符串身份验证,一个 数据库令牌,具有写入数据库的权限 |
rp | 查询字符串 | 受尊重,但不建议使用 | 保留策略 |
当将 v1 API 工作负载引入 InfluxDB 集群版时,您需要调整客户端配置或代码中的请求参数。
时间戳精度
使用以下值之一进行时间戳精度
ns
:纳秒us
:微秒ms
:毫秒s
:秒m
:分钟h
:小时
InfluxQL 数据库管理(不支持)
InfluxDB 集群版不允许使用 InfluxQL 命令来管理或修改数据库。您不能使用以下 InfluxQL 命令
SELECT INTO
CREATE
DELETE
DROP
GRANT
EXPLAIN
REVOKE
ALTER
SET
KILL
本页有帮助吗?
感谢您的反馈!