logstash-input-http 3.10.11-java → 3.11.0-java

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
  SHA256:
3
- metadata.gz: ec9cbf6e38c706ab12e7fe22012a9d1396d0830ecd1284c3164df64c73b851ff
4
- data.tar.gz: '0084adb55ed70f573f56c2f69aad29cdefd995cf295531a5b362a5747052845a'
3
+ metadata.gz: 53d4010498cef37711a3510964978b4976d44a6d90df48a5e0d4b449c4c41f1b
4
+ data.tar.gz: 0eb2c879fca5fe8df5712a4473c5fcfa073fc8d9089658e8b0563f8e3d4d4f1b
5
5
  SHA512:
6
- metadata.gz: 826b06a29df17eb8bf8b43e1ae8e235c8f16ed458f411542011e386662a20089f9e76422902109528986d640fc28f73e005f38db8ed48d69c4794959edfabf53
7
- data.tar.gz: a2757855136c663e1e259415d81b2df70e83eef24085a0772fb0b65cbb1eb0ce4d5bf996e96ae65d49185d2e43ba7cd59b1f80923f60b381b8b423b6bd004bec
6
+ metadata.gz: e3b6c7260038efc0a58d9319812f902bf4f198cd1d92fcd5c5584e11fd2af3a9d9854a075a494237f98f7d0d286bf11fc3c1876f46b26246bd71ab90eecb1533
7
+ data.tar.gz: 5df99103b34fd6848355532f1e4beeb70a669fb975966ccc4ccd9e39dc11c35c1a40d202a3f6b30953c3f816ac881d36820530afb4c7060ba2498ce03e3e653d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.11.0
2
+ - Implements a functionality to log HTTP traffic, disabled by default. To unable switch on debug logs. [#237](https://github.com/logstash-plugins/logstash-input-http/pull/237)
3
+
1
4
  ## 3.10.11
2
5
  - Fix to use the `Content-type` declared charset to decode the request body [#232](https://github.com/logstash-plugins/logstash-input-http/pull/232)
3
6
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.10.11
1
+ 3.11.0
data/docs/index.asciidoc CHANGED
@@ -90,6 +90,33 @@ Values in `additional_codecs` are prioritized over those specified in the
90
90
  `codec` option. That is, the default `codec` is applied only if no codec
91
91
  for the request's content-type is found in the `additional_codecs` setting.
92
92
 
93
+ [id="plugins-{type}s-{plugin}-wire-logging"]
94
+ ==== Enable wire logging
95
+ This plugin could log all requests and responses passing through the socket after TLS decoding.
96
+ This functionality helps troubleshoot issues in the processing pipeline that standard
97
+ external traffic captures, such as `tcpdump`, cannot resolve.
98
+ By default it's disabled, to dump received and sent payloads post-TLS decoding, enable debug logging
99
+ for `org.logstash.plugins.inputs.http.util.WireLogger`.
100
+ Note: Payloads exceeding 4 KB are automatically truncated to prevent excessive log file growth.
101
+ If you want to set a different limit, then in {ls} `config/jvm.options` configure a value for the system property `logstash.httpinput.wire.dump.size`.
102
+
103
+ [source,text]
104
+ -----
105
+ -Dlogstash.httpinput.wire.dump.size=512
106
+ -----
107
+ If you want to remove any limit, at the risk of polluting {ls} logs, set it to `0`.
108
+ Admitted values are only integers greater or equals to 0.
109
+
110
+ To enable it start {ls} in debug mode or configure the `config/log4j2.properties` to include:
111
+
112
+ [source,text]
113
+ -----
114
+ logger.httpwire.name = org.logstash.plugins.inputs.http.util.WireLogger
115
+ logger.httpwire.level = DEBUG
116
+ -----
117
+
118
+ WARNING: when this log is enabled the payload is dumped, so if contains secretes those are exposed in {ls} logs.
119
+
93
120
  [id="plugins-{type}s-{plugin}-options"]
94
121
  ==== Http Input Configuration Options
95
122
 
@@ -204,6 +204,8 @@ class LogStash::Inputs::Http < LogStash::Inputs::Base
204
204
 
205
205
  validate_ssl_settings!
206
206
 
207
+ validate_dump_size_system_property!
208
+
207
209
  if @user && @password
208
210
  token = Base64.strict_encode64("#{@user}:#{@password.value}")
209
211
  @auth_token = "Basic #{token}"
@@ -297,6 +299,12 @@ class LogStash::Inputs::Http < LogStash::Inputs::Base
297
299
  [http_host, nil]
298
300
  end
299
301
  end
302
+
303
+ def validate_dump_size_system_property!
304
+ java_import org.logstash.plugins.inputs.http.util.WireLogger
305
+ WireLogger.validate_dump_size_property
306
+ end
307
+ private :validate_dump_size_system_property!
300
308
 
301
309
  def validate_ssl_settings!
302
310
  ssl_config_name = original_params.include?('ssl') ? 'ssl' : 'ssl_enabled'
@@ -9,4 +9,4 @@ require_jar('io.netty', 'netty-transport', '4.1.136.Final')
9
9
  require_jar('io.netty', 'netty-buffer', '4.1.136.Final')
10
10
  require_jar('io.netty', 'netty-resolver', '4.1.136.Final')
11
11
  require_jar('io.netty', 'netty-common', '4.1.136.Final')
12
- require_jar('org.logstash.plugins.input.http', 'logstash-input-http', '3.10.11')
12
+ require_jar('org.logstash.plugins.input.http', 'logstash-input-http', '3.11.0')
@@ -55,50 +55,42 @@ describe LogStash::Inputs::Http do
55
55
  end
56
56
 
57
57
  describe "handling overflowing requests with a 429" do
58
- let(:logstash_queue_size) { rand(10) + 1 }
59
- let(:max_pending_requests) { rand(5) + 1 }
60
- let(:threads) { rand(4) + 1 }
58
+ let(:logstash_queue_size) { 1 }
59
+ let(:max_pending_requests) { 1 }
60
+ let(:threads) { 1 }
61
61
  let(:logstash_queue) { SizedQueue.new(logstash_queue_size) }
62
62
  let(:client_options) { {
63
- "request_timeout" => 0.1,
64
- "connect_timeout" => 3,
65
- "socket_timeout" => 0.1
63
+ request_timeout: 5,
64
+ connect_timeout: 3,
65
+ socket_timeout: 0.5
66
66
  } }
67
67
 
68
68
  let(:config) { { "port" => port, "threads" => threads, "max_pending_requests" => max_pending_requests } }
69
69
 
70
70
  context "when sending more requests than queue slots" do
71
71
  it "rejects additional incoming requests with HTTP 429" do
72
- # these will queue and return 200
73
- logstash_queue_size.times.each do |i|
72
+ # fill the pipeline queue so the next push blocks the server worker
73
+ logstash_queue_size.times do
74
74
  response = client.post("http://127.0.0.1:#{port}", :body => '{}').call
75
75
  expect(response.code).to eq(200)
76
76
  end
77
77
 
78
- # these will block
79
- blocked_calls = (threads + max_pending_requests).times.map do
80
- Thread.new do
81
- begin
82
- {:result => client.post("http://127.0.0.1:#{port}", :body => '{}').call}
83
- rescue Manticore::SocketException, Manticore::SocketTimeout => e
84
- {:exception => e}
85
- end
78
+ # a blocked request holds its slot even after the client times out, so sending
79
+ # sequentially fills every worker and backlog slot before the next 429
80
+ blocked = 0
81
+ response = nil
82
+ deadline = Time.now + 30
83
+ until response && response.code == 429
84
+ raise "server never returned 429 (blocked=#{blocked})" if Time.now > deadline
85
+ begin
86
+ response = client.post("http://127.0.0.1:#{port}", :body => '{}').call
87
+ rescue Manticore::SocketTimeout
88
+ blocked += 1
86
89
  end
87
90
  end
88
91
 
89
- sleep 1 # let those requests go, but not so long that our block-detector starts emitting 429's
90
-
91
- # by now we should be rejecting with 429 since the backlog is full
92
- response = client.post("http://127.0.0.1:#{port}", :body => '{}').call
93
92
  expect(response.code).to eq(429)
94
-
95
- # ensure that our blocked connections did block
96
- aggregate_failures do
97
- blocked_calls.map(&:value).each do |blocked|
98
- expect(blocked[:result]).to be_nil
99
- expect(blocked[:exception]).to be_a_kind_of Manticore::SocketTimeout
100
- end
101
- end
93
+ expect(blocked).to eq(threads + max_pending_requests)
102
94
  end
103
95
  end
104
96
  end
@@ -109,9 +101,9 @@ describe LogStash::Inputs::Http do
109
101
  let(:threads) { rand(4) + 1 }
110
102
  let(:logstash_queue) { SizedQueue.new(logstash_queue_size) }
111
103
  let(:client_options) { {
112
- "request_timeout" => 0.1,
113
- "connect_timeout" => 3,
114
- "socket_timeout" => 0.1
104
+ request_timeout: 5,
105
+ connect_timeout: 3,
106
+ socket_timeout: 1
115
107
  } }
116
108
 
117
109
  let(:config) { { "port" => port, "threads" => threads, "max_pending_requests" => max_pending_requests } }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.11
4
+ version: 3.11.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-07-29 00:00:00.000000000 Z
10
+ date: 2026-08-20 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: logstash-core-plugin-api
@@ -176,7 +176,7 @@ files:
176
176
  - vendor/jar-dependencies/io/netty/netty-resolver/4.1.136.Final/netty-resolver-4.1.136.Final.jar
177
177
  - vendor/jar-dependencies/io/netty/netty-transport-native-unix-common/4.1.136.Final/netty-transport-native-unix-common-4.1.136.Final.jar
178
178
  - vendor/jar-dependencies/io/netty/netty-transport/4.1.136.Final/netty-transport-4.1.136.Final.jar
179
- - vendor/jar-dependencies/org/logstash/plugins/input/http/logstash-input-http/3.10.11/logstash-input-http-3.10.11.jar
179
+ - vendor/jar-dependencies/org/logstash/plugins/input/http/logstash-input-http/3.11.0/logstash-input-http-3.11.0.jar
180
180
  homepage: http://www.elastic.co/guide/en/logstash/current/index.html
181
181
  licenses:
182
182
  - Apache License (2.0)