fluent-plugin-splunk-hec 1.2.8 → 1.2.11

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: 3404443a78707ec84c807cc959de100eefec4c7144f76b4587fa4c02580d300d
4
- data.tar.gz: '098eb708f6093e40c59aa597c7f185403f9fb195c03758a726ebd8bcc2fc4468'
3
+ metadata.gz: 277de2e282c7dfee68431d0b4ca144b8215d68f7210814fff1caadc452527955
4
+ data.tar.gz: 99bd20f106656d0be1ab6d70c3d1afd4516fbd19995e3edc8c6357f123f18e12
5
5
  SHA512:
6
- metadata.gz: b7dc521fe94e36ae9e4df51f5a32c936615228a164f76ec9391bd72033aa06d35e8292d8cc95b6025cf880943e56f48c2bebbbc5a9e606e219972528a464c9a3
7
- data.tar.gz: 4d6ae8221544453debf6e0dbf1ecbdb9a0774f36ae3d1e4715781ca078a2c0d3ebd2870455ffcd75bdb292d1634a8e71d6034f620c69638d51372f010cac4d46
6
+ metadata.gz: e8b91a7bfc42ce39100754bd79730a7fad4b27337e9cd70e13ccbc836f05aa98e123714cf268cd8f76bb351b8e409191050d8a9b4856bc088334a7a10f174000
7
+ data.tar.gz: 8874436fb7b143529994256d7f8d99d0f57c113e40ff1b3907af0a08c802a65372b7550c70d7db35af75c4de9e826385d0f7a663f82f8941062a2f302c46087a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-splunk-hec (1.2.8)
4
+ fluent-plugin-splunk-hec (1.2.11)
5
5
  fluentd (>= 1.4)
6
6
  multi_json (~> 1.13)
7
7
  net-http-persistent (~> 3.1)
@@ -11,14 +11,13 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- activemodel (6.1.4.1)
15
- activesupport (= 6.1.4.1)
16
- activesupport (6.1.4.1)
14
+ activemodel (7.0.1)
15
+ activesupport (= 7.0.1)
16
+ activesupport (7.0.1)
17
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
18
18
  i18n (>= 1.6, < 2)
19
19
  minitest (>= 5.1)
20
20
  tzinfo (~> 2.0)
21
- zeitwerk (~> 2.3)
22
21
  addressable (2.8.0)
23
22
  public_suffix (>= 2.0.2, < 5.0)
24
23
  aes_key_wrap (1.1.0)
@@ -30,10 +29,10 @@ GEM
30
29
  crack (0.4.5)
31
30
  rexml
32
31
  docile (1.4.0)
33
- fluentd (1.14.2)
32
+ fluentd (1.14.4)
34
33
  bundler
35
34
  cool.io (>= 1.4.5, < 2.0.0)
36
- http_parser.rb (>= 0.5.1, < 0.8.0)
35
+ http_parser.rb (>= 0.5.1, < 0.9.0)
37
36
  msgpack (>= 1.3.1, < 2.0.0)
38
37
  serverengine (>= 2.2.2, < 3.0.0)
39
38
  sigdump (~> 0.2.2)
@@ -43,9 +42,9 @@ GEM
43
42
  webrick (>= 1.4.2, < 1.8.0)
44
43
  yajl-ruby (~> 1.0)
45
44
  hashdiff (1.0.1)
46
- http_parser.rb (0.7.0)
45
+ http_parser.rb (0.8.0)
47
46
  httpclient (2.8.3)
48
- i18n (1.8.11)
47
+ i18n (1.9.1)
49
48
  concurrent-ruby (~> 1.0)
50
49
  json-jwt (1.13.0)
51
50
  activesupport (>= 4.2)
@@ -54,8 +53,8 @@ GEM
54
53
  mail (2.7.1)
55
54
  mini_mime (>= 0.1.1)
56
55
  mini_mime (1.1.2)
57
- minitest (5.14.4)
58
- msgpack (1.4.2)
56
+ minitest (5.15.0)
57
+ msgpack (1.4.4)
59
58
  multi_json (1.15.0)
60
59
  net-http-persistent (3.1.0)
61
60
  connection_pool (~> 2.2)
@@ -81,7 +80,7 @@ GEM
81
80
  rack (>= 2.1.0)
82
81
  rake (13.0.6)
83
82
  rexml (3.2.5)
84
- serverengine (2.2.4)
83
+ serverengine (2.2.5)
85
84
  sigdump (~> 0.2.2)
86
85
  sigdump (0.2.4)
87
86
  simplecov (0.21.2)
@@ -95,7 +94,7 @@ GEM
95
94
  activesupport (>= 3)
96
95
  attr_required (>= 0.0.5)
97
96
  httpclient (>= 2.4)
