文档文档

InfluxDB 3 Core 文档

InfluxDB 是一个旨在收集、处理、转换和存储事件和时间序列数据的数据库,非常适合需要实时摄取和快速查询响应时间以构建用户界面、监控和自动化解决方案的用例。

常见用例包括

  • 监控传感器数据
  • 服务器监控
  • 应用程序性能监控
  • 网络监控
  • 金融市场和交易分析
  • 行为分析

InfluxDB 针对近实时数据监控至关重要且查询需要快速返回以支持仪表板和交互式用户界面等用户体验的场景进行了优化。

InfluxDB 3 Core 是 InfluxDB 3 开源版本。Core 的功能亮点包括

  • 支持对象存储的无盘架构(或无依赖的本地磁盘)
  • 快速查询响应时间(最后值查询低于 10 毫秒,或不同元数据查询低于 30 毫秒)
  • 用于插件和触发器的嵌入式 Python VM
  • Parquet 文件持久化
  • 与 InfluxDB 1.x 和 2.x 写入 API 兼容

Enterprise 版本在 Core 版本的基础上增加了以下功能

  • 历史查询能力和单序列索引
  • 高可用性
  • 读取副本
  • 增强的安全性(即将推出)
  • 行级删除支持(即将推出)
  • 集成管理 UI(即将推出)

有关更多信息,请参阅如何开始使用 Enterprise

本指南内容

本指南涵盖 InfluxDB 3 Core(开源版本),包括以下主题

安装和启动

InfluxDB 3 Core 在 LinuxmacOSWindows 上运行。

要快速开始使用,请下载并运行安装脚本——例如,使用 curl

curl -O https://influxdb.org.cn/d/install_influxdb3.sh \
&& sh install_influxdb3.sh

或者,下载并安装 构建工件

macOS Intel 版本即将推出。

下载并安装 InfluxDB 3 Core Windows (AMD64, x86_64) 二进制文件sha256

influxdb3-core 镜像可用于 x86_64 (AMD64) 和 ARM64 架构。

拉取镜像

docker pull quay.io/influxdb/influxdb3-core:latest
InfluxDB 3 Explorer – 查询界面 (Beta)

您可以使用 Docker 下载新的 InfluxDB 3 Explorer 查询界面。Explorer 目前处于 Beta 阶段。拉取镜像

docker pull quay.io/influxdb/influxdb3-explorer:latest

构建工件和镜像会随着每次合并到 InfluxDB 3 Core main 分支而更新。

验证安装

安装 InfluxDB 3 Core 后,输入以下命令以验证是否成功完成安装

influxdb3 --version

如果您的系统找不到 influxdb3,则 source 您的 shell 的配置文件(例如,.bashrc、.zshrc)——例如

source ~/.zshrc

启动 InfluxDB

要启动您的 InfluxDB 实例,请使用 influxdb3 serve 命令并提供以下内容

  • --object-store:指定要使用的对象存储类型。InfluxDB 支持以下类型:本地文件系统 (file)、memory、S3(和兼容服务,如 Ceph 或 Minio)(s3)、Google Cloud Storage (google) 和 Azure Blob Storage (azure)。默认值为 file。根据对象存储类型,您可能需要为对象存储配置提供其他选项。
  • --node-id:一个字符串标识符,用于区分集群内的各个服务器实例。这构成了存储路径的最后一部分:<CONFIGURED_PATH>/<NODE_ID>。在多节点设置中,此 ID 用于引用特定节点。

无盘架构

InfluxDB 3 支持无盘架构,该架构可以仅使用对象存储运行,从而无需本地连接的磁盘。InfluxDB 3 Core 在需要时也可以仅使用本地磁盘存储。

以下示例展示了如何使用不同的对象存储配置启动 InfluxDB 3

# Memory object store
# Stores data in RAM; doesn't persist data
influxdb3 serve \
--node-id host01 \
--object-store memory
# Filesystem object store
# Provide the filesystem directory
influxdb3 serve \
  --node-id host01 \
  --object-store file \
  --data-dir ~/.influxdb3

要运行 Docker 镜像并将数据持久化到文件系统,请为对象存储挂载卷——例如,传递以下选项

  • -v /path/on/host:/path/in/container:将文件系统中的目录挂载到容器
  • --object-store file --data-dir /path/in/container:使用挂载作为服务器存储

