logstash-output-influxdb2 0.2.0 → 0.4.0

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: 7f1923cfcb3ce2d41a66adcd3be3d3226e9715e56046c15982555b8e96696406
4
- data.tar.gz: c06683b3e4dda36a47a71c6524c4293c221d85341a273d65ccaa42d13448455d
3
+ metadata.gz: 3dfd75d3189d4c6d414de1de45c4bc1cc238edab17b80c46f5854b69d40bf2a2
4
+ data.tar.gz: 016e508f44b388e632fa97a06fb8643691083b174495261305e48285d645da27
5
5
  SHA512:
6
- metadata.gz: 57df12c97e4445ea07b765157fdf75809cba9fa5f7ce8cc386d713e051c17fbbfadf85c2e098962334e47570ffe749064e4a36c63804484a899aae86ea1497b6
7
- data.tar.gz: 8b7e1db0e716c92b45d6983a7cb722933222dd2faa482c605cb395eee1b18f52a57485b429c36dbb85e8faf34cf0b286f1777af68ca6e10c03591da6ed2c79ba
6
+ metadata.gz: 8dc471f8845297d388f0cec6954da91b4d43149119df5bc5fa6c1a92fb3be740b523352728a95acf4f01159d95d0b21c0c3494dfacceb7219eed1593f9bf8abc
7
+ data.tar.gz: 3841350260e5bb965517caa45ce513a047dd6ec3046f0ff54c3e7703709158c3c5fd6eef4aef01297c9d22feeaaa7a963d15783941f93d43ac3eb9156f4e4b72
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.4.0
2
+ - Update documents
3
+ - Change tags to optional
4
+
5
+ ## 0.3.0
6
+ - Add guards for invalid event
7
+ - Remove include_tags and exclude_tags
8
+
1
9
  ## 0.2.0
2
10
  - Add a copyright notice
3
11
  - Update gemspec summary
@@ -14,12 +14,9 @@ class LogStash::Outputs::InfluxDB2 < LogStash::Outputs::Base
14
14
  config :write_options, :validate => :hash, :default => {}
15
15
 
16
16
  config :measurement, :validate => :string, :required => true
17
- config :tags, :validate => :string, :required => true
17
+ config :tags, :validate => :string
18
18
  config :fields, :validate => :string, :required => true
19
19
 
20
- config :include_tags, :validate => :string, :list => true, :default => []
21
- config :exclude_tags, :validate => :string, :list => true, :default => []
22
-
23
20
  config :escape_value, :validate => :boolean, :default => false
24
21
 
25
22
  public
@@ -32,26 +29,24 @@ class LogStash::Outputs::InfluxDB2 < LogStash::Outputs::Base
32
29
 
33
30
  public
34
31
  def receive(event)
35
- begin
36
- tags = event.get(@tags)
37
- unless @include_tags.empty?
38
- tags = tags.select { |k,v| @include_tags.include?(k) }
39
- end
40
- unless @exclude_tags.empty?
41
- tags = tags.select { |k,v| ! @exclude_tags.include?(k) }
42
- end
43
- fields = event.get(@fields)
44
- unless @escape_value
45
- fields = fields.transform_values { |v| ToStr.new(v) }
46
- end
47
- @write_api.write(data: InfluxDB2::Point.new(
48
- name: event.sprintf(@measurement), tags: tags, fields: fields,
49
- time: event.timestamp.time, precision: @precision))
50
- rescue InfluxDB2::InfluxError => ie
51
- @logger.warn("HTTP communication error while writing to InfluxDB", :exception => ie)
52
- rescue Exception => e
53
- @logger.warn("Non recoverable exception while writing to InfluxDB", :exception => e)
32
+ fields = event.get(@fields)
33
+ return unless fields.is_a?(Hash) && ! fields.empty?
34
+
35
+ tags = @tags.nil? ? nil : event.get(@tags)
36
+ return unless tags.nil? || tags.is_a?(Hash)
37
+
38
+ unless @escape_value
39
+ fields = fields.transform_values { |v| ToStr.new(v) }
54
40
  end
41
+
42
+ @write_api.write(data: InfluxDB2::Point.new(
43
+ name: event.sprintf(@measurement), tags: tags, fields: fields,
44
+ time: event.timestamp.time, precision: @precision))
45
+
46
+ rescue InfluxDB2::InfluxError => ie
47
+ @logger.warn("HTTP communication error while writing to InfluxDB", :exception => ie)
48
+ rescue Exception => e
49
+ @logger.warn("Non recoverable exception while writing to InfluxDB", :exception => e)
55
50
  end # def event
56
51
 
57
52
  def close
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-influxdb2'
3
- s.version = '0.2.0'
3
+ s.version = '0.4.0'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = 'Writes metrics to InfluxDB 2.x'
6
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'
@@ -14,7 +14,6 @@ describe LogStash::Outputs::InfluxDB2 do
14
14
  "url" => "http://localhost:8086",
15
15
  "token" => "token123",
16
16
  "measurement" => "%{[kubernetes][labels][app]}",
17
- "tags" => "[prometheus][labels]",
18
17
  "fields" => "[prometheus][metrics]"
19
18
  }
20
19
  end
@@ -56,10 +55,8 @@ describe LogStash::Outputs::InfluxDB2 do
56
55
  expect(write_options.batch_abort_on_exception).to be false
57
56
 
58
57
  expect(subject.instance_variable_get(:@measurement)).to eq "%{[kubernetes][labels][app]}"
59
- expect(subject.instance_variable_get(:@tags)).to eq "[prometheus][labels]"
58
+ expect(subject.instance_variable_get(:@tags)).to be_nil
60
59
  expect(subject.instance_variable_get(:@fields)).to eq "[prometheus][metrics]"
61
- expect(subject.instance_variable_get(:@include_tags)).to eq []
62
- expect(subject.instance_variable_get(:@exclude_tags)).to eq []
63
60
  expect(subject.instance_variable_get(:@escape_value)).to be false
64
61
  end
65
62
 
@@ -100,8 +97,6 @@ describe LogStash::Outputs::InfluxDB2 do
100
97
  "measurement" => "%{[kubernetes][labels][app]}",
101
98
  "tags" => "[prometheus][labels]",
102
99
  "fields" => "[prometheus][metrics]",
103
- "include_tags" => [ "foo", "abc" ],
104
- "exclude_tags" => [ "bar", "xyz" ],
105
100
  "escape_value" => true
106
101
  }
107
102
  end
@@ -145,8 +140,6 @@ describe LogStash::Outputs::InfluxDB2 do
145
140
  expect(subject.instance_variable_get(:@measurement)).to eq "%{[kubernetes][labels][app]}"
146
141
  expect(subject.instance_variable_get(:@tags)).to eq "[prometheus][labels]"
147
142
  expect(subject.instance_variable_get(:@fields)).to eq "[prometheus][metrics]"
148
- expect(subject.instance_variable_get(:@include_tags)).to eq [ "foo", "abc" ]
149
- expect(subject.instance_variable_get(:@exclude_tags)).to eq [ "bar", "xyz" ]
150
143
  expect(subject.instance_variable_get(:@escape_value)).to be true
151
144
  end
152
145
 
@@ -288,7 +281,7 @@ describe LogStash::Outputs::InfluxDB2 do
288
281
 
289
282
  end
290
283
 
291
- context "validate payload - tag filter" do
284
+ context "validate payload - invalid event" do
292
285
 
293
286
  let(:config) do