98
- test-unit (3.5.0)
97
+ test-unit (3.5.3)
99
98
  power_assert
100
99
  tzinfo (2.0.4)
101
100
  concurrent-ruby (~> 1.0)
@@ -116,7 +115,6 @@ GEM
116
115
  hashdiff
117
116
  webrick (1.7.0)
118
117
  yajl-ruby (1.4.1)
119
- zeitwerk (2.5.1)
120
118
 
121
119
  PLATFORMS
122
120
  ruby
@@ -131,4 +129,4 @@ DEPENDENCIES
131
129
  webmock (~> 3.5.0)
132
130
 
133
131
  BUNDLED WITH
134
- 2.2.30
132
+ 2.3.9
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.8
1
+ 1.2.11
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fluent/output'
4
3
  require 'fluent/plugin/output'
5
4
  require 'fluent/plugin/formatter'
6
5
  require 'prometheus/client'
7
6
  require 'benchmark'
8
7
 
9
8
  module Fluent::Plugin
10
- class SplunkOutput < Fluent::BufferedOutput
9
+ class SplunkOutput < Fluent::Plugin::Output
11
10
  helpers :formatter
12
11
 
13
12
  autoload :VERSION, 'fluent/plugin/out_splunk/version'
@@ -100,9 +99,9 @@ module Fluent::Plugin
100
99
  write_to_splunk(chunk)
101
100
  end
102
101
 
103
- @metrics[:record_counter].increment(labels: metric_labels, by: chunk.size_of_events)
102
+ @metrics[:record_counter].increment(labels: metric_labels, by: chunk.size)
104
103
  @metrics[:bytes_counter].increment(labels: metric_labels, by: chunk.bytesize)
105
- @metrics[:write_records_histogram].observe(chunk.size_of_events, labels: metric_labels)
104
+ @metrics[:write_records_histogram].observe(chunk.size, labels: metric_labels)
106
105
  @metrics[:write_bytes_histogram].observe(chunk.bytesize, labels: metric_labels, )
107
106
  @metrics[:write_latency_histogram].observe(t, labels: metric_labels, )
108
107
  end
@@ -193,8 +192,8 @@ module Fluent::Plugin
193
192
  v = instance_variable_get "@#{f}"
194
193
  next unless v
195
194
 
196
- if v == TAG_PLACEHOLDER
197
- instance_variable_set "@#{f}", ->(tag, _) { tag }
195
+ if v.include? TAG_PLACEHOLDER
196
+ instance_variable_set "@#{f}", ->(tag, _) { v.gsub(TAG_PLACEHOLDER, tag) }
198
197
  else
199
198
  instance_variable_set "@#{f}", ->(_, _) { v }
200
199
  end
@@ -31,13 +31,16 @@ module Fluent::Plugin
31
31
  config_param :protocol, :enum, list: %i[http https], default: :https
32
32
 
33
33
  desc 'The hostname/IP to HEC, or HEC load balancer.'
34
- config_param :hec_host, :string
34
+ config_param :hec_host, :string, default: ''
35
35
 
36
36
  desc 'The port number to HEC, or HEC load balancer.'
37
37
  config_param :hec_port, :integer, default: 8088
38
38
 
39
+ desc 'Full url to connect tosplunk. Example: https://mydomain.com:8088/apps/splunk'
40
+ config_param :full_url, :string, default: ''
41
+
39
42
  desc 'The HEC token.'
40
- config_param :hec_token, :string
43
+ config_param :hec_token, :string, secret: true
41
44
 
42
45
  desc 'If a connection has not been used for this number of seconds it will automatically be reset upon the next use to avoid attempting to send to a closed connection. nil means no timeout.'
43
46
  config_param :idle_timeout, :integer, default: 5
@@ -132,11 +135,15 @@ module Fluent::Plugin
132
135
 
133
136
  def configure(conf)
134
137
  super
135
-
138
+ raise Fluent::ConfigError, 'One of `hec_host` or `full_url` is required.' if @hec_host.empty? && @full_url.empty?
136
139
  check_metric_configs
137
140
  pick_custom_format_method
138
141
  end
139
142
 
143
+ def write(chunk)
144
+ super
145
+ end
146
+
140
147
  def start
141
148
  super
142
149
  @conn = Net::HTTP::Persistent.new.tap do |c|
@@ -279,9 +286,17 @@ module Fluent::Plugin
279
286
  end
280
287
 
281
288
  def construct_api
282
- URI("#{@protocol}://#{@hec_host}:#{@hec_port}/services/collector")
289
+ if @full_url.empty?
290
+ URI("#{@protocol}://#{@hec_host}:#{@hec_port}/services/collector")
291
+ else
292
+ URI("#{@full_url.delete_suffix("/")}/services/collector")
293
+ end
283
294
  rescue StandardError
