InfluxDB线路协议错误时间戳

lap*_*sus 2 influxdb

我正在尝试发布此数据

my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1495179651177999872
my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=444 1495179651203000064
Run Code Online (Sandbox Code Playgroud)

帖子的网址看起来像

http://influx.local:8086/write?db=testdb&u=myuser&p=myasswd
Run Code Online (Sandbox Code Playgroud)

原始回应:

HTTP/1.1 400 Bad Request
Content-Type: application/json
Request-Id: 4a1802d2-3ebd-11e7-8030-000000000000
X-Influxdb-Version: 1.1.4
Date: Mon, 22 May 2017 07:07:17 GMT
Content-Length: 147

{"error":"partial write:\nunable to parse 'my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1495179651177999872\r': bad timestamp"}
Run Code Online (Sandbox Code Playgroud)

时间戳对我来说似乎有效。
如果我只发布一行(而不是上面的示例中的两行),那么效果很好!
我还想知道时间戳记之后错误日志的末尾“ \ r”在做什么。因为我写的是“ \ n”。

有趣的是,直到最近我才对InfluxDB进行写操作没有任何问题。不涉及版本升级。

我正在运行InfluxDB 1.x(不确定确切的版本)

为了解决这个问题,如果我完全省略了时间戳(出于测试目的),它仍然不起作用:

{"error":"partial write:\nunable to parse 'my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123\r': invalid number"}
Run Code Online (Sandbox Code Playgroud)

更新:出于测试目的,我安装了InfluxDb 1.2.7(Windows Standalone)
有效负载与以前相同

my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1439856000
my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=444 1439856001
Run Code Online (Sandbox Code Playgroud)

大量报告返回:

HTTP/1.1 400 Bad Request
Content-Type: application/json
Request-Id: eca5283a-3ec4-11e7-8029-000000000000
X-Influxdb-Version: 1.2.4
Date: Mon, 22 May 2017 08:01:56 GMT
Content-Length: 147

{"error":"partial write: unable to parse 'my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1439856000\r': bad timestamp dropped=0"}
Run Code Online (Sandbox Code Playgroud)

所有这些测试都是使用Fiddler Composer进行的。

Ste*_*sed 5

查看包含答案的评论。但是,这是怎么回事:

my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1495179651177999872\r\n 
my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=444 1495179651203000064
Run Code Online (Sandbox Code Playgroud)

问题在于回车符-也称为换行符(\ n)和换行符(\ r)将两个条目分开。Windows(CRLF)使用此约定。解决方案是确保对行尾使用“ Linux”约定。

即使只发送一行,换行字符也是有问题的。经常看到的一个不相关的问题是“无效的布尔值”。如果第一次使用字段可以被influx解释为布尔值(“ t ”,“ true ”,“ true ”,“ TRUE ”,“ f ”,“ false ”,“ False ”或“ FALSE ”中的任何一个),则涌入将永远使该字段变为布尔值。最后,请注意可能包含空格,逗号或其他奇怪字符的字段。我建议两种预防措施:

  1. 对于任何为整数的字段,请在值后加上i,例如:HelloWorld=123i
  2. 对于字符串值,请务必用引号引起来。一旦值到达中间带有空格,行数据就会崩溃。例如。 TNR="test"告诉influx您的数据是字符串。

有关更多信息,请参见Influx线路协议文档