Telegraf多输入对应InfluxDB多库失败,求namepass用法指导
问题分析与解决
你的配置无法工作主要有两个核心问题:
- 不存在
[[inputs.db1]]/[[inputs.db2]]这类Telegraf官方输入插件,你需要用通用的[[inputs.http]]插件来抓取远程JSON数据。 namepass是用来匹配measurement名称的过滤规则,而非输入插件的标识,之前的配置逻辑不匹配Telegraf的工作机制。
以下是两种可行的修正方案:
方案一:通过name_override+namepass实现分流
这种方式直接给每个HTTP输入设置唯一的measurement名称,输出插件通过namepass匹配该名称,将数据发送到对应数据库:
# 输出到shellyem数据库,仅处理measurement为db1的数据 [[outputs.influxdb]] urls = ["http://172.18.0.2:8086"] database = "shellyem" namepass = ["db1"] # 输出到shell数据库,仅处理measurement为db2的数据 [[outputs.influxdb]] urls = ["http://172.18.0.2:8086"] database = "shell" namepass = ["db2"] # 第一个HTTP输入:抓取192.168.1.191的电表数据,指定measurement名为db1 [[inputs.http]] urls = ["http://192.168.1.191/emeter/0"] timeout = "1s" data_format = "json" name_override = "db1" # 第二个HTTP输入:抓取192.168.1.192的电表数据,指定measurement名为db2 [[inputs.http]] urls = ["http://192.168.1.192/emeter/0"] timeout = "1s" data_format = "json" name_override = "db2"
方案二:通过自定义Tag+tagpass实现分流(适合多维度区分场景)
给每个输入的数据打自定义标签,输出插件通过tagpass过滤标签实现分流:
# 输出到shellyem数据库,仅处理带有source=db1标签的数据 [[outputs.influxdb]] urls = ["http://172.18.0.2:8086"] database = "shellyem" tagpass = { source = ["db1"] } # 输出到shell数据库,仅处理带有source=db2标签的数据 [[outputs.influxdb]] urls = ["http://172.18.0.2:8086"] database = "shell" tagpass = { source = ["db2"] } # 第一个HTTP输入:给数据打source=db1标签 [[inputs.http]] urls = ["http://192.168.1.191/emeter/0"] timeout = "1s" data_format = "json" tags = { source = "db1" } # 第二个HTTP输入:给数据打source=db2标签 [[inputs.http]] urls = ["http://192.168.1.192/emeter/0"] timeout = "1s" data_format = "json" tags = { source = "db2" }
测试验证
修改配置后,可通过以下命令测试配置是否正常工作:
telegraf --config telegraf.conf --test
该命令会输出Telegraf采集到的数据,你可以检查measurement名称或标签是否正确,以及数据是否按预期分流。
内容的提问来源于stack exchange,提问作者user20592638
相关产品推荐
相关产品推荐

