焦点:InfluxDB-Python
前段时间,需要往influxdb插入数据,就使用了InfluxDB-Python这个包,下面是使用示例
$ python
>>> from influxdb import InfluxDBClient
>>> json_body = [
{
"measurement": "cpu_load_short",
"tags": {
"host": "server01",
"region": "us-west"
},
"time": "2009-11-10T23:00:00Z",
"fields": {
"value": 0.64
}
}
]
>>> client = InfluxDBClient('localhost', 8086, 'root', 'root', 'example')
>>> client.create_database('example')
>>> client.write_points(json_body)
>>> result = client.query('select value from cpu_load_short;')
>>> print("Result: {0}".format(result))
这里其实有个比较隐晦的问题,关于time字段。当time字段为日期+时间的字符串的时候,一定要手动转换为UTC时间,这样插入influxdb的时间才是本地时间。
我抽取了InfluxDB-Python的相关代码,编写了一个测试脚本
gmu@DataDashboard:~$ cat t.py
#!/usr/bin/python3
import os
from pytz import UTC
from dateutil.parser import parse
from datetime import datetime
EPOCH = UTC.localize(datetime.utcfromtimestamp(0))
t = "2019-02-12T15:44:51Z"
print(t)
timestamp = parse(t)
if not timestamp.tzinfo:
print("XXX")
timestamp = UTC.localize(timestamp)
s = (timestamp - EPOCH).total_seconds()
os.system('date -d @' + str(int(s)) + ' "+%Y-%m-%dT%H:%M:%SZ"')
脚本的输出
gmu@DataDashboard:~$ ./t.py
2019-02-12T15:44:51Z
2019-02-12T23:44:51Z
从结果可以看出,python时间转换前后差了8个小时。最根本的原因是下面一句代码。
EPOCH = UTC.localize(datetime.utcfromtimestamp(0))
代码默认你输入的time的值是utc时间。