From d6f509e869d4e1f84066a1bdc621dad625497626 Mon Sep 17 00:00:00 2001 From: Thomas Casteleyn Date: Mon, 18 Dec 2023 14:46:15 +0100 Subject: [PATCH] fix(outputs.bigquery): Ignore fields containing NaN or infinity (#14458) --- plugins/outputs/bigquery/bigquery.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/outputs/bigquery/bigquery.go b/plugins/outputs/bigquery/bigquery.go index 06b469aeb..3802c9ff6 100644 --- a/plugins/outputs/bigquery/bigquery.go +++ b/plugins/outputs/bigquery/bigquery.go @@ -7,6 +7,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "reflect" "strings" "sync" @@ -187,7 +188,18 @@ func (s *BigQuery) newCompactValuesSaver(m telegraf.Metric) (*bigquery.ValuesSav return nil, fmt.Errorf("serializing tags: %w", err) } - fields, err := json.Marshal(m.Fields()) + rawFields := make(map[string]interface{}, len(m.FieldList())) + for _, field := range m.FieldList() { + if fv, ok := field.Value.(float64); ok { + // JSON does not support these special values + if math.IsNaN(fv) || math.IsInf(fv, 0) { + s.Log.Debugf("Ignoring unsupported field %s with value %q for metric %s", field.Key, field.Value, m.Name()) + continue + } + } + rawFields[field.Key] = field.Value + } + fields, err := json.Marshal(rawFields) if err != nil { return nil, fmt.Errorf("serializing fields: %w", err) }