Skip to content

Commit 58dc88d

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Adds OpenTelemetry source support for metrics pipelines (#3238)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent b4117b6 commit 58dc88d

File tree

6 files changed

+119
-2
lines changed

6 files changed

+119
-2
lines changed

.generator/schemas/v2/openapi.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44821,7 +44821,7 @@ components:
4482144821
Protocol (OTLP) over gRPC and HTTP.
4482244822

4482344823

44824-
**Supported pipeline types:** logs'
44824+
**Supported pipeline types:** logs, metrics'
4482544825
properties:
4482644826
grpc_address_key:
4482744827
description: Environment variable name containing the gRPC server address
@@ -44851,6 +44851,7 @@ components:
4485144851
type: object
4485244852
x-pipeline-types:
4485344853
- logs
44854+
- metrics
4485444855
ObservabilityPipelineOpentelemetrySourceType:
4485544856
default: opentelemetry
4485644857
description: The source type. The value should always be `opentelemetry`.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
"""
2+
Validate a metrics pipeline with opentelemetry source returns "OK" response
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v2.api.observability_pipelines_api import ObservabilityPipelinesApi
7+
from datadog_api_client.v2.model.observability_pipeline_config import ObservabilityPipelineConfig
8+
from datadog_api_client.v2.model.observability_pipeline_config_pipeline_type import (
9+
ObservabilityPipelineConfigPipelineType,
10+
)
11+
from datadog_api_client.v2.model.observability_pipeline_config_processor_group import (
12+
ObservabilityPipelineConfigProcessorGroup,
13+
)
14+
from datadog_api_client.v2.model.observability_pipeline_data_attributes import ObservabilityPipelineDataAttributes
15+
from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import (
16+
ObservabilityPipelineDatadogMetricsDestination,
17+
)
18+
from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination_type import (
19+
ObservabilityPipelineDatadogMetricsDestinationType,
20+
)
21+
from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor
22+
from datadog_api_client.v2.model.observability_pipeline_filter_processor_type import (
23+
ObservabilityPipelineFilterProcessorType,
24+
)
25+
from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import (
26+
ObservabilityPipelineOpentelemetrySource,
27+
)
28+
from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source_type import (
29+
ObservabilityPipelineOpentelemetrySourceType,
30+
)
31+
from datadog_api_client.v2.model.observability_pipeline_spec import ObservabilityPipelineSpec
32+
from datadog_api_client.v2.model.observability_pipeline_spec_data import ObservabilityPipelineSpecData
33+
34+
body = ObservabilityPipelineSpec(
35+
data=ObservabilityPipelineSpecData(
36+
attributes=ObservabilityPipelineDataAttributes(
37+
config=ObservabilityPipelineConfig(
38+
pipeline_type=ObservabilityPipelineConfigPipelineType.METRICS,
39+
destinations=[
40+
ObservabilityPipelineDatadogMetricsDestination(
41+
id="datadog-metrics-destination",
42+
inputs=[
43+
"my-processor-group",
44+
],
45+
type=ObservabilityPipelineDatadogMetricsDestinationType.DATADOG_METRICS,
46+
),
47+
],
48+
processor_groups=[
49+
ObservabilityPipelineConfigProcessorGroup(
50+
enabled=True,
51+
id="my-processor-group",
52+
include="*",
53+
inputs=[
54+
"opentelemetry-source",
55+
],
56+
processors=[
57+
ObservabilityPipelineFilterProcessor(
58+
enabled=True,
59+
id="filter-processor",
60+
include="env:production",
61+
type=ObservabilityPipelineFilterProcessorType.FILTER,
62+
),
63+
],
64+
),
65+
],
66+
sources=[
67+
ObservabilityPipelineOpentelemetrySource(
68+
id="opentelemetry-source",
69+
type=ObservabilityPipelineOpentelemetrySourceType.OPENTELEMETRY,
70+
),
71+
],
72+
),
73+
name="Metrics OTel Pipeline",
74+
),
75+
type="pipelines",
76+
),
77+
)
78+
79+
configuration = Configuration()
80+
with ApiClient(configuration) as api_client:
81+
api_instance = ObservabilityPipelinesApi(api_client)
82+
response = api_instance.validate_pipeline(body=body)
83+
84+
print(response)

src/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def __init__(
5656
"""
5757
The ``opentelemetry`` source receives telemetry data using the OpenTelemetry Protocol (OTLP) over gRPC and HTTP.
5858
59-
**Supported pipeline types:** logs
59+
**Supported pipeline types:** logs, metrics
6060
6161
:param grpc_address_key: Environment variable name containing the gRPC server address for receiving OTLP data. Must be a valid environment variable name (alphanumeric characters and underscores only).
6262
:type grpc_address_key: str, optional
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2026-03-10T16:11:47.487Z
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
interactions:
2+
- request:
3+
body: '{"data":{"attributes":{"config":{"destinations":[{"id":"datadog-metrics-destination","inputs":["my-processor-group"],"type":"datadog_metrics"}],"pipeline_type":"metrics","processor_groups":[{"enabled":true,"id":"my-processor-group","include":"*","inputs":["opentelemetry-source"],"processors":[{"enabled":true,"id":"filter-processor","include":"env:production","type":"filter"}]}],"sources":[{"id":"opentelemetry-source","type":"opentelemetry"}]},"name":"Metrics
4+
OTel Pipeline"},"type":"pipelines"}}'
5+
headers:
6+
accept:
7+
- application/json
8+
content-type:
9+
- application/json
10+
method: POST
11+
uri: https://api.datadoghq.com/api/v2/obs-pipelines/pipelines/validate
12+
response:
13+
body:
14+
string: '{"errors":[]}
15+
16+
'
17+
headers:
18+
content-type:
19+
- application/vnd.api+json
20+
status:
21+
code: 200
22+
message: OK
23+
version: 1

tests/v2/features/observability_pipelines.feature

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ Feature: Observability Pipelines
149149
And the response "data.attributes.config.destinations" has length 1
150150
And the response "data.attributes.config.destinations[0].id" is equal to "updated-datadog-logs-destination-id"
151151

152+
@team:DataDog/observability-pipelines
153+
Scenario: Validate a metrics pipeline with opentelemetry source returns "OK" response
154+
Given new "ValidatePipeline" request
155+
And body with value {"data": {"attributes": {"config": {"pipeline_type": "metrics", "destinations": [{"id": "datadog-metrics-destination", "inputs": ["my-processor-group"], "type": "datadog_metrics"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "*", "inputs": ["opentelemetry-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "env:production", "type": "filter"}]}], "sources": [{"id": "opentelemetry-source", "type": "opentelemetry"}]}, "name": "Metrics OTel Pipeline"}, "type": "pipelines"}}
156+
When the request is sent
157+
Then the response status is 200 OK
158+
And the response "errors" has length 0
159+
152160
@team:DataDog/observability-pipelines
153161
Scenario: Validate an observability pipeline returns "Bad Request" response
154162
Given new "ValidatePipeline" request

0 commit comments

Comments
 (0)