294
287
  {
@@ -297,10 +290,7 @@ describe LogStash::Outputs::InfluxDB2 do
297
290
  "options" => { "bucket" => "test-bucket", "org" => "test-org", "precision" => "ms" },
298
291
  "measurement" => "%{[kubernetes][labels][app]}",
299
292
  "tags" => "[prometheus][labels]",
300
- "fields" => "[prometheus][metrics]",
301
- "include_tags" => [ "foo", "abc", "test" ],
302
- "exclude_tags" => [ "bar", "xyz", "test" ],
303
- "escape_value" => true
293
+ "fields" => "[prometheus][metrics]"
304
294
  }
305
295
  end
306
296
 
@@ -314,12 +304,53 @@ describe LogStash::Outputs::InfluxDB2 do
314
304
  "@timestamp" => "2020-01-01T00:00:00Z",
315
305
  "kubernetes" => { "labels" => { "app" => "dummy" } },
316
306
  "prometheus" => {
317
- "labels" => {
318
- "foo" => "bar", "abc" => "xyz",
319
- "bar" => "foo", "xyz" => "abc",
320
- "test" => "123"
321
- },
322
- "metrics" => { "message" => "Hello World!" }
307
+ "labels" => { "foo" => "bar", "abc" => "xyz" }
308
+ # Invalid: no metrics!
309
+ }
310
+ ))
311
+
312
+ subject.receive(LogStash::Event.new(
313
+ "@timestamp" => "2020-01-01T00:00:00Z",
314
+ "kubernetes" => { "labels" => { "app" => "dummy" } },
315
+ "prometheus" => {
316
+ "labels" => { "foo" => "bar", "abc" => "xyz" },
317
+ "metrics" => {} # Invalid: no metrics!
318
+ }
319
+ ))
320
+
321
+ subject.receive(LogStash::Event.new(
322
+ "@timestamp" => "2020-01-01T00:00:00Z",
323
+ "kubernetes" => { "labels" => { "app" => "dummy" } },
324
+ "prometheus" => {
325
+ "labels" => { "foo" => "bar", "abc" => "xyz" },
326
+ "metrics" => 123.0 # Invalid: metrics are not a hash!
327
+ }
328
+ ))
329
+
330
+ subject.receive(LogStash::Event.new(
331
+ "@timestamp" => "2020-01-01T00:00:00Z",
332
+ "kubernetes" => { "labels" => { "app" => "dummy" } },
333
+ "prometheus" => {
334
+ # Valid: no labels!
335
+ "metrics" => { "count" => 123.0 }
336
+ }
337
+ ))
338
+
339
+ subject.receive(LogStash::Event.new(
340
+ "@timestamp" => "2020-01-01T00:00:00Z",
341
+ "kubernetes" => { "labels" => { "app" => "dummy" } },
342
+ "prometheus" => {
343
+ "labels" => {}, # Valid: no labels!
344
+ "metrics" => { "count" => 123.0 }
345
+ }
346
+ ))
347
+
348
+ subject.receive(LogStash::Event.new(
349
+ "@timestamp" => "2020-01-01T00:00:00Z",
350
+ "kubernetes" => { "labels" => { "app" => "dummy" } },
351
+ "prometheus" => {
352
+ "labels" => "test", # Invalid: labels are not a hash!
353
+ "metrics" => { "count" => 123.0 }
323
354
  }
324
355
  ))
325
356
 
@@ -330,8 +361,8 @@ describe LogStash::Outputs::InfluxDB2 do
330
361
  write_api = subject.instance_variable_get(:@write_api)
331
362
 
332
363
  expect(write_api).to have_received(:write_raw)
333
- .with('dummy,abc=xyz,foo=bar message="Hello World!" 1577836800000',
334
- {:bucket=>"test-bucket", :org=>"test-org", :precision=>"ms"})
364
+ .with('dummy count=123.0 1577836800000',
365
+ {:bucket=>"test-bucket", :org=>"test-org", :precision=>"ms"}).twice
335
366
  end
336
367
 
337
368
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-influxdb2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Issey Yamakoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-13 00:00:00.000000000 Z
11
+ date: 2023-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api