logstash-output-datadog_logs 0.5.0 → 0.5.1
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 +3 -0
- data/Gemfile +9 -0
- data/README.md +3 -2
- data/lib/logstash/outputs/datadog_logs.rb +9 -4
- data/lib/logstash/outputs/version.rb +1 -1
- data/logstash-output-datadog_logs.gemspec +3 -3
- data/spec/outputs/datadog_logs_spec.rb +12 -11
- metadata +22 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbfe2fc6bf43df61e35e421486e1f7143e4acce4725386decdc05f946249009d
|
4
|
+
data.tar.gz: 36bdf364a1d4ae4d522712914cca7eff722b7f115bf553c6cfeee3d4869a7744
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44eb1829c931dda34c65c962084d4be14ae5ef510000b32dec93e5b465a2e12dcc4ac27b7a53cb603f9c4d1e8a36c6c1262279f3c86317fef76d9448fcb0c125
|
7
|
+
data.tar.gz: ee06691a2c65deb5bf743f47072e35cf9615a238dd2a8f40f4db4459ff4e3fed3025908993f4ddf8f4814cd81117961919037c891d53e76b448058f838d77834
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -1,2 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
+
|
2
3
|
gemspec
|
4
|
+
|
5
|
+
logstash_path = ENV["LOGSTASH_PATH"] || "../../logstash"
|
6
|
+
use_logstash_source = ENV["LOGSTASH_SOURCE"] && ENV["LOGSTASH_SOURCE"].to_s == "1"
|
7
|
+
|
8
|
+
if Dir.exist?(logstash_path) && use_logstash_source
|
9
|
+
gem 'logstash-core', :path => "#{logstash_path}/logstash-core"
|
10
|
+
gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api"
|
11
|
+
end
|
data/README.md
CHANGED
@@ -58,8 +58,8 @@ output {
|
|
58
58
|
| Property | Description | Default value |
|
59
59
|
|-------------|--------------------------------------------------------------------------|----------------|
|
60
60
|
| **api_key** | The API key of your Datadog platform | nil |
|
61
|
-
| **host** |
|
62
|
-
| **port** |
|
61
|
+
| **host** | Endpoint when logs are not directly forwarded to Datadog | intake.logs.datadoghq.com |
|
62
|
+
| **port** | Port when logs are not directly forwarded to Datadog | 443 |
|
63
63
|
| **use_ssl** | If true, the agent initializes a secure connection to Datadog. Ensure to update the port if you disable it. | true |
|
64
64
|
| **max_retries** | The number of retries before the output plugin stops | 5 |
|
65
65
|
| **max_backoff** | The maximum time waited between each retry in seconds | 30 |
|
@@ -67,6 +67,7 @@ output {
|
|
67
67
|
| **use_compression** | Enable log compression for HTTP | true |
|
68
68
|
| **compression_level** | Set the log compression level for HTTP (1 to 9, 9 being the best ratio) | 6 |
|
69
69
|
| **no_ssl_validation** | Disable SSL validation (useful for proxy forwarding) | false |
|
70
|
+
| **http_proxy** | Proxy address for http proxies | none |
|
70
71
|
|
71
72
|
|
72
73
|
|
@@ -35,11 +35,12 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
|
|
35
35
|
config :compression_level, :validate => :number, :required => false, :default => 6
|
36
36
|
config :no_ssl_validation, :validate => :boolean, :required => false, :default => false
|
37
37
|
config :force_v1_routes, :validate => :boolean, :required => false, :default => false # force using deprecated v1 routes
|
38
|
+
config :http_proxy, :validate => :string, :required => false, :default => ""
|
38
39
|
|
39
40
|
# Register the plugin to logstash
|
40
41
|
public
|
41
42
|
def register
|
42
|
-
@client = new_client(@logger, @api_key, @use_http, @use_ssl, @no_ssl_validation, @host, @port, @use_compression, @force_v1_routes)
|
43
|
+
@client = new_client(@logger, @api_key, @use_http, @use_ssl, @no_ssl_validation, @host, @port, @use_compression, @force_v1_routes, @http_proxy)
|
43
44
|
end
|
44
45
|
|
45
46
|
# Logstash shutdown hook
|
@@ -145,9 +146,9 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
|
|
145
146
|
end
|
146
147
|
|
147
148
|
# Build a new transport client
|
148
|
-
def new_client(logger, api_key, use_http, use_ssl, no_ssl_validation, host, port, use_compression, force_v1_routes)
|
149
|
+
def new_client(logger, api_key, use_http, use_ssl, no_ssl_validation, host, port, use_compression, force_v1_routes, http_proxy)
|
149
150
|
if use_http
|
150
|
-
DatadogHTTPClient.new logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key, force_v1_routes
|
151
|
+
DatadogHTTPClient.new logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key, force_v1_routes, http_proxy
|
151
152
|
else
|
152
153
|
DatadogTCPClient.new logger, use_ssl, no_ssl_validation, host, port
|
153
154
|
end
|
@@ -170,6 +171,7 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
|
|
170
171
|
retries += 1
|
171
172
|
retry
|
172
173
|
end
|
174
|
+
@logger.error("Max number of retries reached, dropping message. Last exception: #{ex.message}")
|
173
175
|
rescue => ex
|
174
176
|
@logger.error("Unmanaged exception while sending log to datadog #{ex.message}")
|
175
177
|
end
|
@@ -194,7 +196,7 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
|
|
194
196
|
::Manticore::ResolutionFailure
|
195
197
|
]
|
196
198
|
|
197
|
-
def initialize(logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key, force_v1_routes)
|
199
|
+
def initialize(logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key, force_v1_routes, http_proxy)
|
198
200
|
@logger = logger
|
199
201
|
protocol = use_ssl ? "https" : "http"
|
200
202
|
|
@@ -216,6 +218,9 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
|
|
216
218
|
|
217
219
|
config = {}
|
218
220
|
config[:ssl][:verify] = :disable if no_ssl_validation
|
221
|
+
if http_proxy != ""
|
222
|
+
config[:proxy] = http_proxy
|
223
|
+
end
|
219
224
|
@client = Manticore::Client.new(config)
|
220
225
|
end
|
221
226
|
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.require_paths = ['lib']
|
16
16
|
|
17
17
|
# Files
|
18
|
-
s.files = Dir['lib/**/*', 'spec/**/*', 'vendor/**/*', '*.gemspec', '*.md', 'CONTRIBUTORS', 'Gemfile', 'LICENSE', 'NOTICE.TXT']
|
18
|
+
s.files = Dir['lib/**/*', 'spec/**/*', 'vendor/**/*', "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", '*.gemspec', '*.md', 'CONTRIBUTORS', 'Gemfile', 'LICENSE', 'NOTICE.TXT']
|
19
19
|
# Tests
|
20
20
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
21
21
|
|
@@ -23,10 +23,10 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.metadata = {"logstash_plugin" => "true", "logstash_group" => "output"}
|
24
24
|
|
25
25
|
# Gem dependencies
|
26
|
-
s.add_runtime_dependency "logstash-core-plugin-api", "
|
26
|
+
s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
|
27
27
|
s.add_runtime_dependency 'manticore', '>= 0.5.2', '< 1.0.0'
|
28
28
|
s.add_runtime_dependency 'logstash-codec-json'
|
29
29
|
|
30
|
-
s.add_development_dependency 'logstash-devutils'
|
30
|
+
s.add_development_dependency 'logstash-devutils'
|
31
31
|
s.add_development_dependency 'webmock'
|
32
32
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# under the Apache License Version 2.0.
|
3
3
|
# This product includes software developed at Datadog (https://www.datadoghq.com/).
|
4
4
|
# Copyright 2017 Datadog, Inc.
|
5
|
-
|
5
|
+
# encoding: utf-8
|
6
6
|
require "logstash/devutils/rspec/spec_helper"
|
7
7
|
require "logstash/outputs/datadog_logs"
|
8
8
|
require 'webmock/rspec'
|
@@ -90,12 +90,13 @@ describe LogStash::Outputs::DatadogLogs do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
context "when facing HTTP connection issues" do
|
93
|
+
http_proxy = ""
|
93
94
|
[true, false].each do |force_v1_routes|
|
94
95
|
it "should retry when server is returning 5XX " + (force_v1_routes ? "using v1 routes" : "using v2 routes") do
|
95
96
|
api_key = 'XXX'
|
96
97
|
stub_dd_request_with_return_code(api_key, 500, force_v1_routes)
|
97
98
|
payload = '{}'
|
98
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
99
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
99
100
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
100
101
|
end
|
101
102
|
|
@@ -103,7 +104,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
103
104
|
api_key = 'XXX'
|
104
105
|
stub_dd_request_with_return_code(api_key, 400, force_v1_routes)
|
105
106
|
payload = '{}'
|
106
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
107
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
107
108
|
expect { client.send(payload) }.to_not raise_error
|
108
109
|
end
|
109
110
|
|
@@ -111,7 +112,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
111
112
|
api_key = 'XXX'
|
112
113
|
stub_dd_request_with_return_code(api_key, 429, force_v1_routes)
|
113
114
|
payload = '{}'
|
114
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
115
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
115
116
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
116
117
|
end
|
117
118
|
|
@@ -119,7 +120,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
119
120
|
api_key = 'XXX'
|
120
121
|
stub_dd_request_with_error(api_key, Manticore::Timeout, force_v1_routes)
|
121
122
|
payload = '{}'
|
122
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
123
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
123
124
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
124
125
|
end
|
125
126
|
|
@@ -127,7 +128,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
127
128
|
api_key = 'XXX'
|
128
129
|
stub_dd_request_with_error(api_key, Manticore::SocketException, force_v1_routes)
|
129
130
|
payload = '{}'
|
130
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
131
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
131
132
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
132
133
|
end
|
133
134
|
|
@@ -135,7 +136,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
135
136
|
api_key = 'XXX'
|
136
137
|
stub_dd_request_with_error(api_key, Manticore::ClientProtocolException, force_v1_routes)
|
137
138
|
payload = '{}'
|
138
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
139
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
139
140
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
140
141
|
end
|
141
142
|
|
@@ -143,7 +144,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
143
144
|
api_key = 'XXX'
|
144
145
|
stub_dd_request_with_error(api_key, Manticore::ResolutionFailure, force_v1_routes)
|
145
146
|
payload = '{}'
|
146
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
147
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
147
148
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
148
149
|
end
|
149
150
|
|
@@ -151,7 +152,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
151
152
|
api_key = 'XXX'
|
152
153
|
stub_dd_request_with_error(api_key, Manticore::SocketTimeout, force_v1_routes)
|
153
154
|
payload = '{}'
|
154
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
155
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
155
156
|
expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
|
156
157
|
end
|
157
158
|
|
@@ -159,7 +160,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
159
160
|
api_key = 'XXX'
|
160
161
|
stub_dd_request_with_error(api_key, StandardError, force_v1_routes)
|
161
162
|
payload = '{}'
|
162
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
163
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
163
164
|
expect { client.send(payload) }.to raise_error(StandardError)
|
164
165
|
end
|
165
166
|
|
@@ -167,7 +168,7 @@ describe LogStash::Outputs::DatadogLogs do
|
|
167
168
|
api_key = 'XXX'
|
168
169
|
stub_dd_request_with_error(api_key, StandardError, force_v1_routes)
|
169
170
|
payload = '{}'
|
170
|
-
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes
|
171
|
+
client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
|
171
172
|
expect { client.send_retries(payload, 2, 2) }.to_not raise_error
|
172
173
|
end
|
173
174
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-datadog_logs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog
|
@@ -9,22 +9,28 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-03-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.60'
|
20
|
+
- - "<="
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
22
|
+
version: '2.99'
|
20
23
|
name: logstash-core-plugin-api
|
21
|
-
prerelease: false
|
22
24
|
type: :runtime
|
25
|
+
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
|
-
- - "
|
28
|
+
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
30
|
+
version: '1.60'
|
31
|
+
- - "<="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.99'
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
@@ -35,8 +41,8 @@ dependencies:
|
|
35
41
|
- !ruby/object:Gem::Version
|
36
42
|
version: 1.0.0
|
37
43
|
name: manticore
|
38
|
-
prerelease: false
|
39
44
|
type: :runtime
|
45
|
+
prerelease: false
|
40
46
|
version_requirements: !ruby/object:Gem::Requirement
|
41
47
|
requirements:
|
42
48
|
- - ">="
|
@@ -52,8 +58,8 @@ dependencies:
|
|
52
58
|
- !ruby/object:Gem::Version
|
53
59
|
version: '0'
|
54
60
|
name: logstash-codec-json
|
55
|
-
prerelease: false
|
56
61
|
type: :runtime
|
62
|
+
prerelease: false
|
57
63
|
version_requirements: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - ">="
|
@@ -62,17 +68,17 @@ dependencies:
|
|
62
68
|
- !ruby/object:Gem::Dependency
|
63
69
|
requirement: !ruby/object:Gem::Requirement
|
64
70
|
requirements:
|
65
|
-
- -
|
71
|
+
- - ">="
|
66
72
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
73
|
+
version: '0'
|
68
74
|
name: logstash-devutils
|
69
|
-
prerelease: false
|
70
75
|
type: :development
|
76
|
+
prerelease: false
|
71
77
|
version_requirements: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- -
|
79
|
+
- - ">="
|
74
80
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
81
|
+
version: '0'
|
76
82
|
- !ruby/object:Gem::Dependency
|
77
83
|
requirement: !ruby/object:Gem::Requirement
|
78
84
|
requirements:
|
@@ -80,8 +86,8 @@ dependencies:
|
|
80
86
|
- !ruby/object:Gem::Version
|
81
87
|
version: '0'
|
82
88
|
name: webmock
|
83
|
-
prerelease: false
|
84
89
|
type: :development
|
90
|
+
prerelease: false
|
85
91
|
version_requirements: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
93
|
- - ">="
|
@@ -124,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
130
|
- !ruby/object:Gem::Version
|
125
131
|
version: '0'
|
126
132
|
requirements: []
|
127
|
-
|
128
|
-
rubygems_version: 2.7.6
|
133
|
+
rubygems_version: 3.2.29
|
129
134
|
signing_key:
|
130
135
|
specification_version: 4
|
131
136
|
summary: DatadogLogs lets you send logs to Datadog based on LogStash events.
|