【问题标题】:influxdb timestamp writeinfluxdb 时间戳写入
【发布时间】:2018-04-06 15:29:24
【问题描述】:

如何格式化数据以让 influxdb 知道 myscript 正在发送时间戳。

我有一个发送的脚本:

ping,host=10.22.0.253,hostname=JAYNET01AA,location=Lab,function=Router rtt=1.26 timestamp=1.5230279389238705e+18 ping,host=10.22.0.254,hostname=JAYNET01BB,location=Lab,function=Router rtt=2.0 时间戳=1.5230279389238705e+18 ping,host=10.254.22.105,hostname=JAYNET02BB,location=Lab,function=Router rtt=0.483 timestamp=1.5230279389238705e+18

我在最后添加了一个精度变量(influx 1.2 默认为纳秒)。但似乎 influxdb 不承认它。也许你知道我需要以什么格式将数据推送到 influxdb 以使 influxdb 明白这是时间戳数据。

P.S 我收到了这个回复 ": 错误的时间戳\n无法解析"

是否有将时间戳转换为 RFC 3339 格式的简单方法? 谢谢

【问题讨论】:

    标签: precision influxdb


    【解决方案1】:

    您需要以线路协议发送数据。

    https://docs.influxdata.com/influxdb/v1.5//write_protocols/line_protocol_tutorial/#timestamp

    删除 timestamp= 部分将使 influxdb 为数据提供时间戳。

    但是,如果您使用脚本将数据发送到数据库 - 如果您完全不使用时间戳,那么数据库服务器将为数据提供一个时间戳。

    此外,如果您开始插入自己的时间戳,您将面临高系列基数和最终性能问题的风险。

    我没有足够的代表来发表评论和提问,所以有可能会被删除,但如果我知道什么类型的脚本(powershell/bash/其他)我可以提供更多。

    但是,如果您正在运行 bash 或 powershell 脚本,您也可以使用带有内置 ping 测试的 Telegraf 代理(Influx 堆栈的一部分)。如果您想要更自定义的 ping 测试,您可以在 bash 或 powershell 中编写脚本,然后使用 EXEC 插件运行脚本并获取信息。

    尽管如此,事实是,如果您省略时间戳,那么 Influx 将在写入数据时添加一个。如果这是时间戳的唯一要求,那么我会将其从脚本中完全删除。

    EXEC PLUGIN

    此链接适用于将数据发送到数据库的powershell script

    希望对我有所帮助,我在尝试让 powershell 发送数据到大量涌入时度过了一段可怕的时光。 exec 插件没有很好的文档记录。

    另外,如果您还没有,我建议您更新到 influxDB 1.4/1.5 - 涉及 Influx 处理内存方式的新功能(还有更多)。

    问候

    菲尔

    编辑:我也不认为时间戳值是有效的。你是 需要转义非数字部分。

    https://docs.influxdata.com/influxdb/v1.5/write_protocols/line_protocol_reference/#quoting-special-characters-and-additional-naming-guidelines

    抱歉,如果链接没有格式化,我是通过手机发布的,我不知道如何正确发布。

    【讨论】:

    • 感谢您提供信息。我设法发送时间戳信息。但似乎涌入需要 RC3339 时间戳格式。 Python 3.6 没有内置模块来支持转换,所以这意味着我需要安装和应用一些自定义模块,这使得解决方案相当过度设计......谢谢