InfluxDB线路协议坏时间戳

时间:2017-05-22 07:12:35

标签: influxdb

我正在尝试发布此数据

my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1495179651177999872
my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=444 1495179651203000064

POST Url 看起来像那样

http://influx.local:8086/write?db=testdb&u=myuser&p=myasswd

原始回复:

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"}

时间戳看起来对我有用。
如果我只张贴一行(不是上面例子中的两行),它的效果非常好!
我也想知道在时间戳之后错误日志末尾的“\ r”是做什么的。因为我正在写“\ n”。

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

我正在运行InfluxDB 1.x(不确定究竟是哪个版本)

要完成混淆......如果我完全省略时间戳(用于测试目的),它仍然不起作用:

{"error":"partial write:\nunable to parse 'my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123\r': invalid number"}

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

my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1439856000
my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=444 1439856001

Influx报告回复:

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"}

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

2 个答案:

答案 0 :(得分:4)

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

my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=123 1495179651177999872\r\n 
my_tests,SNR=533033200650344358002D00,TNR=test HelloWorld=444 1495179651203000064

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

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

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

有关更多信息,请参见Influx Line Protocol documentation

答案 1 :(得分:0)

我发现curl对于放置数据很有用,我将数据写在了文件上。然后使用:

  

卷曲“ http://localhost:9999/api/v2/write?org=YOUR_ORG&bucket=YOUR_BUCKET&precision=s” \     --header“授权:令牌YOURAUTHTOKEN” \     --data-binary @ pathfile / data.txt

我强烈建议--data-binary除外--data,因为\ n无法在--data上读取

https://v2.docs.influxdata.com/v2.0/write-data/#example-api-write-request