InfluxDB时间戳写入格式问题:如何让脚本发送的时间戳被识别?
解决InfluxDB识别自定义时间戳的问题
我来帮你搞定这个问题!你的核心问题是把时间戳当成普通字段来传输了,InfluxDB的Line Protocol有明确的格式要求,咱们一步步调整:
先明确正确的Line Protocol结构
InfluxDB识别的行数据格式是这样的:
measurement,tag_key=tag_value field_key=field_value timestamp
拆解一下:
measurement:你的数据测量名(比如例子里的ping)tag_set:标签键值对,用逗号分隔(像host=10.22.0.253这类)field_set:字段键值对,用空格和标签集分隔(比如你的rtt=1.26)timestamp:必须放在整行最后,和字段集用空格分隔,是代表对应精度的Unix时间戳整数
修正你的数据格式
把你原来的timestamp=xxx部分移到行尾,并且去掉timestamp=这个键名,只保留数值(转成整数形式更稳妥,避免科学计数法的解析问题)。修正后的示例数据如下:
ping,host=10.22.0.253,hostname=JAYNET01AA,location=Lab,function=Router rtt=1.26 1523027938923870500 ping,host=10.22.0.254,hostname=JAYNET01BB,location=Lab,function=Router rtt=2.0 1523027938923870500 ping,host=10.254.22.105,hostname=JAYNET02BB,location=Lab,function=Router rtt=0.483 1523027938923870500
结合你提到的precision变量的关键注意点
你已经加了precision变量,一定要保证时间戳精度和它匹配:
- 如果设置
precision=ns(纳秒,InfluxDB默认),你当前的时间戳数值(1.523e+18)转成整数1523027938923870500就完全没问题 - 如果是
precision=ms(毫秒),得把时间戳除以1000000,得到1523027938923 - 如果是
precision=s(秒),则除以1e9,得到1523027938 - 不管用哪种精度,时间戳都必须是整数,尽量别用科学计数法(虽然InfluxDB可能兼容,但整数形式更可靠)
额外小提示
- 字段值类型要准确:像
rtt这种浮点数值不用加引号;如果是字符串类型的字段(比如status="success"),必须用双引号包裹 - 如果不指定时间戳,InfluxDB会自动用接收数据的时间作为时间戳,但你需要自定义时间戳的话,一定要放在行尾的正确位置
内容的提问来源于stack exchange,提问作者saddayz
相关产品推荐
相关产品推荐

