调试 Telegraf 的 MQTT 输出插件
Telegraf 支持将采集到指标发送到 MQTT 服务器。在使用中,如果程序的行为与预期不一致,那么可以通过打开调试日志排查问题。
Telegraf 提供了全局性的 debug
开关,但是目前无法开启底层使用的 MQTT 库的调试日志。此时就需要给 Telegraf 增加输出 MQTT 的调试日志的能力。
开启 Telegraf 的调试开关 🔗
参考文档 Troubleshoot Telegraf,在全局配置中设置 debug = true
,然后运行 telegraf 程序即可。
临时开启 MQTT 的调试日志 🔗
当前 Telegraf 底层试用的是 github.com/eclipse/paho.mqtt.golang (3.1/3.11版本) 和 github.com/eclipse/paho.golang/paho(V5版本)。
对于 3.1/3.11 版本,打开 Telegraf 源代码。在 mqtt_v3.go
中的 NewMQTTv311Client
函数的开头,添加一下代码;
mqtt.ERROR = mqttv3.New(os.Stdout, "[ERROR] ", 0)
mqtt.CRITICAL = mqttv3.New(os.Stdout, "[CRIT] ", 0)
mqtt.WARN = mqttv3.New(os.Stdout, "[WARN] ", 0)
mqtt.DEBUG = mqttv3.New(os.Stdout, "[DEBUG] ", 0)
然后编译 telegraf 可执行文件:
make build
如果需要编译其他平台的可执行文件,比如开发机器是 macOS,但服务器是 Linux,那么需要交叉编译,构建出 Linux 平台的可执行文件:
GOOS=linux GOARCH=amd64 make build
命令成功执行后,可执行文件就会出现在项目根目录。运行这个新的可执行文件,它就会打印出 MQTT 库生成的日志,包括目标 Topic。
对于V5版本的MQTT协议,与之类似。需要在在 mqtt_v5.go
修改 mqttv5auto.ClientConfig
的初始化代码。
更好的方法 🔗
如果 MQTT 输出插件本身就能支持输出调试日志,那就方便多了。提交一个 PR 是个不错的主意。
加载中...