mirror of
https://github.com/prometheus/statsd_exporter.git
synced 2024-11-26 09:11:01 +00:00
Merge pull request #264 from amitsaha/issue-250
Support sampling factor for all statsd metric types
This commit is contained in:
commit
1865ea1be3
2 changed files with 75 additions and 7 deletions
|
@ -46,6 +46,16 @@ func TestHandlePacket(t *testing.T) {
|
||||||
labels: map[string]string{},
|
labels: map[string]string{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
name: "gauge with sampling",
|
||||||
|
in: "foo:3|g|@0.2",
|
||||||
|
out: Events{
|
||||||
|
&GaugeEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 3,
|
||||||
|
labels: map[string]string{},
|
||||||
|
},
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "gauge decrement",
|
name: "gauge decrement",
|
||||||
in: "foo:-10|g",
|
in: "foo:-10|g",
|
||||||
|
@ -87,6 +97,36 @@ func TestHandlePacket(t *testing.T) {
|
||||||
labels: map[string]string{},
|
labels: map[string]string{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
name: "distribution with sampling",
|
||||||
|
in: "foo:0.01|d|@0.2|#tag1:bar,#tag2:baz",
|
||||||
|
out: Events{
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "datadog tag extension",
|
name: "datadog tag extension",
|
||||||
in: "foo:100|c|#tag1:bar,tag2:baz",
|
in: "foo:100|c|#tag1:bar,tag2:baz",
|
||||||
|
@ -157,6 +197,36 @@ func TestHandlePacket(t *testing.T) {
|
||||||
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
name: "histogram with sampling",
|
||||||
|
in: "foo:0.01|h|@0.2|#tag1:bar,#tag2:baz",
|
||||||
|
out: Events{
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
&TimerEvent{
|
||||||
|
metricName: "foo",
|
||||||
|
value: 0.01,
|
||||||
|
labels: map[string]string{"tag1": "bar", "tag2": "baz"},
|
||||||
|
},
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "datadog tag extension with multiple colons",
|
name: "datadog tag extension with multiple colons",
|
||||||
in: "foo:100|c|@0.1|#tag1:foo:bar",
|
in: "foo:100|c|@0.1|#tag1:foo:bar",
|
||||||
|
|
12
exporter.go
12
exporter.go
|
@ -389,11 +389,7 @@ samples:
|
||||||
for _, component := range components[2:] {
|
for _, component := range components[2:] {
|
||||||
switch component[0] {
|
switch component[0] {
|
||||||
case '@':
|
case '@':
|
||||||
if statType != "c" && statType != "ms" {
|
|
||||||
log.Debugln("Illegal sampling factor for non-counter metric on line", line)
|
|
||||||
sampleErrors.WithLabelValues("illegal_sample_factor").Inc()
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
samplingFactor, err = strconv.ParseFloat(component[1:], 64)
|
samplingFactor, err = strconv.ParseFloat(component[1:], 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("Invalid sampling factor %s on line %s", component[1:], line)
|
log.Debugf("Invalid sampling factor %s on line %s", component[1:], line)
|
||||||
|
@ -403,9 +399,11 @@ samples:
|
||||||
samplingFactor = 1
|
samplingFactor = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if statType == "c" {
|
if statType == "g" {
|
||||||
|
continue
|
||||||
|
} else if statType == "c" {
|
||||||
value /= samplingFactor
|
value /= samplingFactor
|
||||||
} else if statType == "ms" {
|
} else if statType == "ms" || statType == "h" || statType == "d" {
|
||||||
multiplyEvents = int(1 / samplingFactor)
|
multiplyEvents = int(1 / samplingFactor)
|
||||||
}
|
}
|
||||||
case '#':
|
case '#':
|
||||||
|
|
Loading…
Reference in a new issue