logstash-filter-grok 3.3.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99850448c56dc0d262fada37d7682318118e0541
4
- data.tar.gz: b2de3eef13168f3831aa34b6899a7c5b40718358
3
+ metadata.gz: b1e652d5cf4cc9eff9c8a678a3c981b394c26de0
4
+ data.tar.gz: 6124306fb38c72fdad65262fb0e544ca5b51592b
5
5
  SHA512:
6
- metadata.gz: 54b4579e88698e11f578a831a42ce1c352685abedb821b4da2cded069735068d373fe58e43ee1f6416ca70e58f69a1ed49df1e59f15340405ece5e25028cb14c
7
- data.tar.gz: 00e36a17349e31d1f10c4081351c49c63f91b5f05f915ee64aa97a4ad27a0a819a8aef724c95c4773503ad0006271004b19e598f223fab82f9cfc6111f4bdfc6
6
+ metadata.gz: 2fd4bb01edc17528e22cf0085b8a09b5f42624c4f843c1cef1ff089c3ec3f8a4ba79a3e5957a5cec0d819a257e389c6c0985bfb1065b305ad7c8128435f89916
7
+ data.tar.gz: 0fbc997375ccbc3e5406b36afe73d4ee38f5e618c5f7e5c2158a5407d030e5c1a924f9e7fc4e220eed5dbd7276f3e01e84ddb1780ce8c195f19eebb91cd288ec
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.4.0
2
+ - Add option to define patterns inline in the filter using `pattern_definitions` configuration.
3
+
1
4
  ## 3.3.1
2
5
  - Docs: indicate that grok patterns are loaded when the pipeline is created
3
6
 
@@ -136,6 +136,11 @@
136
136
  #
137
137
  # The `timestamp`, `logsource`, `program`, and `pid` fields come from the
138
138
  # `SYSLOGBASE` pattern which itself is defined by other patterns.
139
+ #
140
+ # Another option is to define patterns _inline_ in the filter using `pattern_definitions`.
141
+ # This is mostly for convenience and allows user to define a pattern which can be used just in that
142
+ # filter. This newly defined patterns in `pattern_definitions` will not be available outside of that particular `grok` filter.
143
+ #
139
144
  class LogStash::Filters::Grok < LogStash::Filters::Base
140
145
  config_name "grok"
141
146
  require "logstash/filters/grok/timeout_enforcer"
@@ -178,6 +183,12 @@
178
183
  # The patterns are loaded when the pipeline is created.
179
184
  config :patterns_dir, :validate => :array, :default => []
180
185
 
186
+ # A hash of pattern-name and pattern tuples defining custom patterns to be used by
187
+ # the current filter. Patterns matching existing names will override the pre-existing
188
+ # definition. Think of this as inline patterns available just for this definition of
189
+ # grok
190
+ config :pattern_definitions, :validate => :hash, :default => {}
191
+
181
192
  # Glob pattern, used to select the pattern files in the directories
182
193
  # specified by patterns_dir
183
194
  config :patterns_files_glob, :validate => :string, :default => "*"
@@ -271,6 +282,7 @@
271
282
  grok = Grok.new
272
283
  grok.logger = @logger unless @logger.nil?
273
284
  add_patterns_from_files(@patternfiles, grok)
285
+ add_patterns_from_inline_definition(@pattern_definitions, grok)
274
286
  grok.compile(pattern, @named_captures_only)
275
287
  @patterns[field] << grok
276
288
  end
@@ -394,6 +406,14 @@
394
406
  end
395
407
  end # def add_patterns_from_files
396
408
 
409
+ private
410
+ def add_patterns_from_inline_definition(pattern_definitions, grok)
411
+ pattern_definitions.each do |name, pattern|
412
+ next if pattern.nil?
413
+ grok.add_pattern(name, pattern.chomp)
414
+ end
415
+ end
416
+
397
417
  def close
398
418
  @timeout_enforcer.stop!
399
419
  end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-grok'
4
- s.version = '3.3.1'
4
+ s.version = '3.4.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Parse arbitrary text and structure it."
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -868,4 +868,40 @@ describe LogStash::Filters::Grok do
868
868
  end
869
869
  end
870
870
 
871
+ describe "grok with inline pattern definition successfully extracts fields" do
872
+ config <<-CONFIG
873
+ filter {
874
+ grok {
875
+ match => { "message" => "%{APACHE_TIME:timestamp} %{LOGLEVEL:level} %{MY_PATTERN:hindsight}" }
876
+ pattern_definitions => { "APACHE_TIME" => "%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}"
877
+ "MY_PATTERN" => "%{YEAR}"}
878
+ }
879
+ }
880
+ CONFIG
881
+
882
+ sample "Mon Dec 26 16:22:08 2016 error 2020" do
883
+ insist { subject.get("timestamp") } == "Mon Dec 26 16:22:08 2016"
884
+ insist { subject.get("level") } == "error"
885
+ insist { subject.get("hindsight") } == "2020"
886
+ end
887
+ end
888
+
889
+ describe "grok with inline pattern definition overwrites existing pattern definition" do
890
+ config <<-CONFIG
891
+ filter {
892
+ grok {
893
+ match => { "message" => "%{APACHE_TIME:timestamp} %{LOGLEVEL:level}" }
894
+ # loglevel was previously ([Aa]lert|ALERT|[Tt]...
895
+ pattern_definitions => { "APACHE_TIME" => "%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}"
896
+ "LOGLEVEL" => "%{NUMBER}"}
897
+ }
898
+ }
899
+ CONFIG
900
+
901
+ sample "Mon Dec 26 16:22:08 2016 9999" do
902
+ insist { subject.get("timestamp") } == "Mon Dec 26 16:22:08 2016"
903
+ insist { subject.get("level") } == "9999"
904
+ end
905
+ end
906
+
871
907
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-grok
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-26 00:00:00.000000000 Z
11
+ date: 2017-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement