InfluxDB写入数据遇Bad timestamp错误,请求技术排查支持
解决InfluxDB写入时400 Bad Request(时间戳解析异常)问题
老哥,我一眼就瞅到你这个问题的根源了——你碰到的400错误,核心是误用了precision参数,导致InfluxDB没法正确解析你的时间戳。
先拆解你的curl命令看看问题出在哪:
curl -i -XPOST 'http://localhost:8086/write?db=devmessdaten&precision=rfc3339' --data-binary 'Pist,Anlage="ff4113bc-dec1-435c-9503-c31436dd98b8" value=0 2018-03-21T00:53:00Z'
问题核心:precision=rfc3339是无效参数
InfluxDB的write API里,precision参数的作用是指定数值型时间戳的单位,可选值只有这几个:ns(纳秒,默认)、u(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)——根本没有rfc3339这个选项!
而你传入的是RFC3339格式的字符串时间戳(2018-03-21T00:53:00Z),这种格式InfluxDB会自动识别,完全不需要额外指定precision参数。你加了这个无效参数后,InfluxDB反而会误以为你要传入对应单位的数值时间戳,自然就报错说时间戳异常了。
解决方案
给你两个可行的修改方案:
方案1:直接移除无效的precision参数
这是最简单的方式,保留你原来的RFC3339时间戳即可:
curl -i -XPOST 'http://localhost:8086/write?db=devmessdaten' --data-binary 'Pist,Anlage="ff4113bc-dec1-435c-9503-c31436dd98b8" value=0 2018-03-21T00:53:00Z'
方案2:改用数值型时间戳(可选)
如果你更习惯用数值时间戳,先把RFC3339时间转成对应单位的数值(比如2018-03-21T00:53:00Z对应的秒级时间戳是1521583980),然后指定对应的precision参数:
curl -i -XPOST 'http://localhost:8086/write?db=devmessdaten&precision=s' --data-binary 'Pist,Anlage="ff4113bc-dec1-435c-9503-c31436dd98b8" value=0 1521583980'
额外提醒(避免后续踩坑)
再给你补充几个InfluxDB行协议的关键规则:
- 标签部分(比如
Anlage="...")和字段部分(比如value=0)之间必须用空格分隔 - 每条数据至少要有一个字段;字段值如果是字符串必须加双引号,数值型则不需要
- 时间戳是可选的,如果不指定,InfluxDB会自动用当前服务器时间作为写入时间
内容的提问来源于stack exchange,提问作者Sebastian Parkitny
相关产品推荐
相关产品推荐