284
- raise Fluent::ConfigError, "hec_host (#{@hec_host}) and/or hec_port (#{@hec_port}) are invalid."
295
+ if @full_url.empty?
296
+ raise Fluent::ConfigError, "hec_host (#{@hec_host}) and/or hec_port (#{@hec_port}) are invalid."
297
+ else
298
+ raise Fluent::ConfigError, "full_url (#{@full_url}) is invalid."
299
+ end
285
300
  end
286
301
 
287
302
  def new_connection
@@ -312,10 +327,13 @@ module Fluent::Plugin
312
327
  post.body = chunk.read
313
328
  log.debug { "[Sending] Chunk: #{dump_unique_id_hex(chunk.unique_id)}(#{post.body.bytesize}B)." }
314
329
  log.trace { "POST #{@api} body=#{post.body}" }
315
-
316
- t1 = Time.now
317
- response = @conn.request @api, post
318
- t2 = Time.now
330
+ begin
331
+ t1 = Time.now
332
+ response = @conn.request @api, post
333
+ t2 = Time.now
334
+ rescue Net::HTTP::Persistent::Error => e
335
+ raise e.cause
336
+ end
319
337
 
320
338
  raise_err = response.code.to_s.start_with?('5') || (!@consume_chunk_on_4xx_errors && response.code.to_s.start_with?('4'))
321
339
 
@@ -41,6 +41,10 @@ module Fluent::Plugin
41
41
  super
42
42
  end
43
43
 
44
+ def write(chunk)
45
+ super
46
+ end
47
+
44
48
  def construct_api
45
49
  uri = "https://#{@ingest_api_host}/#{@ingest_api_tenant}#{@ingest_api_events_endpoint}"
46
50
  URI(uri)
@@ -101,7 +105,7 @@ module Fluent::Plugin
101
105
  end
102
106
 
103
107
  def write_to_splunk(chunk)
104
- log.trace "#{self.class}: In write() with #{chunk.size_of_events} records and #{chunk.bytesize} bytes "
108
+ log.trace "#{self.class}: In write() with #{chunk.size} records and #{chunk.bytesize} bytes "
105
109
  # ingest API is an array of json objects
106
110
  body = "[#{chunk.read.chomp(',')}]"
107
111
  @conn ||= new_connection
@@ -64,7 +64,7 @@ describe Fluent::Plugin::SplunkHecOutput do
64
64
 
65
65
  describe 'hec_host validation' do
66
66
  describe 'invalid host' do
67
- it 'should require hec_host' do
67
+ it 'should require hec_host or full_url' do
68
68
  expect { create_hec_output_driver }.must_raise Fluent::ConfigError
69
69
  end
70
70
 
@@ -78,6 +78,17 @@ describe Fluent::Plugin::SplunkHecOutput do
78
78
  end
79
79
  end
80
80
 
81
+ describe 'full_url validation' do
82
+ describe 'invalid full_url' do
83
+ it { expect { create_hec_output_driver(full_url: '%bad-host%.com') }.must_raise Fluent::ConfigError }
84
+ end
85
+ describe 'good full_url' do
86
+ it {
87
+ expect(create_hec_output_driver('full_url https://splunk.com').instance.full_url).must_equal 'https://splunk.com'
88
+ }
89
+ end
90
+ end
91
+
81
92
  it 'should send request to Splunk' do
82
93
  req = verify_sent_events do |batch|
83
94
  expect(batch.size).must_equal 2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-splunk-hec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 1.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Splunk Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-04 00:00:00.000000000 Z
11
+ date: 2022-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -221,13 +221,13 @@ signing_key:
221
221
  specification_version: 4
222
222
  summary: Fluentd plugin for Splunk HEC.
223
223
  test_files:
224
- - test/test_helper.rb
225
- - test/fluent/plugin/out_splunk_hec_test.rb
226
224
  - test/fluent/plugin/out_splunk_ingest_api_test.rb
227
- - test/lib/webmock/http_lib_adapters/curb_adapter.rb
225
+ - test/fluent/plugin/out_splunk_hec_test.rb
226
+ - test/test_helper.rb
227
+ - test/lib/webmock/http_lib_adapters/excon_adapter.rb
228
228
  - test/lib/webmock/http_lib_adapters/em_http_request_adapter.rb
229
- - test/lib/webmock/http_lib_adapters/http_rb_adapter.rb
230
229
  - test/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb
231
230
  - test/lib/webmock/http_lib_adapters/manticore_adapter.rb
232
- - test/lib/webmock/http_lib_adapters/excon_adapter.rb
231
+ - test/lib/webmock/http_lib_adapters/curb_adapter.rb
233
232
  - test/lib/webmock/http_lib_adapters/patron_adapter.rb
233
+ - test/lib/webmock/http_lib_adapters/http_rb_adapter.rb