forked from mirrors/statsd_exporter
Drop metrics with mixed tagging styles
Signed-off-by: Tony Wooster <twooster@gmail.com>
This commit is contained in:
parent
e01507a57c
commit
0e000fe833
3 changed files with 26 additions and 18 deletions
14
README.md
14
README.md
|
@ -65,16 +65,12 @@ metric.name:0|c|#tagName=val,tag2Name=val2
|
||||||
See [Tags](https://docs.datadoghq.com/developers/dogstatsd/data_types/#tagging)
|
See [Tags](https://docs.datadoghq.com/developers/dogstatsd/data_types/#tagging)
|
||||||
in the DogStatsD documentation for the concept description and
|
in the DogStatsD documentation for the concept description and
|
||||||
[Datagram Format](https://docs.datadoghq.com/developers/dogstatsd/datagram_shell/).
|
[Datagram Format](https://docs.datadoghq.com/developers/dogstatsd/datagram_shell/).
|
||||||
Note that this tagging style is incompatible with the original `statsd`
|
If you encounter problems, note that this tagging style is incompatible with
|
||||||
implementation, you will be unable to use it as a repeater in front of the
|
the original `statsd` implementation.
|
||||||
statsd-to-prometheus exporter.
|
|
||||||
|
|
||||||
Although you can use both name-appended tags (Librato or InfluxDB) and
|
Be aware: If you mix tag styles (e.g., Librato/InfluxDB with DogStatsD), the
|
||||||
metric-appended tags simultaneously, this is not recommended. If you do, be
|
exporter will consider this an error and the sample will be discarded. Also,
|
||||||
aware that DogStatsD `name=value` pairs will take priority over Librato tags
|
tags without values (`#some_tag`) are not supported and will be ignored.
|
||||||
with the same name.
|
|
||||||
|
|
||||||
Tags without values (`#some_tag`) are not supported and will be dropped.
|
|
||||||
|
|
||||||
## Building and Running
|
## Building and Running
|
||||||
|
|
||||||
|
|
|
@ -238,15 +238,17 @@ func TestHandlePacket(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "librato and datadog tag extension with sampling",
|
name: "librato/dogstatsd mixed tag styles without sampling",
|
||||||
|
in: "foo#tag1=foo,tag3=bing:100|c|#tag1:bar,#tag2:baz",
|
||||||
|
out: Events{},
|
||||||
|
}, {
|
||||||
|
name: "influxdb/dogstatsd mixed tag styles without sampling",
|
||||||
|
in: "foo,tag1=foo,tag3=bing:100|c|#tag1:bar,#tag2:baz",
|
||||||
|
out: Events{},
|
||||||
|
}, {
|
||||||
|
name: "mixed tag styles with sampling",
|
||||||
in: "foo#tag1=foo,tag3=bing:100|c|@0.1|#tag1:bar,#tag2:baz",
|
in: "foo#tag1=foo,tag3=bing:100|c|@0.1|#tag1:bar,#tag2:baz",
|
||||||
out: Events{
|
out: Events{},
|
||||||
&CounterEvent{
|
|
||||||
metricName: "foo",
|
|
||||||
value: 1000,
|
|
||||||
labels: map[string]string{"tag1": "bar", "tag3": "bing", "tag2": "baz"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}, {
|
}, {
|
||||||
name: "histogram with sampling",
|
name: "histogram with sampling",
|
||||||
in: "foo:0.01|h|@0.2|#tag1:bar,#tag2:baz",
|
in: "foo:0.01|h|@0.2|#tag1:bar,#tag2:baz",
|
||||||
|
|
12
exporter.go
12
exporter.go
|
@ -399,9 +399,19 @@ func lineToEvents(line string) Events {
|
||||||
|
|
||||||
labels := map[string]string{}
|
labels := map[string]string{}
|
||||||
metric := parseNameAndLabels(elements[0], labels)
|
metric := parseNameAndLabels(elements[0], labels)
|
||||||
|
|
||||||
var samples []string
|
var samples []string
|
||||||
if strings.Contains(elements[1], "|#") {
|
if strings.Contains(elements[1], "|#") {
|
||||||
// using datadog extensions, disable multi-metrics
|
// using datadog extensions
|
||||||
|
|
||||||
|
// don't allow mixed tagging styles
|
||||||
|
if len(labels) > 0 {
|
||||||
|
sampleErrors.WithLabelValues("malformed_line").Inc()
|
||||||
|
log.Debugln("Bad line (multiple tagging styles) from StatsD:", line)
|
||||||
|
return events
|
||||||
|
}
|
||||||
|
|
||||||
|
// disable multi-metrics
|
||||||
samples = elements[1:]
|
samples = elements[1:]
|
||||||
} else {
|
} else {
|
||||||
samples = strings.Split(elements[1], ":")
|
samples = strings.Split(elements[1], ":")
|
||||||
|
|
Loading…
Reference in a new issue