Skip to content

Commit a00f1f1

Browse files
joshuaparecstyan
andauthored
fix(promtail): Fix UDP receiver on syslog transport (#10708)
Co-authored-by: Callum Styan <[email protected]>
1 parent 425a2d6 commit a00f1f1

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ Starting with the 3.0 release we began using [conventional commits](https://www.
135135

136136
##### Fixes
137137

138+
* [10708](https://github.com/grafana/loki/pull/10708) **joshuapare**: Fix UDP receiver on syslog transport
138139
* [10631](https://github.com/grafana/loki/pull/10631) **thampiotr**: Fix race condition in cleaning up metrics when stopping to tail files.
139140
* [10798](https://github.com/grafana/loki/pull/10798) **hainenber**: Fix agent panicking after reloaded due to duplicate metric collector registration.
140141
* [10848](https://github.com/grafana/loki/pull/10848) **rgroothuijsen**: Correctly parse list of drop stage sources from YAML.

clients/pkg/promtail/targets/syslog/transport.go

+25-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package syslog
22

33
import (
4+
"bytes"
45
"context"
56
"crypto/tls"
67
"crypto/x509"
@@ -380,16 +381,32 @@ func (t *UDPTransport) handleRcv(c *ConnPipe) {
380381
defer t.openConnections.Done()
381382

382383
lbs := t.connectionLabels(c.addr.String())
383-
err := syslogparser.ParseStream(c, func(result *syslog.Result) {
384-
if err := result.Error; err != nil {
385-
t.handleMessageError(err)
386-
} else {
387-
t.handleMessage(lbs.Copy(), result.Message)
384+
385+
for {
386+
datagram := make([]byte, t.maxMessageLength())
387+
n, err := c.Read(datagram)
388+
if err != nil {
389+
if err == io.EOF {
390+
break
391+
}
392+
393+
level.Warn(t.logger).Log("msg", "error reading from pipe", "err", err)
394+
continue
388395
}
389-
}, t.maxMessageLength())
390396

391-
if err != nil {
392-
level.Warn(t.logger).Log("msg", "error parsing syslog stream", "err", err)
397+
r := bytes.NewReader(datagram[:n])
398+
399+
err = syslogparser.ParseStream(r, func(result *syslog.Result) {
400+
if err := result.Error; err != nil {
401+
t.handleMessageError(err)
402+
} else {
403+
t.handleMessage(lbs.Copy(), result.Message)
404+
}
405+
}, t.maxMessageLength())
406+
407+
if err != nil {
408+
level.Warn(t.logger).Log("msg", "error parsing syslog stream", "err", err)
409+
}
393410
}
394411
}
395412

0 commit comments

Comments
 (0)