Class: LogStash::Outputs::Dynatrace
- Inherits:
-
Base
- Object
- Base
- LogStash::Outputs::Dynatrace
- Defined in:
- lib/logstash/outputs/dynatrace.rb
Overview
An output which sends logs to the Dynatrace log ingest v2 endpoint formatted as JSON
Instance Attribute Summary collapse
-
#plugin_version ⇒ Object
Returns the value of attribute plugin_version.
-
#uri ⇒ Object
Returns the value of attribute uri.
Instance Method Summary collapse
- #headers ⇒ Object
-
#multi_receive(events) ⇒ Object
Takes an array of events.
- #register ⇒ Object
- #send(request) ⇒ Object
Instance Attribute Details
#plugin_version ⇒ Object
Returns the value of attribute plugin_version.
47 48 49 |
# File 'lib/logstash/outputs/dynatrace.rb', line 47 def plugin_version @plugin_version end |
#uri ⇒ Object
Returns the value of attribute uri.
47 48 49 |
# File 'lib/logstash/outputs/dynatrace.rb', line 47 def uri @uri end |
Instance Method Details
#headers ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/logstash/outputs/dynatrace.rb', line 62 def headers { 'User-Agent' => "logstash-output-dynatrace v#{@plugin_version}", 'Content-Type' => 'application/json; charset=utf-8', 'Authorization' => "Api-Token #{@api_key}" } end |
#multi_receive(events) ⇒ Object
Takes an array of events
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/logstash/outputs/dynatrace.rb', line 71 def multi_receive(events) return if events.length.zero? retries = 0 begin request = Net::HTTP::Post.new(uri, headers) request.body = "#{LogStash::Json.dump(events.map(&:to_hash)).chomp}\n" response = send(request) return if response.is_a? Net::HTTPSuccess = "Dynatrace returned #{response.code} #{response.message}." if response.is_a? Net::HTTPServerError raise RetryableError.new end if response.is_a? Net::HTTPNotFound @logger.error("#{failure_message} Please check that log ingest is enabled and your API token has the `logs.ingest` (Ingest Logs) scope.") return end if response.is_a? Net::HTTPClientError @logger.error() return end rescue Net::HTTPBadResponse, RetryableError => e # indicates a protocol error if retries < MAX_RETRIES sleep_seconds = 2 ** retries @logger.warn("Failed to contact dynatrace: #{e.message}. Trying again after #{sleep_seconds} seconds.") sleep sleep_seconds retries += 1 retry else @logger.error("Failed to export logs to Dynatrace.") end end end |
#register ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/logstash/outputs/dynatrace.rb', line 49 def register require 'net/https' require 'uri' @uri = URI.parse(@ingest_endpoint_url.uri.to_s) @client = Net::HTTP.new(@uri.host, @uri.port) if uri.scheme == 'https' @client.use_ssl = true @client.verify_mode = OpenSSL::SSL::VERIFY_NONE if @ssl_verify_none end @logger.info('Client', client: @client.inspect) end |
#send(request) ⇒ Object
110 111 112 |
# File 'lib/logstash/outputs/dynatrace.rb', line 110 def send(request) @client.request(request) end |