InfluxDB 3 Core Docker 镜像公开端口 8181,这是 influxdb3 服务器 HTTP 连接的默认端口。要在运行容器时将公开的端口映射到不同的端口,请参阅 Docker 指南以了解发布和公开端口

# Filesystem object store with Docker 
# Create a mount
# Provide the mount path
docker run -it \
 -v /path/on/host:/path/in/container \
 quay.io/influxdb/influxdb3-core:latest serve \
 --node-id my_host \
 --object-store file \
 --data-dir /path/in/container
# S3 object store (default is the us-east-1 region)
# Specify the Object store type and associated options
influxdb3 serve \
  --node-id host01 \
  --object-store s3 \
  --bucket BUCKET \
  --aws-access-key AWS_ACCESS_KEY_ID \
  --aws-secret-access-key AWS_SECRET_ACCESS_KEY
# Minio or other open source object store
# (using the AWS S3 API with additional parameters)
# Specify the object store type and associated options
influxdb3 serve \
  --node-id host01 \
  --object-store s3 \
  --bucket BUCKET \
  --aws-access-key-id AWS_ACCESS_KEY_ID \
  --aws-secret-access-key AWS_SECRET_ACCESS_KEY \
  --aws-endpoint ENDPOINT \
  --aws-allow-http

有关服务器选项的更多信息,请使用 CLI 帮助

influxdb3 serve --help

身份验证和授权

在您启动服务器后,您可以使用 influxdb3 CLI 或 HTTP API 创建和管理令牌。InfluxDB 3 Core 使用基于令牌的身份验证和授权,当您启动服务器时,默认情况下启用该功能。启用身份验证后,您必须提供令牌才能访问服务器操作。一个 InfluxDB 3 Core 实例可以有一个管理员令牌,该令牌授予对所有 CLI 操作和 API 端点的访问权限。

当您创建令牌时,InfluxDB 3 会以纯文本形式返回一个令牌字符串,您可以使用该字符串来验证 CLI 命令和 API 请求。请安全地存储您的令牌,因为您以后将无法检索它。

要使 influxdb3 CLI 自动使用您的管理员令牌,请将其分配给 INFLUXDB3_AUTH_TOKEN 环境变量。

安全地存储您的令牌

为了安全起见,InfluxDB 仅允许您在创建令牌时查看令牌。InfluxDB 3 在目录中存储令牌的哈希值,因此您在创建令牌后无法检索令牌。

创建管理员令牌

要创建管理员令牌,请使用 influxdb3 create token --admin 子命令——例如

influxdb3 create token --admin \
 --host http://localhost:8181

该命令返回一个令牌字符串,您可以使用该字符串来验证 CLI 命令和 API 请求。请安全地存储您的令牌,因为您以后将无法检索它。

有关更多信息,请参阅如何管理管理员令牌

数据模型

数据库服务器包含逻辑数据库,逻辑数据库包含表,表包含列。与以前版本的 InfluxDB 相比,您可以将数据库视为 v2 中的 bucket 或 v1 中的 db/retention_policytable 等同于 measurement,它具有可以是 tag(字符串字典)、int64float64uint64boolstring 类型的列,最后,每个表都有一个 time 列,该列是纳秒精度的时间戳。

在 InfluxDB 3 中,每个表都有一个主键——标签和时间的有序集合——用于其数据。这是用于创建的所有 Parquet 文件的排序顺序。当您创建表时,无论是通过显式调用还是首次将数据写入表,它都会将主键设置为标签的到达顺序。这是不可变的。尽管 InfluxDB 仍然是写入时模式数据库,但表的标签列定义是不可变的。

标签应包含唯一的标识信息,如 sensor_idbuilding_idtrace_id。所有其他数据应保存在字段中。您稍后将能够为任何列(无论是字段还是标签)添加快速的最后 N 个值和不同值查找。

使用的工具

下表比较了您可以用来与 InfluxDB 3 Core 交互的工具。本教程涵盖了许多推荐工具。

工具管理写入查询
Chronograf--
influx CLI---
influxdb3 CLI*
influxctl CLI---
InfluxDB HTTP API*
InfluxDB 用户界面---
InfluxDB 3 客户端库-
InfluxDB v2 客户端库--
InfluxDB v1 客户端库-
InfluxDB 3 处理引擎*
Telegraf--
第三方工具
Flight SQL 客户端--
Grafana--
* 本指南涵盖

