InfluxDB:只有两个测量条目最终进入数据库



我有以下代码:

if __name__ == '__main__':
measurements = [
{
"name": "name_of_my_measurement",
"tags": {
"customer_code": "FOO"
},
"fields": {
"data_path": "s3://foo/2022-05-22",
"count": "40690526"
}
},
{
"name": "name_of_my_measurement",
"tags": {
"customer_code": "FOO"
},
"fields": {
"data_path": "s3://foo/2022-05-21",
"count": "10"
}
},
....
]
for m in measurements:
serialized_measurement = json_metric_serializer_format_to_influxdb_info(m)
influxdb_utils.write_value_into_influxDB(client=i_client,
tags=serialized_measurement.tags,
fields=serialized_measurement.fields,
measurement=serialized_measurement.measurement,
time=serialized_measurement.time)


def json_metric_serializer_format_to_influxdb_info(meas):
import collections
influxdb_info = collections.namedtuple("influxdb_info", ["measurement", "fields", "tags", "time"])
measurement = str(meas["name"])
time = meas["fields"].get("time", "")
fields = {x: meas["fields"][x] for x in meas["fields"] if not x == "time"}
tags = meas["tags"]
return influxdb_info(measurement=measurement, fields=fields, tags=tags, time=time)

def write_value_into_influxDB(client, tags, fields, measurement, time):
import datetime
if time == '':
time = datetime.datetime.today().strftime('%Y-%m-%dT%H:%M:%SZ')
json_body = [
{
"measurement": "{measurement}".format(measurement=measurement),
"tags": tags,
"fields": fields,
"time": time
}
]
client.write_points(json_body)

measurements数组中可能有100个条目,但是当代码运行时,所有这些条目中只有两个最终出现在name_of_my_measurement测量表中。这些条目看起来完全是随机的。例如,这些data_path字段有一个日期,在测量数组中有20个连续的日期路径,每当我运行脚本并在《涌入》中检查测量时,这些测量中的另两组将被写入数据库。在我看来这完全是随机的。

这里会出什么问题呢?

这是一个复合键问题。当我像这样改变测量值时:

{
"name": "name_of_my_measurement",
"tags": {
"customer_code": "FOO",
"data_path": "s3://foo/2022-05-21"
},
"fields": {
"count": "10"
}
}

所有条目已成功保存。

这也解释了你应该如何比我更明智地选择你的标签和字段。

最新更新