diff --git a/plugins/outputs/mqtt/mqtt_test.go b/plugins/outputs/mqtt/mqtt_test.go index 8fa8886db..bc370b554 100644 --- a/plugins/outputs/mqtt/mqtt_test.go +++ b/plugins/outputs/mqtt/mqtt_test.go @@ -908,6 +908,11 @@ func TestGenerateTopicName(t *testing.T) { pattern: "double//slashes//are//ignored", want: "double/slashes/are/ignored", }, + { + name: "preserve leading forward slash", + pattern: "/this/is/a/topic", + want: "/this/is/a/topic", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/plugins/outputs/mqtt/topic_name_generator.go b/plugins/outputs/mqtt/topic_name_generator.go index cf54eb03e..f6c2d599f 100644 --- a/plugins/outputs/mqtt/topic_name_generator.go +++ b/plugins/outputs/mqtt/topic_name_generator.go @@ -54,5 +54,8 @@ func (t *TopicNameGenerator) Generate(hostname string, m telegraf.Metric) (strin if topic == "" { return m.Name(), nil } + if strings.HasPrefix(b.String(), "/") { + topic = "/" + topic + } return topic, nil }