写入数据

InfluxDB 是一个写入时模式数据库。您可以开始写入数据,InfluxDB 会动态创建逻辑数据库、表及其模式。创建模式后,InfluxDB 会在接受数据之前根据模式验证未来的写入请求。后续请求可以动态添加新字段,但不能添加新标签。

Core 针对最近的数据进行了优化

InfluxDB 3 Core 针对最近的数据进行了优化,但接受来自任何时间段的写入。系统将数据持久化到 Parquet 文件,以便使用 InfluxDB 3 Enterprise 或第三方工具进行历史分析。对于扩展的历史查询和优化的数据组织,请考虑使用 InfluxDB 3 Enterprise

以 Line Protocol 语法写入数据

InfluxDB 3 Core 接受 line protocol 语法的数据。以下代码块是以 line protocol 语法表示的时间序列数据示例

  • cpu:表名。
  • hostregionapplications:标签。标签集是键/值对的有序逗号分隔列表,其中值是字符串。
  • valusage_percentstatus:字段。字段集是键/值对的逗号分隔列表。
  • timestamp:如果您未指定时间戳,则 InfluxData 将使用写入数据时的时间。默认精度为纳秒纪元。要指定不同的精度,请在您的 CLI 命令或 API 请求中传递 precision 参数。
cpu,host=Alpha,region=us-west,application=webserver val=1i,usage_percent=20.5,status="OK"
cpu,host=Bravo,region=us-east,application=database val=2i,usage_percent=55.2,status="OK"
cpu,host=Charlie,region=us-west,application=cache val=3i,usage_percent=65.4,status="OK"
cpu,host=Bravo,region=us-east,application=database val=4i,usage_percent=70.1,status="Warn"
cpu,host=Bravo,region=us-central,application=database val=5i,usage_percent=80.5,status="OK"
cpu,host=Alpha,region=us-west,application=webserver val=6i,usage_percent=25.3,status="Warn"

使用 CLI 写入数据

要快速开始写入数据,您可以使用 influxdb3 CLI。

对于批量处理和更高容量的写入工作负载,我们建议使用 HTTP API

使用 InfluxDB API 客户端库写入数据

InfluxDB 提供了受支持的客户端库,这些库与您的代码集成,以将数据构造为时间序列点,并将数据作为 line protocol 写入到您的 InfluxDB 3 Core 数据库。有关更多信息,请参阅如何使用 InfluxDB 客户端库写入数据

示例:使用 influxdb3 CLI 写入数据

使用 influxdb3 write 命令将数据写入数据库。

在代码示例中,将以下占位符替换为您的值

  • DATABASE_NAME:要写入的数据库的名称。

  • TOKEN:您的 InfluxDB 3 Core 服务器的令牌

通过 stdin 写入数据

通过标准输入 (stdin) 传递带引号的 line protocol 数据——例如

influxdb3 write \
  --database 
DATABASE_NAME
\
--token
TOKEN
\
--precision ns \ --accept-partial \ 'cpu,host=Alpha,region=us-west,application=webserver val=1i,usage_percent=20.5,status="OK" cpu,host=Bravo,region=us-east,application=database val=2i,usage_percent=55.2,status="OK" cpu,host=Charlie,region=us-west,application=cache val=3i,usage_percent=65.4,status="OK" cpu,host=Bravo,region=us-east,application=database val=4i,usage_percent=70.1,status="Warn" cpu,host=Bravo,region=us-central,application=database val=5i,usage_percent=80.5,status="OK" cpu,host=Alpha,region=us-west,application=webserver val=6i,usage_percent=25.3,status="Warn"'
从文件写入数据

传递 --file 选项以写入您已保存到文件的 line protocol——例如,将示例 line protocol 保存到名为 server_data 的文件,然后输入以下命令

influxdb3 write \
  --database 
DATABASE_NAME
\
--token
TOKEN
\
--precision ns \ --accept-partial \ --file server_data

使用 HTTP API 写入数据

InfluxDB 3 Core 提供了三个写入 API 端点,用于响应 HTTP POST 请求。/api/v3/write_lp 端点是推荐的写入数据端点,并提供用于控制写入行为的其他选项。

