InfluxDB 错误消息
此页面记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档。
此页面记录了错误、它们的描述,以及在适用的情况下,常见的解决方案。
免责声明: 本文档不包含所有可能的 InfluxDB 错误的详尽列表。
错误:需要数据库名称
当某些 SHOW 查询未指定 database 时,会出现 database name required 错误。通过在 SHOW 查询中使用 ON 子句、在 CLI 中使用 USE ,或在 InfluxDB API 请求中使用 db 查询字符串参数来指定数据库。
相关的 SHOW 查询包括 SHOW RETENTION POLICIES、SHOW SERIES、SHOW MEASUREMENTS、SHOW TAG KEYS、SHOW TAG VALUES 和 SHOW 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 QUERY 和 ON 之间缺少一个连续查询名称。
查询 2:
> SELECT * FROM WHERE "blue" = true
ERR: error parsing query: found WHERE, expected identifier at line 1, char 15
查询 2 在 FROM 和 WHERE 之间缺少一个测量名称。
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 错误。
最小有效时间戳是 -9223372036854775806 或 1677-09-21T00:12:43.145224194Z。最大有效时间戳是 9223372036854775806 或 2262-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) 中导入数据时出现的常见错误。
- (可选) 自定义查看
-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}
- 审核导入错误以找出可能的原因进行解决:
注意: 要了解如何使用
-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可读
创建一个目录,然后将文件复制到该目录以导入到InfluxDB。
当您启动Docker容器时,通过运行以下命令在InfluxDB容器上挂载新目录:
docker run -v /dir/path/on/host:/dir/path/in/container
通过运行以下命令验证Docker容器是否可以读取宿主机文件:
influx -import -path=/path/in/container