如何使用 influxdb-python 向 influxdb 发送正确的时间戳

dor*_*and 6 python-3.x influxdb influxdb-python

我有test带测量的influxdb 数据库:

name: mes1
time          Amount     Buy_order_id Price     
----          ------     ------------ -----     
1529832177822 0.02294    132868375    130117.83 
Run Code Online (Sandbox Code Playgroud)

我想在 Grafana 中制作图表,但所有数据都在 1970 年。我还有其他测量:

name: cpu_load_short
time                Bool_value Float_value Int_value String_value host     region
----                ---------- ----------- --------- ------------ ----     ------
1257894000000000000 true       0.64        3         Text         server01 us-west
Run Code Online (Sandbox Code Playgroud)

这次效果很好。我发现,测量cpu_load_short中的时间存储在 ns 中,但测量mes1中的数据存储在 ms 中。

mes1收到来自 websocket 的时间。时间cpu_load_short是从 python 生成的:

datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
Run Code Online (Sandbox Code Playgroud)

所有数据都通过 influxdb-python 发送到 influxdb。我尝试调整时间mes1并在数字末尾添加六个零:

'1529832177822' -> '1529832177822000000'
Run Code Online (Sandbox Code Playgroud)

但我收到了:

OverflowError: signed integer is greater than maximum
Run Code Online (Sandbox Code Playgroud)

如何将数据发送到 influxdb 并从中制作图表,以便数据采用正确的格式和正确的日期?也许我遗漏了一些东西,但我不明白为什么我不能在 ns 中将数据发送到我的数据库,但我可以用 datetime 发送它。谁能给我解释一下,问题出在哪里?

Sta*_*nko 5

我遇到了同样的问题并且能够解决它,让我尝试指导你。

当您使用 influxdb-python 客户端将点写入 InfluxDB 时,您可以在方法中指定时间精度write_points。(http://influxdb-python.readthedocs.io/en/latest/api-documentation.html#influxdb.DataFrameClient.write_points

一个例子:

from influxdb import InfluxDBClient
client = InfluxDBClient(host=host, port=port, database=database)
client.write_points(value, time_precision='ms')
Run Code Online (Sandbox Code Playgroud)

这将为您转换msns。希望这可以帮助。

  • 如果您使用“SeriesHelper”类怎么办? (3认同)