@@ -11,6 +11,7 @@ import (
11
11
"github.com/go-kit/log/level"
12
12
"github.com/leodido/go-syslog/v4"
13
13
"github.com/leodido/go-syslog/v4/rfc3164"
14
+ "github.com/leodido/go-syslog/v4/rfc5424"
14
15
"github.com/prometheus/common/model"
15
16
"github.com/prometheus/prometheus/model/labels"
16
17
"github.com/prometheus/prometheus/model/relabel"
@@ -106,7 +107,7 @@ func (t *SyslogTarget) handleMessageError(err error) {
106
107
t .metrics .syslogParsingErrors .Inc ()
107
108
}
108
109
109
- func (t * SyslogTarget ) handleMessage (connLabels labels.Labels , msg syslog.Message ) {
110
+ func (t * SyslogTarget ) handleMessageRFC5424 (connLabels labels.Labels , msg syslog.Message ) {
110
111
rfc5424Msg := msg .(* rfc5424.SyslogMessage )
111
112
112
113
if rfc5424Msg .Message == nil {
@@ -173,6 +174,64 @@ func (t *SyslogTarget) handleMessage(connLabels labels.Labels, msg syslog.Messag
173
174
t .messages <- message {filtered , m , timestamp }
174
175
}
175
176
177
+ func (t * SyslogTarget ) handleMessageRFC3164 (connLabels labels.Labels , msg syslog.Message ) {
178
+ rfc3164Msg := msg .(* rfc3164.SyslogMessage )
179
+
180
+ if rfc3164Msg .Message == nil {
181
+ t .metrics .syslogEmptyMessages .Inc ()
182
+ return
183
+ }
184
+
185
+ lb := labels .NewBuilder (connLabels )
186
+ if v := rfc3164Msg .SeverityLevel (); v != nil {
187
+ lb .Set ("__syslog_message_severity" , * v )
188
+ }
189
+ if v := rfc3164Msg .FacilityLevel (); v != nil {
190
+ lb .Set ("__syslog_message_facility" , * v )
191
+ }
192
+ if v := rfc3164Msg .Hostname ; v != nil {
193
+ lb .Set ("__syslog_message_hostname" , * v )
194
+ }
195
+ if v := rfc3164Msg .Appname ; v != nil {
196
+ lb .Set ("__syslog_message_app_name" , * v )
197
+ }
198
+ if v := rfc3164Msg .ProcID ; v != nil {
199
+ lb .Set ("__syslog_message_proc_id" , * v )
200
+ }
201
+ if v := rfc3164Msg .MsgID ; v != nil {
202
+ lb .Set ("__syslog_message_msg_id" , * v )
203
+ }
204
+
205
+ processed , _ := relabel .Process (lb .Labels (), t .relabelConfig ... )
206
+
207
+ filtered := make (model.LabelSet )
208
+ for _ , lbl := range processed {
209
+ if strings .HasPrefix (lbl .Name , "__" ) {
210
+ continue
211
+ }
212
+ filtered [model .LabelName (lbl .Name )] = model .LabelValue (lbl .Value )
213
+ }
214
+
215
+ var timestamp time.Time
216
+ if t .config .UseIncomingTimestamp && rfc3164Msg .Timestamp != nil {
217
+ timestamp = * rfc3164Msg .Timestamp
218
+ } else {
219
+ timestamp = time .Now ()
220
+ }
221
+
222
+ m := * rfc3164Msg .Message
223
+
224
+ t .messages <- message {filtered , m , timestamp }
225
+ }
226
+
227
+ func (t * SyslogTarget ) handleMessage (connLabels labels.Labels , msg syslog.Message ) {
228
+ if t .config .IsRFC3164Message {
229
+ t .handleMessageRFC3164 (connLabels , msg )
230
+ } else {
231
+ t .handleMessageRFC5424 (connLabels , msg )
232
+ }
233
+ }
234
+
176
235
func (t * SyslogTarget ) messageSender (entries chan <- api.Entry ) {
177
236
for msg := range t .messages {
178
237
entries <- api.Entry {
0 commit comments