Replace colon chars in prometheus output labels with metric_version=1 (#6781)

This commit is contained in:
Daniel Nelson
2019-12-10 12:59:16 -08:00
committed by GitHub
parent eb00f41905
commit aabc7e7d4f
3 changed files with 57 additions and 6 deletions

View File

@@ -103,6 +103,34 @@ cpu_time_idle{host="example.org"} 42
# HELP cpu_time_idle Telegraf collected metric
# TYPE cpu_time_idle counter
cpu_time_idle{host="example.org"} 42
`),
},
{
name: "replace characters when using string as label",
output: &PrometheusClient{
Listen: ":0",
MetricVersion: 1,
CollectorsExclude: []string{"gocollector", "process"},
Path: "/metrics",
StringAsLabel: true,
Log: Logger,
},
metrics: []telegraf.Metric{
testutil.MustMetric(
"cpu_time_idle",
map[string]string{},
map[string]interface{}{
"host:name": "example.org",
"counter": 42.0,
},
time.Unix(0, 0),
telegraf.Counter,
),
},
expected: []byte(`
# HELP cpu_time_idle Telegraf collected metric
# TYPE cpu_time_idle counter
cpu_time_idle{host_name="example.org"} 42
`),
},
{

View File

@@ -10,6 +10,7 @@ import (
"time"
"github.com/influxdata/telegraf"
serializer "github.com/influxdata/telegraf/plugins/serializers/prometheus"
"github.com/prometheus/client_golang/prometheus"
)
@@ -201,11 +202,11 @@ func (c *Collector) Add(metrics []telegraf.Metric) error {
labels := make(map[string]string)
for k, v := range tags {
tName := sanitize(k)
if !isValidTagName(tName) {
name, ok := serializer.SanitizeLabelName(k)
if !ok {
continue
}
labels[tName] = v
labels[name] = v
}
// Prometheus doesn't have a string value type, so convert string
@@ -214,11 +215,11 @@ func (c *Collector) Add(metrics []telegraf.Metric) error {
for fn, fv := range point.Fields() {
switch fv := fv.(type) {
case string:
tName := sanitize(fn)
if !isValidTagName(tName) {
name, ok := serializer.SanitizeLabelName(fn)
if !ok {
continue
}
labels[tName] = fv
labels[name] = fv
}
}
}