Telegraf配置多InfluxDB v2桶数据重复及启动报错问题求助
Telegraf多InfluxDB v2存储桶配置异常及启动失败问题
一、首次配置:原有数据同时写入两个存储桶的原因
你配置了两个独立的[[outputs.influxdb_v2]]实例,但Telegraf的输出插件默认会接收所有输入插件采集到的数据,没有做任何过滤规则的情况下,zigbee和solar的MQTT数据会被每个输出插件分别写入对应的桶,最终导致zigbee的数据也流入了solar桶。
解决方法:给输出插件添加标签过滤
给每个输入的数据添加专属标签,然后让输出插件只处理对应标签的数据,配置如下:
# 仅写入zigbee桶,只处理带bucket=zigbee标签的数据 [[outputs.influxdb_v2]] urls = ["http://127.0.0.1:8086"] token = "token==" organization = "mini31" bucket = "zigbee" [outputs.influxdb_v2.tagpass] bucket = ["zigbee"] [[inputs.mqtt_consumer]] servers = ["tcp://127.0.0.1:1883"] topics = [ "zigbee2mqtt/Home/+/Temp", ] data_format = "json_v2" # 给该输入的数据添加专属标签 [inputs.mqtt_consumer.tags] bucket = "zigbee" [[inputs.mqtt_consumer.json_v2]] measurement_name = "temperature" [[inputs.mqtt_consumer.topic_parsing]] topic = "zigbee2mqtt/Home/+/Temp" tags = "_/_/room/_" [[inputs.mqtt_consumer.json_v2.field]] path = "temperature" type = "float" # 仅写入solar桶,只处理带bucket=solar标签的数据 [[outputs.influxdb_v2]] urls = ["http://127.0.0.1:8086"] token = "token==" organization = "mini31" bucket = "solar" [outputs.influxdb_v2.tagpass] bucket = ["solar"] [[inputs.mqtt_consumer]] servers = ["tcp://127.0.0.1:1883"] topics = [ "solar/inverter" ] data_format = "json_v2" # 给该输入的数据添加专属标签 [inputs.mqtt_consumer.tags] bucket = "solar" [[inputs.mqtt_consumer.json_v2]] measurement_name = "generation" [[inputs.mqtt_consumer.json_v2.field]] path = "ppv" rename = "generation" type = "int"
二、第二次配置:启动失败的原因及修复
报错原因
- 配置项放错位置:
exclude_bucket_tag是输出插件influxdb_v2的专属配置,你把它写到了输入插件mqtt_consumer的块里,Telegraf无法识别该配置项,因此报错。 - 配置块嵌套错误:你把
[[inputs.mqtt_consumer]]嵌套在了[[outputs.influxdb_v2]]的块内,而Telegraf要求[[inputs.*]]和[[outputs.*]]是同级配置块,不能嵌套。
修复后的正确配置(使用bucket_tag方式)
[[outputs.influxdb_v2]] urls = ["http://127.0.0.1:8086"] token = "token==" organization = "mini31" bucket = "" bucket_tag = "bucket" # 若不想把bucket标签写入InfluxDB,在此配置exclude_bucket_tag exclude_bucket_tag = true # 采集zigbee数据,对应zigbee桶 [[inputs.mqtt_consumer]] servers = ["tcp://127.0.0.1:1883"] topics = [ "zigbee2mqtt/Home/+/Temp", ] data_format = "json_v2" [inputs.mqtt_consumer.tags] bucket = "zigbee" [[inputs.mqtt_consumer.json_v2]] measurement_name = "temperature" [[inputs.mqtt_consumer.topic_parsing]] topic = "zigbee2mqtt/Home/+/Temp" tags = "_/_/room/_" [[inputs.mqtt_consumer.json_v2.field]] path = "temperature" type = "float" # 采集solar数据,对应solar桶 [[inputs.mqtt_consumer]] servers = ["tcp://127.0.0.1:1883"] topics = [ "solar/inverter" ] data_format = "json_v2" [inputs.mqtt_consumer.tags] bucket = "solar" [[inputs.mqtt_consumer.json_v2]] measurement_name = "generation" [[inputs.mqtt_consumer.json_v2.field]] path = "ppv" rename = "generation" type = "int"
关键注意点
- 输出插件默认接收所有输入数据,必须通过标签过滤(
tagpass/tagdrop)或bucket_tag机制区分写入目标 - 每个配置项必须放在对应的插件块内,不要混淆输入/输出插件的配置参数
[[inputs.*]]和[[outputs.*]]为同级配置块,禁止嵌套
内容的提问来源于stack exchange,提问作者Richard Barraclough
相关产品推荐
相关产品推荐