如果您需要使用 InfluxDB v1.x 或 v2.x 工具写入数据,请使用兼容性 API 端点。兼容性 API 适用于 Telegraf、InfluxDB v2.x 和 v1.x API 客户端库以及其他支持 v1.x 或 v2.x API 的工具。

InfluxDB 3 Core 添加了 /api/v3/write_lp 端点。

POST /api/v3/write_lp?db=mydb&precision=nanosecond&accept_partial=true&no_sync=false

此端点接受与以前版本相同的 line protocol 语法,并支持以下参数

  • ?accept_partial=<BOOLEAN>:接受或拒绝部分写入(默认为 true)。
  • ?no_sync=<BOOLEAN>:控制何时确认写入
    • no_sync=true:在 WAL 持久化完成之前确认写入。
    • no_sync=false:在 WAL 持久化完成后确认写入(默认值)。
  • ?precision=<PRECISION>:指定时间戳的精度。默认精度为纳秒。
  • request body:要写入的 line protocol 数据。

有关参数的更多信息,请参阅写入数据

示例:使用 /api/v3 HTTP API 写入数据

以下示例展示了如何使用 curl/api/3/write_lp HTTP 端点写入数据。为了显示接受和拒绝部分写入之间的区别,示例中的第 2 行包含 float 字段 (temp) 的 string 值 ("hi")。

发生了 line protocol 的部分写入

使用 accept_partial=true(默认值)

curl -v "http://localhost:8181/api/v3/write_lp?db=sensors&precision=auto" \
  --data-raw 'home,room=Sunroom temp=96
home,room=Sunroom temp="hi"'

响应如下

< HTTP/1.1 400 Bad Request
...
{
  "error": "partial write of line protocol occurred",
  "data": [
    {
      "original_line": "home,room=Sunroom temp=hi",
      "line_number": 2,
      "error_message": "invalid column type for column 'temp', expected iox::column_type::field::float, got iox::column_type::field::string"
    }
  ]
}

1 行已写入且可查询。响应是一个 HTTP 错误 (400) 状态,响应正文包含错误消息 partial write of line protocol occurred,其中包含有关问题行的详细信息。

write_lp 端点解析失败

使用 accept_partial=false

curl -v "http://localhost:8181/api/v3/write_lp?db=sensors&precision=auto&accept_partial=false" \
  --data-raw 'home,room=Sunroom temp=96
home,room=Sunroom temp="hi"'

响应如下

< HTTP/1.1 400 Bad Request
...
{
  "error": "parsing failed for write_lp endpoint",
  "data": {
    "original_line": "home,room=Sunroom temp=hi",
    "line_number": 2,
    "error_message": "invalid column type for column 'temp', expected iox::column_type::field::float, got iox::column_type::field::string"
  }
}

InfluxDB 拒绝批处理中的所有点。响应是一个 HTTP 错误 (400) 状态,响应正文包含 parsing failed for write_lp endpoint 以及有关问题行的详细信息。

有关摄取路径和数据流的更多信息,请参阅数据持久性

/api/v2/write InfluxDB v2 兼容性端点提供与客户端(例如 Telegraf 的 InfluxDB v2 输出插件InfluxDB v2 API 客户端库)的向后兼容性,这些客户端可以将数据写入 InfluxDB OSS v2.x 和 Cloud 2 (TSM)。

POST /api/v2/write?bucket=mydb&precision=ns

/write InfluxDB v1 兼容性端点为可以将数据写入 InfluxDB v1.x 的客户端提供向后兼容性。

POST /write?db=mydb&precision=ns

兼容性 API 与原生 API 不同

请记住,兼容性 API 在以下方面与以前版本中的 v1 和 v2 API 不同

  • 表(measurement)中的标签是不可变的
  • 标签和字段在同一个表中不能具有相同的名称。

写入响应

默认情况下,InfluxDB 在将 WAL 文件刷新到对象存储(每秒发生一次)后确认写入。对于高写入吞吐量,您可以发送多个并发写入请求。

使用 no_sync 获取即时写入响应

为了减少写入延迟,请使用 no_sync 写入选项,该选项在 WAL 持久化完成之前确认写入。当 no_sync=true 时,InfluxDB 验证数据,将数据写入 WAL,然后立即响应客户端,而无需等待持久化到对象存储。

