@@ -29,15 +29,20 @@ def self.sample(message, &block)
2929 let ( :config ) { { "match" => { "message" => "%{SYSLOGLINE}" } , "overwrite" => [ "message" ] } }
3030 let ( :message ) { 'Mar 16 00:01:25 evita postfix/smtpd[1713]: connect from camomile.cloud9.net[168.100.1.3]' }
3131
32- it "matches pattern" do
33- expect ( event . get ( "tags" ) ) . to be nil
34- expect ( event . get ( "logsource" ) ) . to eql "evita"
35- expect ( event . get ( "timestamp" ) ) . to eql "Mar 16 00:01:25"
36- expect ( event . get ( "message" ) ) . to eql "connect from camomile.cloud9.net[168.100.1.3]"
37- expect ( event . get ( "program" ) ) . to eql "postfix/smtpd"
38- expect ( event . get ( "pid" ) ) . to eql "1713"
32+ context "in ecs mode disabled" do
33+ let ( :config ) { super ( ) . merge ( 'ecs_compatibility' => 'disabled' ) }
34+
35+ it "matches pattern" do
36+ expect ( event . get ( "tags" ) ) . to be nil
37+ expect ( event . get ( "timestamp" ) ) . to eql "Mar 16 00:01:25"
38+ expect ( event . get ( "logsource" ) ) . to eql "evita"
39+ expect ( event . get ( "program" ) ) . to eql "postfix/smtpd"
40+ expect ( event . get ( "pid" ) ) . to eql "1713"
41+ expect ( event . get ( "message" ) ) . to eql "connect from camomile.cloud9.net[168.100.1.3]"
42+ end
3943 end
4044
45+
4146 %w( v1 v8 ) . each do |ecs_mode |
4247 context "in ecs mode #{ ecs_mode } " do
4348 let ( :config ) { super ( ) . merge ( 'ecs_compatibility' => ecs_mode ) }
@@ -59,7 +64,7 @@ def self.sample(message, &block)
5964 expect ( event . get ( "grok" ) ) . to_not be nil
6065 expect ( event . get ( "[grok][timestamp]" ) ) . to eql "Mar 16 00:01:25"
6166 expect ( event . get ( "[grok][message]" ) ) . to eql "connect from camomile.cloud9.net[168.100.1.3]"
62- expect ( event . get ( "[grok][pid]" ) ) . to eql " 1713"
67+ expect ( event . get ( "[grok][process][ pid]" ) ) . to eql 1713
6368 end
6469 end
6570
@@ -70,14 +75,15 @@ def self.sample(message, &block)
7075 expect ( event . get ( "message" ) ) . to eql message
7176 expect ( event . get ( "tags" ) ) . to be nil
7277 expect ( event . get ( "grok" ) ) . to be nil
73- expect ( event . get ( "[@metadata][grok][logsource ]" ) ) . to eql "evita"
78+ expect ( event . get ( "[@metadata][grok][host][hostname ]" ) ) . to eql "evita"
7479 expect ( event . get ( "[@metadata][grok][message]" ) ) . to eql "connect from camomile.cloud9.net[168.100.1.3]"
7580 end
7681 end
7782 end
7883
79- describe "ietf 5424 syslog line" do
80- let ( :config ) { { "match" => { "message" => "%{SYSLOG5424LINE}" } } }
84+ %w( disabled ) . each do |ecs_mode |
85+ describe "ietf 5424 syslog line" do
86+ let ( :config ) { { 'ecs_compatibility' => ecs_mode , "match" => { "message" => "%{SYSLOG5424LINE}" } } }
8187
8288 sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - [id1 foo=\" bar\" ][id2 baz=\" something\" ] Hello, syslog." do
8389 expect ( event . get ( "tags" ) ) . to be nil
@@ -185,6 +191,116 @@ def self.sample(message, &block)
185191 expect ( event . get ( "syslog5424_sd" ) ) . to be nil
186192 expect ( event . get ( "syslog5424_msg" ) ) . to eql "Appname is nil"
187193 end
194+ end
195+ end
196+ %w( v1 v8 ) . each do |ecs_mode |
197+ describe "ietf 5424 syslog line" do
198+ let ( :config ) { { "overwrite" => [ "message" ] , 'ecs_compatibility' => ecs_mode , "match" => { "message" => "%{SYSLOG5424LINE}" } } }
199+
200+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - [id1 foo=\" bar\" ][id2 baz=\" something\" ] Hello, syslog." do
201+ expect ( event . get ( "tags" ) ) . to be nil
202+ expect ( event . get ( "[log][syslog][priority]" ) ) . to eql 191
203+ expect ( event . get ( "[system][syslog][version]" ) ) . to eql "1"
204+ expect ( event . get ( "timestamp" ) ) . to eql "2009-06-30T18:30:00+02:00"
205+ expect ( event . get ( "[host][hostname]" ) ) . to eql "paxton.local"
206+ expect ( event . get ( "[process][name]" ) ) . to eql "grokdebug"
207+ expect ( event . get ( "[process][pid]" ) ) . to eql 4123
208+ expect ( event . get ( "[event][code]" ) ) . to be nil
209+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to eql "[id1 foo=\" bar\" ][id2 baz=\" something\" ]"
210+ expect ( event . get ( "message" ) ) . to eql "Hello, syslog."
211+ end
212+
213+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug - - [id1 foo=\" bar\" ] No process ID." do
214+ expect ( event . get ( "tags" ) ) . to be nil
215+ expect ( event . get ( "[log][syslog][priority]" ) ) . to eql 191
216+ expect ( event . get ( "[system][syslog][version]" ) ) . to eql "1"
217+ expect ( event . get ( "timestamp" ) ) . to eql "2009-06-30T18:30:00+02:00"
218+ expect ( event . get ( "[host][hostname]" ) ) . to eql "paxton.local"
219+ expect ( event . get ( "[process][name]" ) ) . to eql "grokdebug"
220+ expect ( event . get ( "[process][pid]" ) ) . to be nil
221+ expect ( event . get ( "[event][code]" ) ) . to be nil
222+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to eql "[id1 foo=\" bar\" ]"
223+ expect ( event . get ( "message" ) ) . to eql "No process ID."
224+ end
225+
226+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - - No structured data." do
227+ expect ( event . get ( "tags" ) ) . to be nil
228+ expect ( event . get ( "[log][syslog][priority]" ) ) . to eql 191
229+ expect ( event . get ( "[system][syslog][version]" ) ) . to eql "1"
230+ expect ( event . get ( "timestamp" ) ) . to eql "2009-06-30T18:30:00+02:00"
231+ expect ( event . get ( "[host][hostname]" ) ) . to eql "paxton.local"
232+ expect ( event . get ( "[process][name]" ) ) . to eql "grokdebug"
233+ expect ( event . get ( "[process][pid]" ) ) . to be 4123
234+ expect ( event . get ( "[event][code]" ) ) . to be nil
235+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
236+ expect ( event . get ( "message" ) ) . to eql "No structured data."
237+ end
238+
239+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug - - - No PID or SD." do
240+ expect ( event . get ( "tags" ) ) . to be nil
241+ expect ( event . get ( "[log][syslog][priority]" ) ) . to eql 191
242+ expect ( event . get ( "[system][syslog][version]" ) ) . to eql "1"
243+ expect ( event . get ( "timestamp" ) ) . to eql "2009-06-30T18:30:00+02:00"
244+ expect ( event . get ( "[host][hostname]" ) ) . to eql "paxton.local"
245+ expect ( event . get ( "[process][name]" ) ) . to eql "grokdebug"
246+ expect ( event . get ( "[process][pid]" ) ) . to be nil
247+ expect ( event . get ( "[event][code]" ) ) . to be nil
248+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
249+ expect ( event . get ( "message" ) ) . to eql "No PID or SD."
250+ end
251+
252+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - Missing structured data." do
253+ expect ( event . get ( "tags" ) ) . to be nil
254+ expect ( event . get ( "[process][pid]" ) ) . to eql 4123
255+ expect ( event . get ( "[event][code]" ) ) . to be nil
256+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
257+ expect ( event . get ( "message" ) ) . to eql "Missing structured data."
258+ end
259+
260+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - - Additional spaces." do
261+ expect ( event . get ( "tags" ) ) . to be nil
262+ expect ( event . get ( "[process][name]" ) ) . to eql "grokdebug"
263+ expect ( event . get ( "[process][pid]" ) ) . to be 4123
264+ expect ( event . get ( "[event][code]" ) ) . to be nil
265+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
266+ expect ( event . get ( "message" ) ) . to eql "Additional spaces."
267+ end
268+
269+ sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - Additional spaces and missing SD." do
270+ expect ( event . get ( "tags" ) ) . to be nil
271+ expect ( event . get ( "[process][name]" ) ) . to eql "grokdebug"
272+ expect ( event . get ( "[process][pid]" ) ) . to be 4123
273+ expect ( event . get ( "[event][code]" ) ) . to be nil
274+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
275+ expect ( event . get ( "message" ) ) . to eql "Additional spaces and missing SD."
276+ end
277+
278+ sample "<30>1 2014-04-04T16:44:07+02:00 osctrl01 dnsmasq-dhcp 8048 - - Appname contains a dash" do
279+ expect ( event . get ( "tags" ) ) . to be nil
280+ expect ( event . get ( "[log][syslog][priority]" ) ) . to eql 30
281+ expect ( event . get ( "[system][syslog][version]" ) ) . to eql "1"
282+ expect ( event . get ( "timestamp" ) ) . to eql "2014-04-04T16:44:07+02:00"
283+ expect ( event . get ( "[host][hostname]" ) ) . to eql "osctrl01"
284+ expect ( event . get ( "[process][name]" ) ) . to eql "dnsmasq-dhcp"
285+ expect ( event . get ( "[process][pid]" ) ) . to be 8048
286+ expect ( event . get ( "[event][code]" ) ) . to be nil
287+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
288+ expect ( event . get ( "message" ) ) . to eql "Appname contains a dash"
289+ end
290+
291+ sample "<30>1 2014-04-04T16:44:07+02:00 osctrl01 - 8048 - - Appname is nil" do
292+ expect ( event . get ( "tags" ) ) . to be nil
293+ expect ( event . get ( "[log][syslog][priority]" ) ) . to eql 30
294+ expect ( event . get ( "[system][syslog][version]" ) ) . to eql "1"
295+ expect ( event . get ( "timestamp" ) ) . to eql "2014-04-04T16:44:07+02:00"
296+ expect ( event . get ( "[host][hostname]" ) ) . to eql "osctrl01"
297+ expect ( event . get ( "[process][name]" ) ) . to eql nil
298+ expect ( event . get ( "[process][pid]" ) ) . to be 8048
299+ expect ( event . get ( "[event][code]" ) ) . to be nil
300+ expect ( event . get ( "[system][syslog][structured_data]" ) ) . to be nil
301+ expect ( event . get ( "message" ) ) . to eql "Appname is nil"
302+ end
303+ end
188304 end
189305
190306 describe "parsing an event with multiple messages (array of strings)" , if : false do
@@ -730,6 +846,7 @@ def self.sample(message, &block)
730846 end
731847 end
732848
849+
733850 describe "grok with inline pattern definition overwrites existing pattern definition" do
734851 let ( :config ) {
735852 {
0 commit comments