class LogStash::Outputs::DatadogMetrics
Default queue_size and timeframe are low in order to provide near realtime alerting. If you do not use Datadog for alerting, consider raising these thresholds.
Public Instance Methods
flush(events, final=false)
click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 92 def flush(events, final=false) dd_series = Hash.new dd_series['series'] = [] events.each do |event| begin dd_series['series'] << event rescue @logger.warn("Error adding event to series!", :exception => e) next end end request = Net::HTTP::Post.new("#{@uri.path}?api_key=#{@api_key}") begin request.body = dd_series.to_json request.add_field("Content-Type", 'application/json') response = @client.request(request) @logger.info("DD convo", :request => request.inspect, :response => response.inspect) raise unless response.code == '202' rescue Exception => e @logger.warn("Unhandled exception", :request => request.inspect, :response => response.inspect, :exception => e.inspect) end end
receive(event)
click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 68 def receive(event) return unless output?(event) return unless @metric_name && @metric_value && @metric_type return unless ["gauge", "counter"].include? event.sprintf(@metric_type) dd_metrics = Hash.new dd_metrics['metric'] = event.sprintf(@metric_name) dd_metrics['points'] = [[to_epoch(event.timestamp), event.sprintf(@metric_value).to_f]] dd_metrics['type'] = event.sprintf(@metric_type) dd_metrics['host'] = event.sprintf(@host) dd_metrics['device'] = event.sprintf(@device) if @dd_tags tagz = @dd_tags.collect {|x| event.sprintf(x) } else tagz = event["tags"] end dd_metrics['tags'] = tagz if tagz @logger.info("Queueing event", :event => dd_metrics) buffer_receive(dd_metrics) end
register()
click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 49 def register require 'time' require "net/https" require "uri" @url = "https://app.datadoghq.com/api/v1/series" @uri = URI.parse(@url) @client = Net::HTTP.new(@uri.host, @uri.port) @client.use_ssl = true @client.verify_mode = OpenSSL::SSL::VERIFY_NONE @logger.debug("Client", :client => @client.inspect) buffer_initialize( :max_items => @queue_size, :max_interval => @timeframe, :logger => @logger ) end
Private Instance Methods
to_epoch(t)
click to toggle source
# File lib/logstash/outputs/datadog_metrics.rb, line 119 def to_epoch(t) return t.is_a?(Time) ? t.to_i : Time.parse(t).to_i end