当优先考虑高吞吐量写入而不是绝对持久性时,最好使用 no_sync=true

  • 默认行为 (no_sync=false):等待数据写入对象存储后才确认写入。降低数据丢失的风险,但增加响应延迟。
  • 使用 no_sync=true:降低写入延迟,但增加 WAL 持久化之前发生崩溃时数据丢失的风险。
使用 HTTP API 进行即时写入

no_sync 参数控制何时确认写入——例如

curl "http://localhost:8181/api/v3/write_lp?db=sensors&precision=auto&no_sync=true" \
  --data-raw "home,room=Sunroom temp=96"
使用 influxdb3 CLI 进行即时写入

no_sync CLI 选项控制何时确认写入——例如

influxdb3 write \
  --bucket mydb \
  --org my_org \
  --token my-token \
  --no-sync

创建数据库或表

要在不写入数据的情况下创建数据库,请使用 create 子命令——例如

influxdb3 create database mydb

要了解有关子命令的更多信息,请使用 -h, --help 标志

influxdb3 create -h

查询数据

InfluxDB 3 现在除了 InfluxQL(一种为时间序列查询定制的类 SQL 语言)之外,还支持原生 SQL 用于查询。

InfluxDB 3 Core 将查询时间范围限制为 72 小时(最近和历史记录),以确保查询性能。有关 72 小时限制的更多信息,请参阅关于 InfluxDB 3 Core 72 小时限制的更新

InfluxDB 2.0 中引入的语言 Flux 在 InfluxDB 3 中受支持。

开始查询的最快方法是使用 influxdb3 CLI(它使用基于 HTTP2 的 Flight SQL API)。

query 子命令包含一些选项,可帮助确保使用正确的权限查询正确的数据库。仅 --database 选项是必需的,但根据您的具体设置,您可能需要传递其他选项,例如主机、端口和令牌。

