From dd0c04b6e234af3332d7cf5eef004292a6527b4d Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Fri, 12 May 2017 15:34:05 -0700 Subject: [PATCH] Only split metrics if there is an udp output (#2799) --- plugins/outputs/influxdb/influxdb.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/outputs/influxdb/influxdb.go b/plugins/outputs/influxdb/influxdb.go index d127d3fb4..e44af7a79 100644 --- a/plugins/outputs/influxdb/influxdb.go +++ b/plugins/outputs/influxdb/influxdb.go @@ -2,6 +2,7 @@ package influxdb import ( "fmt" + "io" "log" "math/rand" "strings" @@ -41,7 +42,8 @@ type InfluxDB struct { // Precision is only here for legacy support. It will be ignored. Precision string - clients []client.Client + clients []client.Client + splitPayload bool } var sampleConfig = ` @@ -109,6 +111,7 @@ func (i *InfluxDB) Connect() error { return fmt.Errorf("Error creating UDP Client [%s]: %s", u, err) } i.clients = append(i.clients, c) + i.splitPayload = true default: // If URL doesn't start with "udp", assume HTTP client config := client.HTTPConfig{ @@ -159,17 +162,26 @@ func (i *InfluxDB) Description() string { return "Configuration for influxdb server to send metrics to" } +func (i *InfluxDB) getReader(metrics []telegraf.Metric) io.Reader { + if !i.splitPayload { + return metric.NewReader(metrics) + } + + splitData := make([]telegraf.Metric, 0) + for _, m := range metrics { + splitData = append(splitData, m.Split(i.UDPPayload)...) + } + return metric.NewReader(splitData) +} + // Write will choose a random server in the cluster to write to until a successful write // occurs, logging each unsuccessful. If all servers fail, return error. func (i *InfluxDB) Write(metrics []telegraf.Metric) error { bufsize := 0 - splitData := make([]telegraf.Metric, 0) - for _, m := range metrics { bufsize += m.Len() - splitData = append(splitData, m.Split(i.UDPPayload)...) } - r := metric.NewReader(splitData) + r := i.getReader(metrics) // This will get set to nil if a successful write occurs err := fmt.Errorf("Could not write to any InfluxDB server in cluster")