logstash-input-http 4.1.13-java → 4.2.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: 94247806a5d8c9a3b304a1d6e831f17571b1cb9f565f850d6b382b15cb8335ff
4
- data.tar.gz: 2d2e6f55b502c2286a30f7e88f985de62a01dcfd3cfed884dac4cd1a24c7c07e
3
+ metadata.gz: 539abcb4c339a32fffb7f9cacbd89d9d89699c2ba2fb095662c5b38f13a2d0e2
4
+ data.tar.gz: 88d0055774cdd24adac50a40ae6882847833774c4be98909ae1949291f221b26
5
5
  SHA512:
6
- metadata.gz: 1dbb8634f8329871af2cbfcff78190e1a59643ba0a9150c8397cf4c0560570bb5fd65075842eebf8ea3ca962c2c7f16ce6ecc9f2ac5fcfb1c61ff7d02f8b7707
7
- data.tar.gz: b494b8b1e684bafa3be2d3f87c4c9d9a3c4e127debba8b659ca2d28a580e9a4fc7d1b4d0ff9f5af036732852ce0e7ccdf3cc1c5aacd3e51c8b5042beabd2ccf5
6
+ metadata.gz: 04af87e8700a675a2c461dab2b876e61c16733ce1a670fe09a283ca8f4d5930e90bc874f68bb7d2f8610675498a15f51804a719fc7912db6bd9af77d98c9dafa
7
+ data.tar.gz: 02cb65c66466c985b7efa061f8bd50993cc4267a63f351b6702e24a9b72ef6cc8585aa7cf01e8da09247dd3db5b0ce07d7a4b0d247b56ff76bfb16c888db7f98
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 4.2.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
  ## 4.1.13
2
5
  - Fix to use the `Content-type` declared charset to decode the request body [#230](https://github.com/logstash-plugins/logstash-input-http/pull/230)
3
6
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.1.13
1
+ 4.2.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
 
@@ -176,6 +176,8 @@ class LogStash::Inputs::Http < LogStash::Inputs::Base
176
176
 
177
177
  validate_ssl_settings!
178
178
 
179
+ validate_dump_size_system_property!
180
+
179
181
  if @user && @password
180
182
  token = Base64.strict_encode64("#{@user}:#{@password.value}")
181
183
  @auth_token = "Basic #{token}"
@@ -276,6 +278,12 @@ class LogStash::Inputs::Http < LogStash::Inputs::Base
276
278
  [http_host, nil]
277
279
  end
278
280
  end
281
+
282
+ def validate_dump_size_system_property!
283
+ java_import org.logstash.plugins.inputs.http.util.WireLogger
284
+ WireLogger.validate_dump_size_property
285
+ end
286
+ private :validate_dump_size_system_property!
279
287
 
280
288
  def validate_ssl_settings!
281
289
  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', '4.1.13')
12
+ require_jar('org.logstash.plugins.input.http', 'logstash-input-http', '4.2.0')
@@ -69,50 +69,42 @@ describe LogStash::Inputs::Http do
69
69
  end
70
70
 
71
71
  describe "handling overflowing requests with a 429" do
72
- let(:logstash_queue_size) { rand(10) + 1 }
73
- let(:max_pending_requests) { rand(5) + 1 }
74
- let(:threads) { rand(4) + 1 }
72
+ let(:logstash_queue_size) { 1 }
73
+ let(:max_pending_requests) { 1 }
74
+ let(:threads) { 1 }
75
75
  let(:logstash_queue) { SizedQueue.new(logstash_queue_size) }
76
76
  let(:client_options) { {
77
- "request_timeout" => 0.1,
78
- "connect_timeout" => 3,
79
- "socket_timeout" => 0.1
77
+ request_timeout: 5,
78
+ connect_timeout: 3,
79
+ socket_timeout: 0.5
80
80
  } }
81
81
 
82
82
  let(:config) { { "port" => port, "threads" => threads, "max_pending_requests" => max_pending_requests } }
83
83
 
84
84
  context "when sending more requests than queue slots" do
85
85
  it "rejects additional incoming requests with HTTP 429" do
86
- # these will queue and return 200
87
- logstash_queue_size.times.each do |i|
86
+ # fill the pipeline queue so the next push blocks the server worker
87
+ logstash_queue_size.times do
88
88
  response = client.post("http://127.0.0.1:#{port}", :body => '{}').call
89
89
  expect(response.code).to eq(200)
90
90
  end
91
91
 
92
- # these will block
93
- blocked_calls = (threads + max_pending_requests).times.map do
94
- Thread.new do
95
- begin
96
- {:result => client.post("http://127.0.0.1:#{port}", :body => '{}').call}
97
- rescue Manticore::SocketException, Manticore::SocketTimeout => e
98
- {:exception => e}
99
- end
92
+ # a blocked request holds its slot even after the client times out, so sending
93
+ # sequentially fills every worker and backlog slot before the next 429
94
+ blocked = 0
95
+ response = nil
96
+ deadline = Time.now + 30
97
+ until response && response.code == 429
98
+ raise "server never returned 429 (blocked=#{blocked})" if Time.now > deadline
99
+ begin
100
+ response = client.post("http://127.0.0.1:#{port}", :body => '{}').call
101
+ rescue Manticore::SocketTimeout
102
+ blocked += 1
100
103
  end
101
104
  end
102
105
 
103
- sleep 1 # let those requests go, but not so long that our block-detector starts emitting 429's
104
-
105
- # by now we should be rejecting with 429 since the backlog is full
106
- response = client.post("http://127.0.0.1:#{port}", :body => '{}').call
107
106
  expect(response.code).to eq(429)
108
-
109
- # ensure that our blocked connections did block
110
- aggregate_failures do
111
- blocked_calls.map(&:value).each do |blocked|
112
- expect(blocked[:result]).to be_nil
113
- expect(blocked[:exception]).to be_a_kind_of Manticore::SocketTimeout
114
- end
115
- end
107
+ expect(blocked).to eq(threads + max_pending_requests)
116
108
  end
117
109
  end
118
110
  end
@@ -123,9 +115,9 @@ describe LogStash::Inputs::Http do
123
115
  let(:threads) { rand(4) + 1 }
124
116
  let(:logstash_queue) { SizedQueue.new(logstash_queue_size) }
125
117
  let(:client_options) { {
126
- "request_timeout" => 0.1,
127
- "connect_timeout" => 3,
128
- "socket_timeout" => 0.1
118
+ request_timeout: 5,
119
+ connect_timeout: 3,
120
+ socket_timeout: 1
129
121
  } }
130
122
 
131
123
  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: 4.1.13
4
+ version: 4.2.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/4.1.13/logstash-input-http-4.1.13.jar
179
+ - vendor/jar-dependencies/org/logstash/plugins/input/http/logstash-input-http/4.2.0/logstash-input-http-4.2.0.jar
180
180
  homepage: http://www.elastic.co/guide/en/logstash/current/index.html
181
181
  licenses:
182
182
  - Apache License (2.0)