选项描述必需
--host服务器的主机 URL [默认值:http://127.0.0.1:8181] 以进行查询
--database要操作的数据库的名称
--tokenInfluxDB 3 Core 服务器的身份验证令牌
--language提供的查询字符串的查询语言 [默认值:sql] [可能的值:sqlinfluxql]
--format输出查询的格式 [默认值:pretty] [可能的值:prettyjsonjsonlcsvparquet]
--output要将数据输出到的路径

示例:查询 servers 数据库上的“SHOW TABLES”

$ influxdb3 query --database servers "SHOW TABLES"
+---------------+--------------------+--------------+------------+
| table_catalog | table_schema       | table_name   | table_type |
+---------------+--------------------+--------------+------------+
| public        | iox                | cpu          | BASE TABLE |
| public        | information_schema | tables       | VIEW       |
| public        | information_schema | views        | VIEW       |
| public        | information_schema | columns      | VIEW       |
| public        | information_schema | df_settings  | VIEW       |
| public        | information_schema | schemata     | VIEW       |
+---------------+--------------------+--------------+------------+

示例:查询 cpu 表,限制为 10 行

$ influxdb3 query --database servers "SELECT DISTINCT usage_percent, time FROM cpu LIMIT 10"
+---------------+---------------------+
| usage_percent | time                |
+---------------+---------------------+
| 63.4          | 2024-02-21T19:25:00 |
| 25.3          | 2024-02-21T19:06:40 |
| 26.5          | 2024-02-21T19:31:40 |
| 70.1          | 2024-02-21T19:03:20 |
| 83.7          | 2024-02-21T19:30:00 |
| 55.2          | 2024-02-21T19:00:00 |
| 80.5          | 2024-02-21T19:05:00 |
| 60.2          | 2024-02-21T19:33:20 |
| 20.5          | 2024-02-21T18:58:20 |
| 85.2          | 2024-02-21T19:28:20 |
+---------------+---------------------+

使用 CLI 查询 InfluxQL

InfluxQL 是 InfluxData 开发的一种类 SQL 语言,具有专门的功能,旨在利用和使用 InfluxDB。它与所有版本的 InfluxDB 兼容,使其成为跨不同 InfluxDB 安装实现互操作性的理想选择。

要使用 InfluxQL 进行查询,请输入 influxdb3 query 子命令,并在语言选项中指定 influxql——例如

influxdb3 query \
  --database servers \
  --language influxql \
  "SELECT DISTINCT usage_percent FROM cpu WHERE time >= now() - 1d"

使用 API 查询

InfluxDB 3 支持 Flight (gRPC) API 和 HTTP API。要使用 HTTP API 查询数据库,请向 /api/v3/query_sql/api/v3/query_influxql 端点发送请求。在请求中,在 db 参数中指定数据库名称,在 q 参数中指定查询。您可以在查询字符串或 JSON 对象内传递参数。

使用 format 参数指定响应格式:prettyjsonlparquetcsvjson。默认为 json

示例:传递 URL 编码参数的查询

以下示例发送带有 URL 编码 SQL 查询的 HTTP GET 请求

curl -v "http://localhost:8181/api/v3/query_sql?db=servers&q=select+*+from+cpu+limit+5"
示例:传递 JSON 参数的查询

以下示例发送带有 JSON 有效负载中参数的 HTTP POST 请求

curl http://localhost:8181/api/v3/query_sql \
  --data '{"db": "server", "q": "select * from cpu limit 5"}'

使用 Python 客户端查询

使用 InfluxDB 3 Python 库与数据库交互并与您的应用程序集成。我们建议在 Python 虚拟环境中为您的特定项目安装所需的软件包。

要开始使用,请安装 influxdb3-python 软件包。

pip install influxdb3-python

从这里,您可以使用客户端库仅使用主机和**数据库名称

from influxdb_client_3 import InfluxDBClient3

client = InfluxDBClient3(
    host='http://localhost:8181',
    database='servers'
)

以下示例展示了如何使用 SQL 进行查询,然后使用 PyArrow 探索模式和处理结果

from influxdb_client_3 import InfluxDBClient3

client = InfluxDBClient3(
    host='http://localhost:8181',

    database='servers'
)

# Execute the query and return an Arrow table
table = client.query(
    query="SELECT * FROM cpu LIMIT 10",
    language="sql"
)

print("\n#### View Schema information\n")
print(table.schema)

print("\n#### Use PyArrow to read the specified columns\n")
print(table.column('usage_active'))
print(table.select(['host', 'usage_active']))
print(table.select(['time', 'host', 'usage_active']))

print("\n#### Use PyArrow compute functions to aggregate data\n")
print(table.group_by('host').aggregate([]))
print(table.group_by('cpu').aggregate([('time_system', 'mean')]))

有关 Python 客户端库的更多信息,请参阅 GitHub 中的 influxdb3-python 存储库

使用 InfluxDB 3 Explorer (Beta) 查询

您可以通过下载 Docker 镜像来使用 InfluxDB 3 Explorer 查询界面。

docker pull quay.io/influxdb/influxdb3-explorer:latest

使用以下命令运行界面

docker run --name influxdb3-explorer -p 8086:8888 quay.io/influxdb/influxdb3-explorer:latest

使用上面的默认设置,您可以在 http://localhost:8086 访问 UI。在“设置”页面上设置您期望的数据库连接详细信息。从那里,您可以查询数据、浏览数据库模式,并对时间序列数据进行基本可视化。

Last values cache

InfluxDB 3 Core 支持一个 last-n values cache,它将系列或列层次结构中的最后 N 个值存储在内存中。这使数据库能够在 10 毫秒内回答此类查询。您可以使用 influxdb3 CLI 来创建 last value cache

influxdb3 create last_cache \
  -d <DATABASE_NAME> \
  -t <TABLE> \
  [CACHE_NAME]

考虑以下 cpu 示例表

host应用时间使用率百分比状态
Bravo数据库2024-12-11T10:00:0055.2OK
Charlie缓存2024-12-11T10:00:0065.4OK
Bravo数据库2024-12-11T10:01:0070.1警告
Bravo数据库2024-12-11T10:01:0080.5OK
Alphaweb服务器2024-12-11T10:02:0025.3警告

以下命令创建一个名为 cpuCache 的最近值缓存

influxdb3 create last_cache \
  --database servers \
  --table cpu \
  --key-columns host,application \
  --value-columns usage_percent,status \
  --count 5 cpuCache

您可以为每个时间序列创建一个最近值缓存,但请注意可能占用过多内存的高基数表。

查询最近值缓存

要使用 LVC,请在查询中使用 last_cache() 函数调用它——例如

influxdb3 query \
  --database servers \
  "SELECT * FROM last_cache('cpu', 'cpuCache') WHERE host = 'Bravo';"

仅适用于 SQL

最近值缓存仅适用于 SQL,不适用于 InfluxQL;SQL 是默认语言。

删除最近值缓存

使用 influxdb3 CLI 来 删除最近值缓存

influxdb3 delete last_cache \
  --database <DATABASE_NAME> \
  --table <TABLE> \
  --cache-name <CACHE_NAME>

Distinct values cache

与最近值缓存类似,数据库可以在 RAM 中缓存表或列层次结构中单个列的不同值。这对于快速元数据查找非常有用,可以在 30 毫秒内返回结果。许多选项与最近值缓存类似。

您可以使用 influxdb3 CLI 来 创建不同值缓存

influxdb3 create distinct_cache \
  --database <DATABASE_NAME> \
  --table <TABLE> \
  --columns <COLUMNS> \
  [CACHE_NAME]

考虑以下 cpu 示例表

host应用时间使用率百分比状态
Bravo数据库2024-12-11T10:00:0055.2OK
Charlie缓存2024-12-11T10:00:0065.4OK
Bravo数据库2024-12-11T10:01:0070.1警告
Bravo数据库2024-12-11T10:01:0080.5OK
Alphaweb服务器2024-12-11T10:02:0025.3警告

以下命令创建一个名为 cpuDistinctCache 的不同值缓存

influxdb3 create distinct_cache \
  --database servers \
  --table cpu \
  --columns host,application \
  cpuDistinctCache

查询不同值缓存

要使用不同值缓存,请在查询中使用 distinct_cache() 函数调用它——例如

influxdb3 query \
  --database servers \
  "SELECT * FROM distinct_cache('cpu', 'cpuDistinctCache')"

仅适用于 SQL

不同缓存仅适用于 SQL,不适用于 InfluxQL;SQL 是默认语言。

删除不同值缓存

使用 influxdb3 CLI 来 删除不同值缓存

influxdb3 delete distinct_cache \
  --database <DATABASE_NAME> \
  --table <TABLE> \
  --cache-name <CACHE_NAME>

Python 插件和处理引擎

InfluxDB 3 处理引擎是一个嵌入式 Python VM,用于在数据库内部运行代码以处理和转换数据。

要激活处理引擎,请在启动 InfluxDB 3 Core 服务器时传递 --plugin-dir <PLUGIN_DIR> 选项。PLUGIN_DIR 是您用于存储 插件 文件的文件系统位置,供处理引擎运行。

插件

插件是一个 Python 函数,其签名与处理引擎 触发器 兼容。

触发器

当您创建触发器时,您需要指定一个 插件、一个数据库、可选参数和一个触发器规范,它定义了插件的执行时间和接收的数据。

触发器类型

InfluxDB 3 提供了以下类型的触发器,每种类型都有特定的触发器规范

  • WAL 刷新时:将一批写入的数据(针对特定表或所有表)发送到插件(默认情况下,每秒一次)。
  • 按计划:按照用户配置的计划(使用 crontab 或持续时间)执行插件;适用于数据收集和死信监控。
  • 按请求:将插件绑定到 /api/v3/engine/<ENDPOINT_PATH> 的自定义 HTTP API 端点。插件接收 HTTP 请求头和内容,然后可以解析、处理数据,并将数据发送到数据库或第三方服务。

测试、创建和触发插件代码

示例:用于 WAL 行的 Python 插件
# This is the basic structure for Python plugin code that runs in the
# InfluxDB 3 Processing engine.

# When creating a trigger, you can provide runtime arguments to your plugin,
# allowing you to write generic code that uses variables such as monitoring
thresholds, environment variables, and host names.
#
# Use the following exact signature to define a function for the WAL flush
# trigger.
# When you create a trigger for a WAL flush plugin, you specify the database
# and tables that the plugin receives written data from on every WAL flush
# (default is once per second).
def process_writes(influxdb3_local, table_batches, args=None):
    # here you can see logging. for now this won't do anything, but soon 
    # we'll capture this so you can query it from system tables
    if args and "arg1" in args:
        influxdb3_local.info("arg1: " + args["arg1"])

    # here we're using arguments provided at the time the trigger was set up 
    # to feed into paramters that we'll put into a query
    query_params = {"host": "foo"}
    # here's an example of executing a parameterized query. Only SQL is supported. 
    # It will query the database that the trigger is attached to by default. We'll 
    # soon have support for querying other DBs.
    query_result = influxdb3_local.query("SELECT * FROM cpu where host = '$host'", query_params)
    # the result is a list of Dict that have the column name as key and value as 
    # value. If you run the WAL test plugin with your plugin against a DB that 
    # you've written data into, you'll be able to see some results
    influxdb3_local.info("query result: " + str(query_result))

    # this is the data that is sent when the WAL is flushed of writes the server 
    # received for the DB or table of interest. One batch for each table (will 
    # only be one if triggered on a single table)
    for table_batch in table_batches:
        # here you can see that the table_name is available.
        influxdb3_local.info("table: " + table_batch["table_name"])

        # example to skip the table we're later writing data into
        if table_batch["table_name"] == "some_table":
            continue

        # and then the individual rows, which are Dict with keys of the column names and values
        for row in table_batch["rows"]:
            influxdb3_local.info("row: " + str(row))

    # this shows building a line of LP to write back to the database. tags must go first and 
    # their order is important and must always be the same for each individual table. Then 
    # fields and lastly an optional time, which you can see in the next example below
    line = LineBuilder("some_table")\
        .tag("tag1", "tag1_value")\
        .tag("tag2", "tag2_value")\
        .int64_field("field1", 1)\
        .float64_field("field2", 2.0)\
        .string_field("field3", "number three")
    
    # this writes it back (it actually just buffers it until the completion of this function
    # at which point it will write everything back that you put in)
    influxdb3_local.write(line)

    # here's another example, but with us setting a nanosecond timestamp at the end
    other_line = LineBuilder("other_table")
    other_line.int64_field("other_field", 1)
    other_line.float64_field("other_field2", 3.14)
    other_line.time_ns(1302)

    # and you can see that we can write to any DB in the server
    influxdb3_local.write_to_db("mytestdb", other_line)

    # just some log output as an example
    influxdb3_local.info("done")
在服务器上测试插件

安全地测试您的 InfluxDB 3 插件,而不会影响写入的数据。在插件测试期间

  • 插件执行的查询针对您发送请求的服务器执行。
  • 写入不会发送到服务器,而是返回给您。

要测试插件,请执行以下操作

  1. 创建一个插件目录——例如,/path/to/.influxdb/plugins

  2. 启动 InfluxDB 服务器 并包含 --plugin-dir <PATH> 选项。

  3. 示例插件代码 保存到插件目录内的插件文件中。如果您尚未将数据写入示例中的表,请注释掉查询数据的行。

  4. 要运行测试,请输入以下命令和以下选项

    • --lp--file:要测试的行协议
    • 可选:--input-arguments:插件代码的逗号分隔的 <KEY>=<VALUE> 参数列表
    influxdb3 test wal_plugin \
      --lp <INPUT_LINE_PROTOCOL> \
      --input-arguments "arg1=foo,arg2=bar" \
      --database <DATABASE_NAME> \
      <PLUGIN_FILENAME> 
    

该命令使用测试数据运行插件代码,将数据提供给插件代码,然后使用插件结果进行响应。您可以快速查看插件的行为方式、它将写入数据库的数据以及任何错误。然后,您可以编辑插件目录中的 Python 代码,并重新运行测试。服务器会为对 test API 的每个请求重新加载文件。

有关更多信息,请参阅 influxdb3 test wal_plugin 或运行 influxdb3 test wal_plugin -h

将插件代码放在服务器插件目录中,并在测试成功后,您就可以创建插件和触发器以在服务器上运行。

示例:测试、创建和运行插件

以下示例展示了如何测试插件,然后创建插件和触发器

# Test and create a plugin
# Requires:
#   - A database named `mydb` with a table named `foo`
#   - A Python plugin file named `test.py`
# Test a plugin
influxdb3 test wal_plugin \
  --lp "my_measure,tag1=asdf f1=1.0 123" \
  --database mydb \
  --input-arguments "arg1=hello,arg2=world" \
  test.py
# Create a trigger that runs the plugin
influxdb3 create trigger \
  -d mydb \
  --plugin test_plugin \
  --trigger-spec "table:foo" \
  --trigger-arguments "arg1=hello,arg2=world" \
  trigger1

创建插件和触发器后,输入以下命令以启用触发器,并在您写入数据时使其运行插件

influxdb3 enable trigger --database mydb trigger1 

有关更多信息,请参阅 Python 插件和处理引擎


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建于 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层级可供非商业家庭或业余爱好者使用。

有关更多信息,请查看