stripe / veneur

A distributed, fault-tolerant pipeline for observability data
MIT License
1.73k stars 174 forks source link

DogStatsD protocol >= v1.2 support #1066

Open chollinger93 opened 3 months ago

chollinger93 commented 3 months ago

Issue

It appears that stripe/veneur:latest doesn't support DogStatsD protocol v.1.2

Repro

# pip3 install datadog==0.49.1
# unset DD_ORIGIN_DETECTION_ENABLED # <= default
from datadog.dogstatsd.base import DogStatsd
client: DogStatsd = DogStatsd(host=host, port=port)
client.open_buffer()
client.gauge("test", value=1, tags=["env:dev"])
client.flush()

Or

// go get github.com/DataDog/datadog-go/v5/statsd

import (
        "github.com/DataDog/datadog-go/v5/statsd"
)

func main() {
    client, err := statsd.New("host:port")
    if err != nil {
        panic(err)
    }
        err = client.Count("test", 1, []string{"env:dev"}, 1)
    if err != nil {
        panic(err)
    }
    client.Flush()
}

Will produce a package like

test:1|g|#env:dev|c:2688d562f64906640e73a13ef6bf784310d9498072d4d19360c459192942f190

Which veneur will not process

ime="2024-05-29T20:25:34Z" level=debug msg="Could not parse packet" error="Invalid metric packet, contains unknown section \"c:2688d562f64906640e73a13ef6bf784310d9498072d4d19360c459192942f190\"" packet="test:1|g|#env:dev|c:2688d562f64906640e73a13ef6bf784310d9498072d4d19360c459192942f190"

Versions <= 0.44.1 (Python) and != github.com/DataDog/datadog-go/v5/statsd in go produce a simpler payload:

test:1|g|#env:dev

Which works like expected.

Explicitly setting DD_ORIGIN_DETECTION_ENABLED=false seems to work too.

Not sure if this is expected or if there's a setting for this. If not, it would be great to have