open-telemetry / opentelemetry-collector-contrib

Contrib repository for the OpenTelemetry Collector
https://opentelemetry.io
Apache License 2.0
3.06k stars 2.36k forks source link

[receiver/datadogreceiver] api/v2/series does not seem to support the datadog api client libraries #36079

Open jdgeisler opened 1 week ago

jdgeisler commented 1 week ago

Component(s)

receiver/datadog

What happened?

Description

We are using datadog api client libraries, such as the python library, to ship metrics to the /api/v2/series endpoint.

We have verified that the v2 api spec and request that we are sending is correct according to the datadog documentation, however we are getting 400 response errors such as proto: illegal wireType 6 and proto: wrong wireType = 0 for field Points

When using the api/v1/series instead, we are able to successfully ship metrics using the datadog client api library.

Looking in our logs and at the code, we see that these requests are likely failing here https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/datadogreceiver/internal/translator/series.go#L38-L41.

pl := new(gogen.MetricPayload)
if err := pl.Unmarshal(buf.Bytes()); err != nil {
    return mp, err
}

This could be because it is trying to unmarshal directly into a protobuf message from the datadog agent payload, but this fails because the datadog api request body is json.

Steps to Reproduce

  1. Try to ship metrics to the api/v2/series endpoint using the datadog api client library. Here is an example using the python library
  2. See that a 400 response is returned with the above protobuf errors

Expected Result

The api/v2/series endpoint can accept json requests from the datadog api client libraries

Actual Result

Metric requests to the api/v2/series endpoint from the datadog api client library fail with the above protobuf errors.

Collector version

v0.112.0

Environment information

Environment

OpenTelemetry Collector configuration

No response

Log output

2024-10-29 15:10:38.689 
2024-10-29T20:10:38.689Z    info    Metrics {"kind": "exporter", "data_type": "metrics", "name": "debug", "resource metrics": 1, "metrics": 23, "data points": 27}
2024-10-29 15:10:31.566 
    net/http/server.go:2092
2024-10-29 15:10:31.566 
net/http.(*conn).serve
2024-10-29 15:10:31.566 
    net/http/server.go:3210
2024-10-29 15:10:31.566 
net/http.serverHandler.ServeHTTP
2024-10-29 15:10:31.566 
    go.opentelemetry.io/collector/config/confighttp@v0.112.0/clientinfohandler.go:26
2024-10-29 15:10:31.566 
go.opentelemetry.io/collector/config/confighttp.(*clientInfoHandler).ServeHTTP
2024-10-29 15:10:31.566 
    net/http/server.go:2220
2024-10-29 15:10:31.566 
net/http.HandlerFunc.ServeHTTP
2024-10-29 15:10:31.566 
    go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.56.0/handler.go:65
2024-10-29 15:10:31.566 
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.NewMiddleware.func1.1
2024-10-29 15:10:31.566 
    go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.56.0/handler.go:171
2024-10-29 15:10:31.566 
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*middleware).serveHTTP
2024-10-29 15:10:31.566 
    net/http/server.go:2220
2024-10-29 15:10:31.566 
net/http.HandlerFunc.ServeHTTP
2024-10-29 15:10:31.566 
    go.opentelemetry.io/collector/config/confighttp@v0.112.0/confighttp.go:553
2024-10-29 15:10:31.566 
go.opentelemetry.io/collector/config/confighttp.(*ServerConfig).ToServer.maxRequestBodySizeInterceptor.func2
2024-10-29 15:10:31.566 
    go.opentelemetry.io/collector/config/confighttp@v0.112.0/compression.go:175
2024-10-29 15:10:31.566 
go.opentelemetry.io/collector/config/confighttp.(*decompressor).ServeHTTP
2024-10-29 15:10:31.566 
    net/http/server.go:2747
2024-10-29 15:10:31.566 
net/http.(*ServeMux).ServeHTTP
2024-10-29 15:10:31.566 
    net/http/server.go:2220
2024-10-29 15:10:31.566 
net/http.HandlerFunc.ServeHTTP
2024-10-29 15:10:31.566 
    github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver@v0.112.0/receiver.go:305
2024-10-29 15:10:31.566 
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver.(*datadogReceiver).handleV2Series
2024-10-29 15:10:31.566 
2024-10-29T20:10:31.566Z    error   datadogreceiver@v0.112.0/receiver.go:305    proto: illegal wireType 6

Additional context

No response

github-actions[bot] commented 1 week ago

Pinging code owners: