logstash-filter-dissect 1.1.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/VERSION +1 -1
- data/docs/index.asciidoc +3 -3
- data/lib/jruby-dissect-library_jars.rb +1 -1
- data/logstash-filter-dissect.gemspec +1 -3
- data/spec/filters/dissect_spec.rb +21 -0
- data/spec/fixtures/dissect_tests.json +157 -0
- data/vendor/jars/org/logstash/dissect/jruby-dissect-library/1.2.0/jruby-dissect-library-1.2.0.jar +0 -0
- metadata +5 -3
- data/vendor/jars/org/logstash/dissect/jruby-dissect-library/1.1.4/jruby-dissect-library-1.1.4.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0426a95966922ea538ca2a8d48bcdb6f60193ad216a15ebddb6a816919de6d8b
|
4
|
+
data.tar.gz: 45e44ad23f1d46f9cba7a088e5842df61ed6054e6971781ebc5f2f303241893b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95749fcd548bf4412dc20f08d0a7aea50e5ca6e4f75154ed570014a927d6e6e95eb85c8b60e2293440e3049fd566ed9b0552cb121f06bdd4a384a10617b31ce7
|
7
|
+
data.tar.gz: 1763b8ee0c59bb7b2a25003146f698f2f15cc4cc9086026eded0ae9dbe1b6e22ff6c866fe7076c781cc699979b86150382f277ae5f442927267f1d1e8e08452e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 1.2.0
|
2
|
+
- Fix Trailing Delimiters requires a false field. A skip field is
|
3
|
+
automatically added when a final delimiter is detected in the dissect pattern.
|
4
|
+
This requires that strict delimiter finding is enforced - meaning a "no match"
|
5
|
+
results if every delimiter is not found in exactly the declared order
|
6
|
+
[Issue #22](https://github.com/logstash-plugins/logstash-filter-dissect/issues/22)
|
7
|
+
|
1
8
|
## 1.1.4
|
2
9
|
- Replace v1.1.3 as it packaged the v1.1.1 jar and therefore does not have the fixes below
|
3
10
|
- Yank v1.1.3 from rubygems.org
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/docs/index.asciidoc
CHANGED
@@ -34,7 +34,7 @@ The dissection is described using a set of `%{}` sections:
|
|
34
34
|
%{a} - %{b} - %{c}
|
35
35
|
....
|
36
36
|
|
37
|
-
A *field* is the text from
|
37
|
+
A *field* is the text from `%{` to `}` inclusive.
|
38
38
|
|
39
39
|
A *delimiter* is the text between a `}` and next `%{` characters.
|
40
40
|
|
@@ -240,8 +240,8 @@ For example
|
|
240
240
|
filter {
|
241
241
|
dissect {
|
242
242
|
convert_datatype => {
|
243
|
-
cpu => "float"
|
244
|
-
code => "int"
|
243
|
+
"cpu" => "float"
|
244
|
+
"code" => "int"
|
245
245
|
}
|
246
246
|
}
|
247
247
|
}
|
@@ -1,8 +1,6 @@
|
|
1
|
-
DISSECT_VERSION = File.read(File.expand_path(File.join(File.dirname(__FILE__), "VERSION"))).strip unless defined?(DISSECT_VERSION)
|
2
|
-
|
3
1
|
Gem::Specification.new do |s|
|
4
2
|
s.name = 'logstash-filter-dissect'
|
5
|
-
s.version =
|
3
|
+
s.version = '1.2.0' # version will be checked against VERSION file by `rake vendor`
|
6
4
|
s.licenses = ['Apache License (2.0)']
|
7
5
|
s.summary = "Extracts unstructured event data into fields using delimiters"
|
8
6
|
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"
|
@@ -328,4 +328,25 @@ describe LogStash::Filters::Dissect do
|
|
328
328
|
end
|
329
329
|
end
|
330
330
|
end
|
331
|
+
|
332
|
+
describe "Compatibility suite" do
|
333
|
+
tests = LogStash::Json.load(File.read(File.join(File.dirname(__FILE__), "/../fixtures/dissect_tests.json")))
|
334
|
+
tests.each do |test|
|
335
|
+
describe test["name"] do
|
336
|
+
let(:options) { { "mapping" => { "message" => test["tok"] } } }
|
337
|
+
subject { described_class.new(options) }
|
338
|
+
let(:event) { LogStash::Event.new({ "message" => test["msg"] }) }
|
339
|
+
before(:each) do
|
340
|
+
subject.register
|
341
|
+
subject.filter(event)
|
342
|
+
end
|
343
|
+
|
344
|
+
it "should dissect properly" do
|
345
|
+
test["expected"].each do |k, v|
|
346
|
+
expect(event.get(k)).to eq(v)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|
331
352
|
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "Complex stack trace",
|
4
|
+
"tok": "%{day}-%{month}-%{year} %{hour} %{severity} [%{thread_id}] %{origin} %{message}",
|
5
|
+
"msg": "18-Apr-2018 06:53:20.411 INFO [http-nio-8080-exec-1] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header\n Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.\n java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens\n at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:426)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)",
|
6
|
+
"expected": {
|
7
|
+
"day": "18",
|
8
|
+
"hour": "06:53:20.411",
|
9
|
+
"message": "Error parsing HTTP request header\n Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.\n java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens\n at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:426)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)",
|
10
|
+
"month": "Apr",
|
11
|
+
"origin": "org.apache.coyote.http11.Http11Processor.service",
|
12
|
+
"severity": "INFO",
|
13
|
+
"thread_id": "http-nio-8080-exec-1",
|
14
|
+
"year": "2018"
|
15
|
+
},
|
16
|
+
"skip": false
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"name": "simple dissect",
|
20
|
+
"tok": "%{key}",
|
21
|
+
"msg": "foobar",
|
22
|
+
"expected": {
|
23
|
+
"key": "foobar"
|
24
|
+
},
|
25
|
+
"skip": false
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"name": "dissect two replacement",
|
29
|
+
"tok": "%{key1} %{key2}",
|
30
|
+
"msg": "foo bar",
|
31
|
+
"expected": {
|
32
|
+
"key1": "foo",
|
33
|
+
"key2": "bar"
|
34
|
+
},
|
35
|
+
"skip": false
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"name": "one level dissect not end of string",
|
39
|
+
"tok": "/var/%{key}/log",
|
40
|
+
"msg": "/var/foobar/log",
|
41
|
+
"expected": {
|
42
|
+
"key": "foobar"
|
43
|
+
},
|
44
|
+
"skip": false
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"name": "one level dissect",
|
48
|
+
"tok": "/var/%{key}",
|
49
|
+
"msg": "/var/foobar/log",
|
50
|
+
"expected": {
|
51
|
+
"key": "foobar/log"
|
52
|
+
},
|
53
|
+
"skip": false
|
54
|
+
},
|
55
|
+
{
|
56
|
+
"name": "multiple keys dissect end of string",
|
57
|
+
"tok": "/var/%{key}/log/%{key1}",
|
58
|
+
"msg": "/var/foobar/log/apache",
|
59
|
+
"expected": {
|
60
|
+
"key": "foobar",
|
61
|
+
"key1": "apache"
|
62
|
+
},
|
63
|
+
"skip": false
|
64
|
+
},
|
65
|
+
{
|
66
|
+
"name": "multiple keys not end of string",
|
67
|
+
"tok": "/var/%{key}/log/%{key1}.log",
|
68
|
+
"msg": "/var/foobar/log/apache.log",
|
69
|
+
"expected": {
|
70
|
+
"key": "foobar",
|
71
|
+
"key1": "apache"
|
72
|
+
},
|
73
|
+
"skip": false
|
74
|
+
},
|
75
|
+
{
|
76
|
+
"name": "simple ordered",
|
77
|
+
"tok": "%{+key/3} %{+key/1} %{+key/2}",
|
78
|
+
"msg": "1 2 3",
|
79
|
+
"expected": {
|
80
|
+
"key": "2 3 1"
|
81
|
+
},
|
82
|
+
"skip": false
|
83
|
+
},
|
84
|
+
{
|
85
|
+
"name": "simple append",
|
86
|
+
"tok": "%{key}-%{+key}-%{+key}",
|
87
|
+
"msg": "1-2-3",
|
88
|
+
"expected": {
|
89
|
+
"key": "1-2-3"
|
90
|
+
},
|
91
|
+
"skip": false
|
92
|
+
},
|
93
|
+
{
|
94
|
+
"name": "indirect field",
|
95
|
+
"tok": "%{key} %{\u0026key}",
|
96
|
+
"msg": "hello world",
|
97
|
+
"expected": {
|
98
|
+
"hello": "world",
|
99
|
+
"key": "hello"
|
100
|
+
},
|
101
|
+
"skip": false
|
102
|
+
},
|
103
|
+
{
|
104
|
+
"name": "skip field",
|
105
|
+
"tok": "%{} %{key}",
|
106
|
+
"msg": "hello world",
|
107
|
+
"expected": {
|
108
|
+
"key": "world"
|
109
|
+
},
|
110
|
+
"skip": false
|
111
|
+
},
|
112
|
+
{
|
113
|
+
"name": "named skiped field with indirect",
|
114
|
+
"tok": "%{?key} %{\u0026key}",
|
115
|
+
"msg": "hello world",
|
116
|
+
"expected": {
|
117
|
+
"hello": "world"
|
118
|
+
},
|
119
|
+
"skip": false
|
120
|
+
},
|
121
|
+
{
|
122
|
+
"name": "missing fields",
|
123
|
+
"tok": "%{name},%{addr1},%{addr2},%{addr3},%{city},%{zip}",
|
124
|
+
"msg": "Jane Doe,4321 Fifth Avenue,,,New York,87432",
|
125
|
+
"expected": {
|
126
|
+
"addr1": "4321 Fifth Avenue",
|
127
|
+
"addr2": "",
|
128
|
+
"addr3": "",
|
129
|
+
"city": "New York",
|
130
|
+
"name": "Jane Doe",
|
131
|
+
"zip": "87432"
|
132
|
+
},
|
133
|
+
"skip": false
|
134
|
+
},
|
135
|
+
{
|
136
|
+
"name": "ignore right padding",
|
137
|
+
"tok": "%{id} %{function-\u003e} %{server}",
|
138
|
+
"msg": "00000043 ViewReceive machine-321",
|
139
|
+
"expected": {
|
140
|
+
"function": "ViewReceive",
|
141
|
+
"id": "00000043",
|
142
|
+
"server": "machine-321"
|
143
|
+
},
|
144
|
+
"skip": false
|
145
|
+
},
|
146
|
+
{
|
147
|
+
"name": "ignore left padding",
|
148
|
+
"tok": "%{id-\u003e} %{function} %{server}",
|
149
|
+
"msg": "00000043 ViewReceive machine-321",
|
150
|
+
"expected": {
|
151
|
+
"function": "ViewReceive",
|
152
|
+
"id": "00000043",
|
153
|
+
"server": "machine-321"
|
154
|
+
},
|
155
|
+
"skip": false
|
156
|
+
}
|
157
|
+
]
|
data/vendor/jars/org/logstash/dissect/jruby-dissect-library/1.2.0/jruby-dissect-library-1.2.0.jar
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-dissect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,8 +94,9 @@ files:
|
|
94
94
|
- lib/logstash/filters/dissect.rb
|
95
95
|
- logstash-filter-dissect.gemspec
|
96
96
|
- spec/filters/dissect_spec.rb
|
97
|
+
- spec/fixtures/dissect_tests.json
|
97
98
|
- spec/spec_helper.rb
|
98
|
-
- vendor/jars/org/logstash/dissect/jruby-dissect-library/1.
|
99
|
+
- vendor/jars/org/logstash/dissect/jruby-dissect-library/1.2.0/jruby-dissect-library-1.2.0.jar
|
99
100
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
100
101
|
licenses:
|
101
102
|
- Apache License (2.0)
|
@@ -125,4 +126,5 @@ specification_version: 4
|
|
125
126
|
summary: Extracts unstructured event data into fields using delimiters
|
126
127
|
test_files:
|
127
128
|
- spec/filters/dissect_spec.rb
|
129
|
+
- spec/fixtures/dissect_tests.json
|
128
130
|
- spec/spec_helper.rb
|