logstash-filter-dns 3.1.5 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -1
- data/docs/index.asciidoc +8 -0
- data/lib/logstash/filters/dns.rb +8 -3
- data/logstash-filter-dns.gemspec +1 -1
- data/spec/filters/dns_spec.rb +112 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53553697483fd03bdf2c112a17de6797e1433cfe9788c85a4503a748c0e4df3d
|
4
|
+
data.tar.gz: 8e4f0800c03f7d3d3894ea7d5aa9d7f74ea1f2caf1ac95fc828163fdd8676026
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e706cb9f6424adba08d42ea7e686b4020f467557ffbcdc9420e211b10c0adeb6d4ea0db23d189bf81529916b86f326e94c149a69282f0340cc44f6df9ffbc6c
|
7
|
+
data.tar.gz: 92e0a9fec287c122d1ba68a3f15164988420e1174e89d1278e8d12c9bc9ddcdbc9016ef64fa76372ab8b2ee0f7e2db15601c00c5ac9dbfd14f5f93ae30533ffd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
## 3.2.0
|
2
|
+
- Support adding tag(s) on DNS lookup times out, defaults to `["_dnstimeout"]` [#67](https://github.com/logstash-plugins/logstash-filter-dns/pull/67)
|
3
|
+
- As timeouts can be received through tags now, DNS lookup timeouts are logged in debug logs only. [#67](https://github.com/logstash-plugins/logstash-filter-dns/pull/67)
|
4
|
+
|
1
5
|
## 3.1.5
|
2
|
-
- Fixed an issue where a non-string value existing in the resolve/reverse field could cause the plugin to crash
|
6
|
+
- Fixed an issue where a non-string value existing in the resolve/reverse field could cause the plugin to crash [#65](https://github.com/logstash-plugins/logstash-filter-dns/pull/65)
|
3
7
|
|
4
8
|
## 3.1.4
|
5
9
|
- Replaced Timeout::timeout block with `Resolv::DNS::timeouts=` [#62](https://github.com/logstash-plugins/logstash-filter-dns/pull/62)
|
data/docs/index.asciidoc
CHANGED
@@ -58,6 +58,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
|
|
58
58
|
| <<plugins-{type}s-{plugin}-nameserver>> |<<hash,hash>>|No
|
59
59
|
| <<plugins-{type}s-{plugin}-resolve>> |<<array,array>>|No
|
60
60
|
| <<plugins-{type}s-{plugin}-reverse>> |<<array,array>>|No
|
61
|
+
| <<plugins-{type}s-{plugin}-tag_on_timeout>> |<<array,array>>|No
|
61
62
|
| <<plugins-{type}s-{plugin}-timeout>> |<<number,number>>|No
|
62
63
|
|=======================================================================
|
63
64
|
|
@@ -173,6 +174,13 @@ Reverse resolve one or more fields.
|
|
173
174
|
|
174
175
|
`resolv` calls will be wrapped in a timeout instance
|
175
176
|
|
177
|
+
[id="plugins-{type}s-{plugin}-tag_on_timeout"]
|
178
|
+
===== `tag_on_timeout`
|
179
|
+
|
180
|
+
* Value type is <<array,array>>
|
181
|
+
* Defaults to `["_dnstimeout"]`.
|
182
|
+
|
183
|
+
Add tag(s) on DNS lookup time out.
|
176
184
|
|
177
185
|
|
178
186
|
[id="plugins-{type}s-{plugin}-common-options"]
|
data/lib/logstash/filters/dns.rb
CHANGED
@@ -86,6 +86,9 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
86
86
|
# Use custom hosts file(s). For example: `["/var/db/my_custom_hosts"]`
|
87
87
|
config :hostsfile, :validate => :array
|
88
88
|
|
89
|
+
# Tag(s) to apply if a DNS lookup times out. Defaults to `["_dnstimeout"]`.
|
90
|
+
config :tag_on_timeout, :validate => :string, :list => true, :default => ["_dnstimeout"]
|
91
|
+
|
89
92
|
attr_reader :hit_cache
|
90
93
|
attr_reader :failed_cache
|
91
94
|
|
@@ -219,8 +222,9 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
219
222
|
end
|
220
223
|
rescue Resolv::ResolvTimeout
|
221
224
|
@failed_cache[raw] = true if @failed_cache
|
222
|
-
@logger.
|
225
|
+
@logger.debug("DNS: timeout on resolving the hostname.",
|
223
226
|
:field => field, :value => raw)
|
227
|
+
@tag_on_timeout.each { |tag| event.tag(tag) }
|
224
228
|
return
|
225
229
|
rescue SocketError => e
|
226
230
|
@logger.error("DNS: Encountered SocketError.",
|
@@ -305,8 +309,9 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
305
309
|
end
|
306
310
|
rescue Resolv::ResolvTimeout
|
307
311
|
@failed_cache[raw] = true if @failed_cache
|
308
|
-
@logger.
|
312
|
+
@logger.debug("DNS: timeout on resolving address.",
|
309
313
|
:field => field, :value => raw)
|
314
|
+
@tag_on_timeout.each { |tag| event.tag(tag) }
|
310
315
|
return
|
311
316
|
rescue SocketError => e
|
312
317
|
@logger.error("DNS: Encountered SocketError.",
|
@@ -345,7 +350,7 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
345
350
|
tries = 0
|
346
351
|
begin
|
347
352
|
block.call
|
348
|
-
rescue Resolv::ResolvTimeout,
|
353
|
+
rescue Resolv::ResolvTimeout, SocketError
|
349
354
|
if tries < @max_retries
|
350
355
|
tries = tries + 1
|
351
356
|
retry
|
data/logstash-filter-dns.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-dns'
|
4
|
-
s.version = '3.
|
4
|
+
s.version = '3.2.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Performs a standard or reverse DNS lookup"
|
7
7
|
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"
|
data/spec/filters/dns_spec.rb
CHANGED
@@ -7,6 +7,7 @@ require "logstash/filters/dns/resolv_patch"
|
|
7
7
|
|
8
8
|
|
9
9
|
describe LogStash::Filters::DNS do
|
10
|
+
|
10
11
|
describe "with stubbed Resolv" do
|
11
12
|
before(:each) do
|
12
13
|
# We use `Resolv#each_address` and `Resolv#each_name`, which have
|
@@ -621,4 +622,115 @@ describe LogStash::Filters::DNS do
|
|
621
622
|
end
|
622
623
|
end
|
623
624
|
end
|
625
|
+
|
626
|
+
describe "dns forward timeout" do
|
627
|
+
|
628
|
+
let(:subject) { LogStash::Filters::DNS.new(config) }
|
629
|
+
|
630
|
+
before(:each) do
|
631
|
+
allow(subject).to receive(:getaddress).and_raise(Resolv::ResolvTimeout)
|
632
|
+
subject.register
|
633
|
+
subject.filter(event)
|
634
|
+
end
|
635
|
+
|
636
|
+
context "when using the default tag" do
|
637
|
+
let(:config) { { "resolve" => ["message"] } }
|
638
|
+
let(:event) { LogStash::Event.new("message" => "carrera.databits.net") }
|
639
|
+
|
640
|
+
it "should add the default DNS timeout tag" do
|
641
|
+
expect(event.get("tags")).to eq(["_dnstimeout"])
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
context "when using a custom tag" do
|
646
|
+
let(:config) { { "resolve" => ["message"], "tag_on_timeout" => ["dns_custom_timeout"] } }
|
647
|
+
let(:event) { LogStash::Event.new("message" => "carrera.databits.net") }
|
648
|
+
|
649
|
+
it "should add the custom DNS timeout tag" do
|
650
|
+
expect(event.get("tags")).to eq(["dns_custom_timeout"])
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
context "when using no tags" do
|
655
|
+
let(:config) { { "resolve" => ["message"], "tag_on_timeout" => [] } }
|
656
|
+
let(:event) { LogStash::Event.new("message" => "carrera.databits.net") }
|
657
|
+
|
658
|
+
it "should not add any failure tags" do
|
659
|
+
expect(event.get("tags")).to eq(nil)
|
660
|
+
end
|
661
|
+
end
|
662
|
+
|
663
|
+
context "when logging" do
|
664
|
+
|
665
|
+
context "with debug" do
|
666
|
+
let(:config) { { "resolve" => ["message"] } }
|
667
|
+
let(:event) { LogStash::Event.new("message" => "127.0.0.1") }
|
668
|
+
|
669
|
+
before do
|
670
|
+
allow(subject.logger).to receive(:debug).with(any_args)
|
671
|
+
end
|
672
|
+
|
673
|
+
it "logs on timeout exception" do
|
674
|
+
subject.filter(event)
|
675
|
+
expect(subject.logger).to have_received(:debug).with("DNS: timeout on resolving the hostname.", :field => "message", :value => "127.0.0.1")
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
describe "dns reverse timeout" do
|
682
|
+
|
683
|
+
let(:subject) { LogStash::Filters::DNS.new(config) }
|
684
|
+
|
685
|
+
before(:each) do
|
686
|
+
allow(subject).to receive(:getname).and_raise(Resolv::ResolvTimeout)
|
687
|
+
subject.register
|
688
|
+
subject.filter(event)
|
689
|
+
end
|
690
|
+
|
691
|
+
context "when using the default tag" do
|
692
|
+
let(:config) { { "reverse" => ["message"] } }
|
693
|
+
let(:event) { LogStash::Event.new("message" => "127.0.0.1") }
|
694
|
+
|
695
|
+
it "should add the default DNS timeout tag" do
|
696
|
+
expect(event.get("tags")).to eq(["_dnstimeout"])
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
700
|
+
context "when using a custom tag" do
|
701
|
+
let(:config) { { "reverse" => ["message"], "tag_on_timeout" => ["dns_custom_timeout"] } }
|
702
|
+
let(:event) { LogStash::Event.new("message" => "127.0.0.1") }
|
703
|
+
|
704
|
+
it "should add the custom DNS timeout tag" do
|
705
|
+
expect(event.get("tags")).to eq(["dns_custom_timeout"])
|
706
|
+
end
|
707
|
+
end
|
708
|
+
|
709
|
+
context "when using no tags" do
|
710
|
+
let(:config) { { "reverse" => ["message"], "tag_on_timeout" => [] } }
|
711
|
+
let(:event) { LogStash::Event.new("message" => "127.0.0.1") }
|
712
|
+
|
713
|
+
it "should not add any failure tags" do
|
714
|
+
expect(event.get("tags")).to eq(nil)
|
715
|
+
end
|
716
|
+
end
|
717
|
+
|
718
|
+
context "when logging" do
|
719
|
+
|
720
|
+
context "with debug" do
|
721
|
+
let(:config) { { "reverse" => ["message"] } }
|
722
|
+
let(:event) { LogStash::Event.new("message" => "127.0.0.1") }
|
723
|
+
|
724
|
+
before do
|
725
|
+
allow(subject.logger).to receive(:debug).with(any_args)
|
726
|
+
end
|
727
|
+
|
728
|
+
it "logs timeout exception" do
|
729
|
+
subject.filter(event)
|
730
|
+
expect(subject.logger).to have_received(:debug).with("DNS: timeout on resolving address.", :field => "message", :value => "127.0.0.1")
|
731
|
+
end
|
732
|
+
end
|
733
|
+
end
|
734
|
+
end
|
735
|
+
|
624
736
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-dns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|