From 7bffda448da28888fa88459a1ad51ddfc788cc94 Mon Sep 17 00:00:00 2001 From: Bruno Miranda Date: Fri, 29 May 2015 17:35:19 -0700 Subject: [PATCH 1/3] Don't append events to events collection if columns don't match. --- lib/logstash/outputs/influxdb.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/logstash/outputs/influxdb.rb b/lib/logstash/outputs/influxdb.rb index 8fdb87d..76a287b 100644 --- a/lib/logstash/outputs/influxdb.rb +++ b/lib/logstash/outputs/influxdb.rb @@ -176,7 +176,7 @@ def flush(events, teardown = false) begin if seen_series.has_key?(ev['name']) and (seen_series[ev['name']] == ev['columns']) @logger.info("Existing series data found. Appending points to that series") - event_collection.select {|h| h['points'] << ev['points'][0] if h['name'] == ev['name']} + event_collection.select {|h| h['points'] << ev['points'][0] if h['columns'] == ev['columns']} elsif seen_series.has_key?(ev['name']) and (seen_series[ev['name']] != ev['columns']) @logger.warn("Series '#{ev['name']}' has been seen but columns are different or in a different order. Adding to batch but not under existing series") @logger.warn("Existing series columns were: #{seen_series[ev['name']].join(",")} and event columns were: #{ev['columns'].join(",")}") From 8726faa225ab60042592beb8f5d1f633360c7436 Mon Sep 17 00:00:00 2001 From: Bruno Miranda Date: Fri, 29 May 2015 17:35:37 -0700 Subject: [PATCH 2/3] Exclude data_points that contain no data. --- lib/logstash/outputs/influxdb.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/logstash/outputs/influxdb.rb b/lib/logstash/outputs/influxdb.rb index 76a287b..45b83b3 100644 --- a/lib/logstash/outputs/influxdb.rb +++ b/lib/logstash/outputs/influxdb.rb @@ -128,6 +128,8 @@ def receive(event) event_hash['name'] = event.sprintf(@series) sprintf_points = Hash[@data_points.map {|k,v| [event.sprintf(k), event.sprintf(v)]}] + sprintf_points.delete_if{|_, v| v[0] == "%"} + if sprintf_points.has_key?('time') unless @allow_time_override logger.error("Cannot override value of time without 'allow_time_override'. Using event timestamp") From d9ab58c371f806d3e4bf6664e7f57bdd3a2e2de7 Mon Sep 17 00:00:00 2001 From: Bruno Miranda Date: Fri, 29 May 2015 22:50:37 -0700 Subject: [PATCH 3/3] Supports sprintf-formatting in column names. --- lib/logstash/outputs/influxdb.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/logstash/outputs/influxdb.rb b/lib/logstash/outputs/influxdb.rb index 45b83b3..30e5b14 100644 --- a/lib/logstash/outputs/influxdb.rb +++ b/lib/logstash/outputs/influxdb.rb @@ -65,7 +65,8 @@ class LogStash::Outputs::InfluxDB < LogStash::Outputs::Base # otherwise sprintf-filtered numeric values could get sent as strings # format is `{'column_name' => 'datatype'}` # - # currently supported datatypes are `integer` and `float` + # Currently supported datatypes are `integer` and `float` + # Supports sprintf-formatting in column names. # config :coerce_values, :validate => :hash, :default => {} @@ -140,6 +141,7 @@ def receive(event) end @coerce_values.each do |column, value_type| + column = event.sprintf(column) if sprintf_points.has_key?(column) begin case value_type