Documentation

InfluxDB 错误消息

此页面记录了错误、它们的描述,以及在适用的情况下,常见的解决方案。

免责声明: 本文档不包含所有可能的 InfluxDB 错误的详尽列表。

错误:需要数据库名称

当某些 SHOW 查询未指定 database 时,会出现 database name required 错误。通过在 SHOW 查询中使用 ON 子句、在 CLI 中使用 USE <database_name>,或在 InfluxDB API 请求中使用 db 查询字符串参数来指定数据库。

相关的 SHOW 查询包括 SHOW RETENTION POLICIESSHOW SERIESSHOW MEASUREMENTSSHOW TAG KEYSSHOW TAG VALUESSHOW FIELD KEYS

资源: 模式探索, InfluxQL 参考

错误:每个数据库的最大系列超过: < >

当写入导致数据库中的 series 数量超过每个数据库允许的最大系列时,会发生 max series per database exceeded 错误。每个数据库允许的最大系列由配置文件的 [data] 部分中的 max-series-per-database 设置控制。

< > 中的信息显示了超出 max-series-per-database 的系列的测量和标签集。

默认情况下 max-series-per-database 设置为一百万。将设置更改为 0 允许每个数据库无限数量的系列。

错误解析查询:发现 < >,在行 < >,字符 < > 期望标识符

InfluxQL 语法

当 InfluxDB 在查询中预期一个标识符但未找到时,会出现 expected identifier 错误。 标识符是指代连续查询名称、数据库名称、字段键、测量名称、保留策略名称、订阅名称、标签键和用户名的标记。 该错误通常是一个温和的提醒,提示您仔细检查查询的语法。

示例

查询 1:

> CREATE CONTINUOUS QUERY ON "telegraf" BEGIN SELECT mean("usage_idle") INTO "average_cpu" FROM "cpu" GROUP BY time(1h),"cpu" END
ERR: error parsing query: found ON, expected identifier at line 1, char 25

查询 1 在 CREATE CONTINUOUS QUERYON 之间缺少一个连续查询名称。

查询 2:

> SELECT * FROM WHERE "blue" = true
ERR: error parsing query: found WHERE, expected identifier at line 1, char 15

查询 2 在 FROMWHERE 之间缺少一个测量名称。

InfluxQL 关键字

在某些情况下,当查询中的某个 标识符InfluxQL 关键字 时,会出现 expected identifier 错误。要成功查询一个也是关键字的标识符,请将该标识符用双引号括起来。

示例

查询 1:

> SELECT duration FROM runs
ERR: error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8

在查询 1 中,字段键 duration 是一个 InfluxQL 关键字。
使用双引号 duration 可以避免错误:

> SELECT "duration" FROM runs

查询 2:

> CREATE RETENTION POLICY limit ON telegraf DURATION 1d REPLICATION 1
ERR: error parsing query: found LIMIT, expected identifier at line 1, char 25

在查询 2 中,保留策略名称 limit 是一个 InfluxQL 关键字。
用双引号 limit 来避免错误:

> CREATE RETENTION POLICY "limit" ON telegraf DURATION 1d REPLICATION 1

虽然使用双引号是一种可接受的变通方法,但为了简便起见,我们建议您避免使用InfluxQL关键字作为标识符。

资源: InfluxQL 关键字, 查询语言文档

错误解析查询:找到 < >,预期在行 < > 处的字符串,字符 < >

当 InfluxDB 预期一个字符串但未找到时,会出现 expected string 错误。在大多数情况下,该错误是因为忘记在 CREATE USER 语句中引用密码字符串所致。

示例

> CREATE USER penelope WITH PASSWORD timeseries4dayz
ERR: error parsing query: found timeseries4dayz, expected string at line 1, char 36

创建用户(CREATE USER)语句需要在密码字符串周围使用单引号:

> CREATE USER penelope WITH PASSWORD 'timeseries4dayz'

请注意,您在进行请求认证时不应包含单引号。

资源: 身份验证和授权

错误解析查询:不支持混合聚合和非聚合查询

当一个 SELECT 语句包含一个 聚合函数 和一个独立的 字段键标签键 时,会发生 混合聚合和非聚合 错误。

聚合函数返回一个单一计算值,对于任何未聚合的字段或标签没有明显的单一值可返回。

示例

原始数据:

peg 测量有两个字段 ( square 和 round ) 和一个标签 ( force ) :

name: peg
---------
time                   square   round   force
2016-10-07T18:50:00Z   2        8       1
2016-10-07T18:50:10Z   4        12      2
2016-10-07T18:50:20Z   6        14      4
2016-10-07T18:50:30Z   7        15      3

查询 1:

> SELECT mean("square"),"round" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported

查询 1 包含一个聚合函数和一个独立字段。

mean("square") 返回一个从 peg 测量中的 square 四个值计算得出的单个聚合值,且从 round 字段的四个未聚合值中没有明显的单个字段值可以返回。

查询 2:

> SELECT mean("square"),"force" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported

查询 2 包含一个聚合函数和一个独立标签。

mean("square") 返回一个从 peg 测量中四个 square 值计算得出的单个聚合值,并且从四个未聚合的 force 标签值中没有明显的单个标签值可以返回。

资源: 函数

无效操作:时间和 *influxql.VarRef 不兼容

当查询中的日期时间字符串用双引号时,会出现 time and \*influxql.VarRef are not compatible 错误。日期时间字符串需要用单引号。

示例

双引号日期时间字符串:

> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= "2015-08-18T00:00:00Z" AND time <= "2015-08-18T00:12:00Z"
ERR: invalid operation: time and *influxql.VarRef are not compatible

单引号的日期时间字符串:

> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:12:00Z'

name: h2o_feet
time                   water_level
----                   -----------
2015-08-18T00:00:00Z   2.064
2015-08-18T00:06:00Z   2.116
2015-08-18T00:12:00Z   2.028

资源: 数据探索

无法解析 < >: 错误的时间戳

时间戳语法

行协议包含非UNIX时间戳格式的时间戳时,会发生bad timestamp错误。

示例

> INSERT pineapple value=1 '2015-08-18T23:00:00Z'
ERR: {"error":"unable to parse 'pineapple value=1 '2015-08-18T23:00:00Z'': bad timestamp"}

上面的行协议使用了一个 RFC3339 时间戳。将时间戳替换为 UNIX 时间戳以避免错误,并成功将数据点写入 InfluxDB:

> INSERT pineapple,fresh=true value=1 1439938800000000000

InfluxDB 行协议语法

在某些情况下,bad timestamp 错误与 InfluxDB 行协议中的更一般的语法错误一起发生。 行协议对空白非常敏感; 不当的空格可能导致 InfluxDB 认为字段或标签是无效的时间戳。

示例

写1

> INSERT hens location=2 value=9
ERR: {"error":"unable to parse 'hens location=2 value=9': bad timestamp"}

Write 1中的行协议用空格而不是逗号将hen测量与location=2标签分开。InfluxDB假设value=9字段是时间戳并返回错误。

使用逗号而不是空格在测量值和标签之间,以避免错误:

> INSERT hens,location=2 value=9

写 2

> INSERT cows,name=daisy milk_prod=3 happy=3
ERR: {"error":"unable to parse 'cows,name=daisy milk_prod=3 happy=3': bad timestamp"}

Write 2中的行协议用空格而不是逗号分隔milk_prod=3字段和happy=3字段。InfluxDB假定happy=3字段是时间戳并返回错误。

在两个字段之间使用逗号而不是空格,以避免错误:

> INSERT cows,name=daisy milk_prod=3,happy=3

资源: InfluxDB 行协议教程, InfluxDB 行协议参考

unable to parse < >: time outside range

当时间戳在InfluxDB 行协议中超出 InfluxDB 的有效时间范围时,会发生time outside range 错误。

最小有效时间戳是 -92233720368547758061677-09-21T00:12:43.145224194Z。最大有效时间戳是 92233720368547758062262-04-11T23:47:16.854775806Z

资源: InfluxDB 行协议教程, InfluxDB 行协议参考

写入失败,分片 < >: 引擎:缓存最大内存大小超出

当缓存内存大小超过配置文件中的 cache-max-memory-size 设置 时,会出现 cache maximum memory size exceeded 错误。

默认情况下, cache-max-memory-size 被设置为 512mb。 这个值适合大多数工作负载,但对于较大的写入量 或具有较高的 系列基数 的数据集来说,太小了。 如果您有很多 RAM,您可以将其设置为 0 以禁用缓存内存 限制,从而永远不会出现此错误。 您还可以检查 cache 测量中的 memBytes 字段 在 _internal 数据库 中了解内存中的缓存有多大。

already killed

当查询已被终止时,出现already killed错误,但在查询退出之前有后续的终止尝试。
当查询被终止时,它可能不会立即退出。
它将处于killed状态,这意味着信号已被发送,但查询本身尚未达到中断点。

资源: 查询管理

常见 -import 错误

查找在命令行接口 (CLI) 中导入数据时出现的常见错误。

  1. (可选) 自定义查看 -import 错误和输出的方式,通过运行以下任意命令:
  • 将错误和输出发送到一个新文件: influx -import -path={import-file}.gz -compressed {new-file} 2>&1
  • 将错误和输出发送到单独的文件: influx -import -path={import-file}.gz -compressed > {output-file} 2> {error-file}
  • 将错误发送到新文件: influx -import -path={import-file}.gz -compressed 2> {new-file}
  • 将输出发送到新文件: influx -import -path={import-file}.gz -compressed {new-file}
  1. 审核导入错误以找出可能的原因进行解决:

注意: 要了解如何使用 -import 命令,请参见 使用 -import 从文件中导入数据

不一致的数据类型

错误: partial write: field type conflict:

当导入的测量中的字段具有不一致的数据类型时,会发生此错误。确保测量中的所有字段具有相同的数据类型,例如 float64、int64 等。

超出保留政策的数据点

错误: partial write: points beyond retention policy dropped={number-of-points-dropped}

当导入的数据点早于指定的保留策略并被丢弃时,发生此错误。请验证导入文件中指定的保留策略是否正确。

未命名导入文件

错误: reading standard input: /path/to/directory: is a directory

-import 命令没有包含导入文件的名称时,会发生此错误。指定要导入的文件,例如: $ influx -import -path={filename}.txt -precision=s

Docker容器无法读取主机文件

错误: open /path/to/file: no such file or directory

当Docker容器无法读取主机上的文件时,会发生此错误。要使主机上的文件可读,请完成以下步骤。

使主机机器文件对Docker可读

  1. 创建一个目录,然后将文件复制到该目录以导入到InfluxDB。

  2. 当您启动Docker容器时,通过运行以下命令在InfluxDB容器上挂载新目录:

    docker run -v /dir/path/on/host:/dir/path/in/container

  3. 通过运行以下命令验证Docker容器是否可以读取宿主机文件:

    influx -import -path=/path/in/container



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

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