class LogStash::Outputs::Dynatrace
An output which sends logs to the Dynatrace
log ingest v2 endpoint formatted as JSON
Attributes
plugin_version[RW]
uri[RW]
Public Instance Methods
headers()
click to toggle source
# 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)
click to toggle source
Takes an array of events
# 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 failure_message = "Dynatrace returned #{response.code} #{response.message}." if response.is_a? Net::HTTPServerError raise RetryableError.new failure_message 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(failure_message) 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()
click to toggle source
# 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)
click to toggle source
# File lib/logstash/outputs/dynatrace.rb, line 110 def send(request) @client.request(request) end