调试 Telegraf 的 MQTT 输出插件

2024-01-18#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 是个不错的主意。


加载中...