logstash-filter-dns 3.1.5 → 3.2.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 +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
|