|
9 | 9 | require "zlib"
|
10 | 10 | require "fluent/plugin/output"
|
11 | 11 |
|
| 12 | +require_relative "version" |
| 13 | + |
12 | 14 | class Fluent::DatadogOutput < Fluent::Plugin::Output
|
13 | 15 | class RetryableError < StandardError;
|
14 | 16 | end
|
@@ -50,6 +52,7 @@ class RetryableError < StandardError;
|
50 | 52 | config_param :compression_level, :integer, :default => 6
|
51 | 53 | config_param :no_ssl_validation, :bool, :default => false
|
52 | 54 | config_param :http_proxy, :string, :default => nil
|
| 55 | + config_param :force_v1_routes, :bool, :default => false |
53 | 56 |
|
54 | 57 | # Format settings
|
55 | 58 | config_param :use_json, :bool, :default => true
|
@@ -89,7 +92,7 @@ def formatted_to_msgpack_binary?
|
89 | 92 |
|
90 | 93 | def start
|
91 | 94 | super
|
92 |
| - @client = new_client(log, @api_key, @use_http, @use_ssl, @no_ssl_validation, @host, @ssl_port, @port, @http_proxy, @use_compression) |
| 95 | + @client = new_client(log, @api_key, @use_http, @use_ssl, @no_ssl_validation, @host, @ssl_port, @port, @http_proxy, @use_compression, @force_v1_routes) |
93 | 96 | end
|
94 | 97 |
|
95 | 98 | def shutdown
|
@@ -261,9 +264,9 @@ def gzip_compress(payload, compression_level)
|
261 | 264 | end
|
262 | 265 |
|
263 | 266 | # Build a new transport client
|
264 |
| - def new_client(logger, api_key, use_http, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression) |
| 267 | + def new_client(logger, api_key, use_http, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, force_v1_routes) |
265 | 268 | if use_http
|
266 |
| - DatadogHTTPClient.new logger, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, api_key |
| 269 | + DatadogHTTPClient.new logger, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, api_key, force_v1_routes |
267 | 270 | else
|
268 | 271 | DatadogTCPClient.new logger, use_ssl, no_ssl_validation, host, ssl_port, port
|
269 | 272 | end
|
@@ -301,20 +304,29 @@ class DatadogHTTPClient < DatadogClient
|
301 | 304 | require 'net/http'
|
302 | 305 | require 'net/http/persistent'
|
303 | 306 |
|
304 |
| - def initialize(logger, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, api_key) |
| 307 | + def initialize(logger, use_ssl, no_ssl_validation, host, ssl_port, port, http_proxy, use_compression, api_key, force_v1_routes = false) |
305 | 308 | @logger = logger
|
306 | 309 | protocol = use_ssl ? "https" : "http"
|
307 | 310 | port = use_ssl ? ssl_port : port
|
308 |
| - @uri = URI("#{protocol}://#{host}:#{port.to_s}/v1/input/#{api_key}") |
| 311 | + if force_v1_routes |
| 312 | + @uri = URI("#{protocol}://#{host}:#{port.to_s}/v1/input/#{api_key}") |
| 313 | + else |
| 314 | + @uri = URI("#{protocol}://#{host}:#{port.to_s}/api/v2/logs") |
| 315 | + end |
309 | 316 | proxy_uri = :ENV
|
310 | 317 | if http_proxy
|
311 | 318 | proxy_uri = URI.parse(http_proxy)
|
312 | 319 | elsif ENV['HTTP_PROXY'] || ENV['http_proxy']
|
313 | 320 | logger.info("Using HTTP proxy defined in `HTTP_PROXY`/`http_proxy` env vars")
|
314 | 321 | end
|
315 |
| - logger.info("Starting HTTP connection to #{protocol}://#{host}:#{port.to_s} with compression " + (use_compression ? "enabled" : "disabled")) |
| 322 | + logger.info("Starting HTTP connection to #{protocol}://#{host}:#{port.to_s} with compression " + (use_compression ? "enabled" : "disabled") + (force_v1_routes ? " using v1 routes" : " using v2 routes")) |
316 | 323 | @client = Net::HTTP::Persistent.new name: "fluent-plugin-datadog-logcollector", proxy: proxy_uri
|
317 | 324 | @client.verify_mode = OpenSSL::SSL::VERIFY_NONE if no_ssl_validation
|
| 325 | + unless force_v1_routes |
| 326 | + @client.override_headers["DD-API-KEY"] = api_key |
| 327 | + @client.override_headers["DD-EVP-ORIGIN"] = "fluent" |
| 328 | + @client.override_headers["DD-EVP-ORIGIN-VERSION"] = Datadog::FluentPlugin::GEM_VERSION |
| 329 | + end |
318 | 330 | @client.override_headers["Content-Type"] = "application/json"
|
319 | 331 | if use_compression
|
320 | 332 | @client.override_headers["Content-Encoding"] = "gzip"
|
|
0 commit comments