logstash-input-beats 6.7.1-java → 6.8.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/VERSION +1 -1
- data/docs/index.asciidoc +15 -0
- data/lib/logstash/inputs/beats/message_listener.rb +7 -0
- data/lib/logstash/inputs/beats.rb +5 -1
- data/lib/logstash-input-beats_jars.rb +1 -1
- data/lib/tasks/test.rake +15 -1
- data/spec/inputs/beats/message_listener_spec.rb +10 -0
- data/spec/inputs/beats_spec.rb +7 -5
- data/spec/integration/logstash_forwarder_spec.rb +108 -0
- data/vendor/jar-dependencies/org/logstash/beats/logstash-input-beats/{6.7.1/logstash-input-beats-6.7.1.jar → 6.8.0/logstash-input-beats-6.8.0.jar} +0 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e795cf7e189345d1cf4ef96dfadc1185d2e73b63be07674654ce06342adaff86
|
4
|
+
data.tar.gz: 55bce211f32a39ebea8197b46ebdf83e0832d043a785d54dc9f6917bd5132ab2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 654adc75a917802031a32ba3d02279a135f0817e90833fe2bca54261fda59debe82072e0ecdf0f14bc5996afd644d0da36f9e9ed702456a76358d7d1d6a0e458
|
7
|
+
data.tar.gz: 72093407b408492a8a7bbaf57d5694a64f1b56c99e418726c91727d2fcc0b4ea7ca85da22344db0a51b4b6196b5d3ad3d78c2da213c8e653087ef4949c8e1e73
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 6.8.0
|
2
|
+
- Introduce expert only `event_loop_threads` to tune netty event loop threads count [#490](https://github.com/logstash-plugins/logstash-input-beats/pull/490)
|
3
|
+
|
4
|
+
## 6.7.2
|
5
|
+
- Restore accidentally removed Lumberjack event parse source lines [#486](https://github.com/logstash-plugins/logstash-input-beats/pull/486)
|
6
|
+
|
1
7
|
## 6.7.1
|
2
8
|
- bump netty to 4.1.100 and jackson to 2.15.3 [#484](https://github.com/logstash-plugins/logstash-input-beats/pull/484)
|
3
9
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
6.
|
1
|
+
6.8.0
|
data/docs/index.asciidoc
CHANGED
@@ -217,6 +217,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
|
|
217
217
|
| <<plugins-{type}s-{plugin}-client_inactivity_timeout>> |<<number,number>>|No
|
218
218
|
| <<plugins-{type}s-{plugin}-ecs_compatibility>> | <<string,string>>|No
|
219
219
|
| <<plugins-{type}s-{plugin}-enrich>> |<<string,string>>|No
|
220
|
+
| <<plugins-{type}s-{plugin}-event_loop_threads>> |<<number,number>>|No
|
220
221
|
| <<plugins-{type}s-{plugin}-executor_threads>> |<<number,number>>|No
|
221
222
|
| <<plugins-{type}s-{plugin}-host>> |<<string,string>>|No
|
222
223
|
| <<plugins-{type}s-{plugin}-include_codec_tag>> |<<boolean,boolean>>|__Deprecated__
|
@@ -339,6 +340,20 @@ input {
|
|
339
340
|
}
|
340
341
|
--------------------------------------------------
|
341
342
|
|
343
|
+
[id="plugins-{type}s-{plugin}-event_loop_threads"]
|
344
|
+
===== `event_loop_threads`
|
345
|
+
|
346
|
+
* Value type is <<number,number>>
|
347
|
+
* Defaults to 0.
|
348
|
+
|
349
|
+
When setting `0`, the actual default is `available_processors * 2`
|
350
|
+
|
351
|
+
This is an expert-level setting, and generally should not need to be set
|
352
|
+
{plugin-uc} plugin is implemented based on a non-blocking mechanism, requiring a number of event loop and executor threads.
|
353
|
+
The event loop threads are responsible to communicate with clients (accept incoming connections, enqueue/dequeue tasks and respond) and executor threads handle tasks.
|
354
|
+
This configuration intends to limit or increase the number of threads to be created for the event loop.
|
355
|
+
See <<plugins-{type}s-{plugin}-executor_threads>> configuration if you need to set executor threads count.
|
356
|
+
|
342
357
|
[id="plugins-{type}s-{plugin}-executor_threads"]
|
343
358
|
===== `executor_threads`
|
344
359
|
|
@@ -9,6 +9,7 @@ module LogStash module Inputs class Beats
|
|
9
9
|
include org.logstash.beats.IMessageListener
|
10
10
|
|
11
11
|
FILEBEAT_LOG_LINE_FIELD = "message".freeze
|
12
|
+
LSF_LOG_LINE_FIELD = "line".freeze
|
12
13
|
|
13
14
|
ConnectionState = Struct.new(:ctx, :codec, :ip_address)
|
14
15
|
|
@@ -182,6 +183,8 @@ module LogStash module Inputs class Beats
|
|
182
183
|
def extract_target_field(hash)
|
183
184
|
if from_filebeat?(hash)
|
184
185
|
hash.delete(FILEBEAT_LOG_LINE_FIELD).to_s
|
186
|
+
elsif from_logstash_forwarder?(hash)
|
187
|
+
hash.delete(LSF_LOG_LINE_FIELD).to_s
|
185
188
|
end
|
186
189
|
end
|
187
190
|
|
@@ -189,6 +192,10 @@ module LogStash module Inputs class Beats
|
|
189
192
|
!hash[FILEBEAT_LOG_LINE_FIELD].nil?
|
190
193
|
end
|
191
194
|
|
195
|
+
def from_logstash_forwarder?(hash)
|
196
|
+
!hash[LSF_LOG_LINE_FIELD].nil?
|
197
|
+
end
|
198
|
+
|
192
199
|
def increment_connection_count
|
193
200
|
current_connection_count = @connections_list.size
|
194
201
|
@metric.gauge(:current_connections, current_connection_count)
|
@@ -141,6 +141,10 @@ class LogStash::Inputs::Beats < LogStash::Inputs::Base
|
|
141
141
|
# Beats handler executor thread
|
142
142
|
config :executor_threads, :validate => :number, :default => LogStash::Config::CpuCoreStrategy.maximum
|
143
143
|
|
144
|
+
# Expert only setting which set's Netty Event Loop Group thread count
|
145
|
+
# defaults to zero where Netty's DEFAULT_EVENT_LOOP_THREADS (NettyRuntime.availableProcessors() * 2) will be applied
|
146
|
+
config :event_loop_threads, :validate => :number, :default => 0
|
147
|
+
|
144
148
|
# Flag to determine whether to add host information (provided by the beat in the 'hostname' field) to the event
|
145
149
|
config :add_hostname, :validate => :boolean, :default => false, :deprecated => 'This option will be removed in the future as beats determine the event schema'
|
146
150
|
|
@@ -243,7 +247,7 @@ class LogStash::Inputs::Beats < LogStash::Inputs::Base
|
|
243
247
|
end # def register
|
244
248
|
|
245
249
|
def create_server
|
246
|
-
server = org.logstash.beats.Server.new(@host, @port, @client_inactivity_timeout, @executor_threads)
|
250
|
+
server = org.logstash.beats.Server.new(@host, @port, @client_inactivity_timeout, @event_loop_threads, @executor_threads)
|
247
251
|
server.setSslHandlerProvider(new_ssl_handshake_provider(new_ssl_context_builder)) if @ssl_enabled
|
248
252
|
server
|
249
253
|
end
|
@@ -8,4 +8,4 @@ require_jar('io.netty', 'netty-transport', '4.1.100.Final')
|
|
8
8
|
require_jar('io.netty', 'netty-handler', '4.1.100.Final')
|
9
9
|
require_jar('io.netty', 'netty-transport-native-unix-common', '4.1.100.Final')
|
10
10
|
require_jar('org.javassist', 'javassist', '3.24.0-GA')
|
11
|
-
require_jar('org.logstash.beats', 'logstash-input-beats', '6.
|
11
|
+
require_jar('org.logstash.beats', 'logstash-input-beats', '6.8.0')
|
data/lib/tasks/test.rake
CHANGED
@@ -9,6 +9,8 @@ elsif OS_PLATFORM == "darwin"
|
|
9
9
|
FILEBEAT_URL = "https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.0-darwin-x86_64.tar.gz"
|
10
10
|
end
|
11
11
|
|
12
|
+
LSF_URL = "https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder_#{OS_PLATFORM}_amd64"
|
13
|
+
|
12
14
|
require "fileutils"
|
13
15
|
@files=[]
|
14
16
|
|
@@ -25,9 +27,21 @@ namespace :test do
|
|
25
27
|
namespace :integration do
|
26
28
|
task :setup do
|
27
29
|
Rake::Task["test:integration:setup:filebeat"].invoke
|
30
|
+
Rake::Task["test:integration:setup:lsf"].invoke
|
28
31
|
end
|
29
32
|
|
30
33
|
namespace :setup do
|
34
|
+
desc "Download latest stable version of Logstash-forwarder"
|
35
|
+
task :lsf do
|
36
|
+
destination = File.join(VENDOR_PATH, "logstash-forwarder")
|
37
|
+
FileUtils.rm_rf(destination)
|
38
|
+
FileUtils.mkdir_p(destination)
|
39
|
+
download_destination = File.join(destination, "logstash-forwarder")
|
40
|
+
puts "Logstash-forwarder: downloading from #{LSF_URL} to #{download_destination}"
|
41
|
+
download(LSF_URL, download_destination)
|
42
|
+
File.chmod(0755, download_destination)
|
43
|
+
end
|
44
|
+
|
31
45
|
desc "Download nigthly filebeat for integration testing"
|
32
46
|
task :filebeat do
|
33
47
|
FileUtils.mkdir_p(VENDOR_PATH)
|
@@ -46,7 +60,7 @@ namespace :test do
|
|
46
60
|
end
|
47
61
|
|
48
62
|
# Uncompress all the file from the archive this only work with
|
49
|
-
# one level directory structure and filebeat packaging.
|
63
|
+
# one level directory structure and its fine for LSF and filebeat packaging.
|
50
64
|
def untar_all(file, destination)
|
51
65
|
untar(file) do |entry|
|
52
66
|
out = entry.full_name.split("/").last
|
@@ -199,6 +199,16 @@ describe LogStash::Inputs::Beats::MessageListener do
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
context "when the message is from LSF" do
|
203
|
+
let(:message) { MockMessage.new("abc", { "line" => "hello world", '@metadata' => {} } )}
|
204
|
+
|
205
|
+
it "extract the event" do
|
206
|
+
subject.onNewMessage(ctx, message)
|
207
|
+
event = queue.pop
|
208
|
+
expect(event.get("message")).to eq("hello world")
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
202
212
|
it_behaves_like "when the message is from any libbeat", :disabled, "[@metadata][ip_address]"
|
203
213
|
it_behaves_like "when the message is from any libbeat", :v1, "[@metadata][input][beats][host][ip]"
|
204
214
|
it_behaves_like "when the message is from any libbeat", :v8, "[@metadata][input][beats][host][ip]"
|
data/spec/inputs/beats_spec.rb
CHANGED
@@ -13,7 +13,8 @@ describe LogStash::Inputs::Beats do
|
|
13
13
|
let(:certificate) { BeatsInputTest.certificate }
|
14
14
|
let(:port) { BeatsInputTest.random_port }
|
15
15
|
let(:client_inactivity_timeout) { 400 }
|
16
|
-
let(:
|
16
|
+
let(:event_loop_threads) { 1 + rand(4) }
|
17
|
+
let(:executor_threads) { 1 + rand(9) }
|
17
18
|
let(:queue) { Queue.new }
|
18
19
|
let(:config) do
|
19
20
|
{
|
@@ -21,7 +22,8 @@ describe LogStash::Inputs::Beats do
|
|
21
22
|
"ssl_certificate" => certificate.ssl_cert,
|
22
23
|
"ssl_key" => certificate.ssl_key,
|
23
24
|
"client_inactivity_timeout" => client_inactivity_timeout,
|
24
|
-
"
|
25
|
+
"event_loop_threads" => event_loop_threads,
|
26
|
+
"executor_threads" => executor_threads,
|
25
27
|
"type" => "example",
|
26
28
|
"tags" => "beats"
|
27
29
|
}
|
@@ -36,7 +38,7 @@ describe LogStash::Inputs::Beats do
|
|
36
38
|
let(:port) { 9001 }
|
37
39
|
|
38
40
|
it "sends the required options to the server" do
|
39
|
-
expect(org.logstash.beats.Server).to receive(:new).with(host, port, client_inactivity_timeout,
|
41
|
+
expect(org.logstash.beats.Server).to receive(:new).with(host, port, client_inactivity_timeout, event_loop_threads, executor_threads)
|
40
42
|
subject.register
|
41
43
|
end
|
42
44
|
end
|
@@ -529,8 +531,8 @@ describe LogStash::Inputs::Beats do
|
|
529
531
|
subject(:plugin) { LogStash::Inputs::Beats.new(config) }
|
530
532
|
|
531
533
|
before do
|
532
|
-
@server = org.logstash.beats.Server.new(host, port, client_inactivity_timeout,
|
533
|
-
expect( org.logstash.beats.Server ).to receive(:new).with(host, port, client_inactivity_timeout,
|
534
|
+
@server = org.logstash.beats.Server.new(host, port, client_inactivity_timeout, event_loop_threads, executor_threads)
|
535
|
+
expect( org.logstash.beats.Server ).to receive(:new).with(host, port, client_inactivity_timeout, event_loop_threads, executor_threads).and_return @server
|
534
536
|
expect( @server ).to receive(:listen)
|
535
537
|
|
536
538
|
subject.register
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/inputs/beats"
|
3
|
+
require "logstash/json"
|
4
|
+
require "fileutils"
|
5
|
+
require_relative "../support/flores_extensions"
|
6
|
+
require_relative "../support/file_helpers"
|
7
|
+
require_relative "../support/integration_shared_context"
|
8
|
+
require_relative "../support/client_process_helpers"
|
9
|
+
require "spec_helper"
|
10
|
+
|
11
|
+
LSF_BINARY = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "vendor", "logstash-forwarder", "logstash-forwarder"))
|
12
|
+
|
13
|
+
describe "Logstash-Forwarder", :integration => true do
|
14
|
+
include ClientProcessHelpers
|
15
|
+
|
16
|
+
before :all do
|
17
|
+
unless File.exist?(LSF_BINARY)
|
18
|
+
raise "Cannot find `logstash-forwarder` binary in `vendor/logstash-forwarder` Did you run `bundle exec rake test:integration:setup` before running the integration suite?"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
include FileHelpers
|
23
|
+
include_context "beats configuration"
|
24
|
+
|
25
|
+
let(:client_wait_time) { 5 }
|
26
|
+
|
27
|
+
# Filebeat related variables
|
28
|
+
let(:cmd) { [lsf_exec, "-config", lsf_config_path] }
|
29
|
+
|
30
|
+
let(:lsf_exec) { LSF_BINARY }
|
31
|
+
let(:registry_file) { File.expand_path(File.join(File.dirname(__FILE__), "..", "..", ".logstash-forwarder")) }
|
32
|
+
let_tmp_file(:lsf_config_path) { lsf_config }
|
33
|
+
let(:log_file) { f = Stud::Temporary.file; f.close; f.path }
|
34
|
+
let(:lsf_config) do
|
35
|
+
<<-CONFIG
|
36
|
+
{
|
37
|
+
"network": {
|
38
|
+
"servers": [ "#{host}:#{port}" ],
|
39
|
+
"ssl ca": "#{certificate_authorities}"
|
40
|
+
},
|
41
|
+
"files": [
|
42
|
+
{ "paths": [ "#{log_file}" ] }
|
43
|
+
]
|
44
|
+
}
|
45
|
+
CONFIG
|
46
|
+
end
|
47
|
+
#
|
48
|
+
|
49
|
+
before :each do
|
50
|
+
FileUtils.rm_rf(registry_file) # ensure clean state between runs
|
51
|
+
start_client
|
52
|
+
sleep(1)
|
53
|
+
# let LSF start and than write the logs
|
54
|
+
File.open(log_file, "a") do |f|
|
55
|
+
f.write(events.join("\n") + "\n")
|
56
|
+
end
|
57
|
+
sleep(1) # give some time to the clients to pick up the changes
|
58
|
+
end
|
59
|
+
|
60
|
+
after :each do
|
61
|
+
stop_client
|
62
|
+
end
|
63
|
+
|
64
|
+
xcontext "Plain TCP" do
|
65
|
+
include ClientProcessHelpers
|
66
|
+
|
67
|
+
let(:certificate_authorities) { "" }
|
68
|
+
|
69
|
+
it "should not send any events" do
|
70
|
+
expect(queue.size).to eq(0), @execution_output
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "TLS" do
|
75
|
+
context "Server Verification" do
|
76
|
+
let(:input_config) do
|
77
|
+
super().merge({
|
78
|
+
"ssl_enabled" => true,
|
79
|
+
"ssl_certificate" => certificate_file,
|
80
|
+
"ssl_key" => certificate_key_file,
|
81
|
+
})
|
82
|
+
end
|
83
|
+
|
84
|
+
let(:certificate_data) { Flores::PKI.generate }
|
85
|
+
let_tmp_file(:certificate_file) { certificate_data.first }
|
86
|
+
let_tmp_file(:certificate_key_file) { convert_to_pkcs8(certificate_data.last) }
|
87
|
+
let(:certificate_authorities) { certificate_file }
|
88
|
+
|
89
|
+
context "self signed certificate" do
|
90
|
+
include_examples "send events"
|
91
|
+
end
|
92
|
+
|
93
|
+
context "with large batches" do
|
94
|
+
let(:number_of_events) { 10_000 }
|
95
|
+
include_examples "send events"
|
96
|
+
end
|
97
|
+
|
98
|
+
context "invalid CA on the client" do
|
99
|
+
let(:invalid_data) { Flores::PKI.generate }
|
100
|
+
let(:certificate_authorities) { f = Stud::Temporary.file; f.close; f.path }
|
101
|
+
|
102
|
+
it "should not send any events" do
|
103
|
+
expect(queue.size).to eq(0), @execution_output
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-beats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.8.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -311,6 +311,7 @@ files:
|
|
311
311
|
- spec/inputs/beats/tls_spec.rb
|
312
312
|
- spec/inputs/beats_spec.rb
|
313
313
|
- spec/integration/filebeat_spec.rb
|
314
|
+
- spec/integration/logstash_forwarder_spec.rb
|
314
315
|
- spec/spec_helper.rb
|
315
316
|
- spec/support/client_process_helpers.rb
|
316
317
|
- spec/support/file_helpers.rb
|
@@ -326,7 +327,7 @@ files:
|
|
326
327
|
- vendor/jar-dependencies/io/netty/netty-transport-native-unix-common/4.1.100.Final/netty-transport-native-unix-common-4.1.100.Final.jar
|
327
328
|
- vendor/jar-dependencies/io/netty/netty-transport/4.1.100.Final/netty-transport-4.1.100.Final.jar
|
328
329
|
- vendor/jar-dependencies/org/javassist/javassist/3.24.0-GA/javassist-3.24.0-GA.jar
|
329
|
-
- vendor/jar-dependencies/org/logstash/beats/logstash-input-beats/6.
|
330
|
+
- vendor/jar-dependencies/org/logstash/beats/logstash-input-beats/6.8.0/logstash-input-beats-6.8.0.jar
|
330
331
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
331
332
|
licenses:
|
332
333
|
- Apache License (2.0)
|
@@ -362,6 +363,7 @@ test_files:
|
|
362
363
|
- spec/inputs/beats/tls_spec.rb
|
363
364
|
- spec/inputs/beats_spec.rb
|
364
365
|
- spec/integration/filebeat_spec.rb
|
366
|
+
- spec/integration/logstash_forwarder_spec.rb
|
365
367
|
- spec/spec_helper.rb
|
366
368
|
- spec/support/client_process_helpers.rb
|
367
369
|
- spec/support/file_helpers.rb
|