From bccecef13bc574ca9386cd55d4ce247cf2248ab5 Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Tue, 11 Jan 2022 15:15:13 -0700 Subject: [PATCH] fix: correctly set ASCII trailer for syslog output (#10393) --- plugins/outputs/syslog/syslog.go | 6 +++++- plugins/outputs/syslog/syslog_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/plugins/outputs/syslog/syslog.go b/plugins/outputs/syslog/syslog.go index d5925d4df..78308b6b0 100644 --- a/plugins/outputs/syslog/syslog.go +++ b/plugins/outputs/syslog/syslog.go @@ -219,7 +219,11 @@ func (s *Syslog) getSyslogMessageBytesWithFraming(msg *rfc5424.SyslogMessage) ([ return append([]byte(strconv.Itoa(len(msgBytes))+" "), msgBytes...), nil } // Non-transparent framing - return append(msgBytes, byte(s.Trailer)), nil + trailer, err := s.Trailer.Value() + if err != nil { + return nil, err + } + return append(msgBytes, byte(trailer)), nil } func (s *Syslog) initializeSyslogMapper() { diff --git a/plugins/outputs/syslog/syslog_test.go b/plugins/outputs/syslog/syslog_test.go index f245bcc84..f4948b421 100644 --- a/plugins/outputs/syslog/syslog_test.go +++ b/plugins/outputs/syslog/syslog_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" + "github.com/influxdata/go-syslog/v3/nontransparent" "github.com/influxdata/telegraf" framing "github.com/influxdata/telegraf/internal/syslog" "github.com/influxdata/telegraf/metric" @@ -58,6 +59,31 @@ func TestGetSyslogMessageWithFramingNonTransparent(t *testing.T) { messageBytesWithFraming, err := s.getSyslogMessageBytesWithFraming(syslogMessage) require.NoError(t, err) + require.Equal(t, "<13>1 2010-11-10T23:00:00Z testhost Telegraf - testmetric -\n", string(messageBytesWithFraming), "Incorrect Octect counting framing") +} + +func TestGetSyslogMessageWithFramingNonTransparentNul(t *testing.T) { + // Init plugin + s := newSyslog() + s.initializeSyslogMapper() + s.Framing = framing.NonTransparent + s.Trailer = nontransparent.NUL + + // Init metrics + m1 := metric.New( + "testmetric", + map[string]string{ + "hostname": "testhost", + }, + map[string]interface{}{}, + time.Date(2010, time.November, 10, 23, 0, 0, 0, time.UTC), + ) + + syslogMessage, err := s.mapper.MapMetricToSyslogMessage(m1) + require.NoError(t, err) + messageBytesWithFraming, err := s.getSyslogMessageBytesWithFraming(syslogMessage) + require.NoError(t, err) + require.Equal(t, "<13>1 2010-11-10T23:00:00Z testhost Telegraf - testmetric -\x00", string(messageBytesWithFraming), "Incorrect Octect counting framing") }