Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .generator/schemas/v2/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44821,7 +44821,7 @@ components:
Protocol (OTLP) over gRPC and HTTP.


**Supported pipeline types:** logs'
**Supported pipeline types:** logs, metrics'
properties:
grpc_address_key:
description: Environment variable name containing the gRPC server address
Expand Down Expand Up @@ -44851,6 +44851,7 @@ components:
type: object
x-pipeline-types:
- logs
- metrics
ObservabilityPipelineOpentelemetrySourceType:
default: opentelemetry
description: The source type. The value should always be `opentelemetry`.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Validate a metrics pipeline with opentelemetry source returns "OK" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.ObservabilityPipelinesApi;
import com.datadog.api.client.v2.model.ObservabilityPipelineConfig;
import com.datadog.api.client.v2.model.ObservabilityPipelineConfigDestinationItem;
import com.datadog.api.client.v2.model.ObservabilityPipelineConfigPipelineType;
import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorGroup;
import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorItem;
import com.datadog.api.client.v2.model.ObservabilityPipelineConfigSourceItem;
import com.datadog.api.client.v2.model.ObservabilityPipelineDataAttributes;
import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogMetricsDestination;
import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogMetricsDestinationType;
import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessor;
import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessorType;
import com.datadog.api.client.v2.model.ObservabilityPipelineOpentelemetrySource;
import com.datadog.api.client.v2.model.ObservabilityPipelineOpentelemetrySourceType;
import com.datadog.api.client.v2.model.ObservabilityPipelineSpec;
import com.datadog.api.client.v2.model.ObservabilityPipelineSpecData;
import com.datadog.api.client.v2.model.ValidationResponse;
import java.util.Collections;

public class Example {
public static void main(String[] args) {
ApiClient defaultClient = ApiClient.getDefaultApiClient();
ObservabilityPipelinesApi apiInstance = new ObservabilityPipelinesApi(defaultClient);

ObservabilityPipelineSpec body =
new ObservabilityPipelineSpec()
.data(
new ObservabilityPipelineSpecData()
.attributes(
new ObservabilityPipelineDataAttributes()
.config(
new ObservabilityPipelineConfig()
.pipelineType(ObservabilityPipelineConfigPipelineType.METRICS)
.destinations(
Collections.singletonList(
new ObservabilityPipelineConfigDestinationItem(
new ObservabilityPipelineDatadogMetricsDestination()
.id("datadog-metrics-destination")
.inputs(
Collections.singletonList(
"my-processor-group"))
.type(
ObservabilityPipelineDatadogMetricsDestinationType
.DATADOG_METRICS))))
.processorGroups(
Collections.singletonList(
new ObservabilityPipelineConfigProcessorGroup()
.enabled(true)
.id("my-processor-group")
.include("*")
.inputs(
Collections.singletonList(
"opentelemetry-source"))
.processors(
Collections.singletonList(
new ObservabilityPipelineConfigProcessorItem(
new ObservabilityPipelineFilterProcessor()
.enabled(true)
.id("filter-processor")
.include("env:production")
.type(
ObservabilityPipelineFilterProcessorType
.FILTER))))))
.sources(
Collections.singletonList(
new ObservabilityPipelineConfigSourceItem(
new ObservabilityPipelineOpentelemetrySource()
.id("opentelemetry-source")
.type(
ObservabilityPipelineOpentelemetrySourceType
.OPENTELEMETRY)))))
.name("Metrics OTel Pipeline"))
.type("pipelines"));

try {
ValidationResponse result = apiInstance.validatePipeline(body);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ObservabilityPipelinesApi#validatePipeline");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
* The <code>opentelemetry</code> source receives telemetry data using the OpenTelemetry Protocol
* (OTLP) over gRPC and HTTP.
*
* <p><strong>Supported pipeline types:</strong> logs
* <p><strong>Supported pipeline types:</strong> logs, metrics
*/
@JsonPropertyOrder({
ObservabilityPipelineOpentelemetrySource.JSON_PROPERTY_GRPC_ADDRESS_KEY,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2026-03-10T16:11:47.487Z
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[
{
"httpRequest": {
"body": {
"type": "JSON",
"json": "{\"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 OTel Pipeline\"},\"type\":\"pipelines\"}}"
},
"headers": {},
"method": "POST",
"path": "/api/v2/obs-pipelines/pipelines/validate",
"keepAlive": false,
"secure": true
},
"httpResponse": {
"body": "{\"errors\":[]}\n",
"headers": {
"Content-Type": [
"application/vnd.api+json"
]
},
"statusCode": 200,
"reasonPhrase": "OK"
},
"times": {
"remainingTimes": 1
},
"timeToLive": {
"unlimited": true
},
"id": "fd62c635-471a-b911-f21d-26a9cd87afdc"
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,14 @@ Feature: Observability Pipelines
And the response "data.attributes.config.destinations" has length 1
And the response "data.attributes.config.destinations[0].id" is equal to "updated-datadog-logs-destination-id"

@team:DataDog/observability-pipelines
Scenario: Validate a metrics pipeline with opentelemetry source returns "OK" response
Given new "ValidatePipeline" request
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"}}
When the request is sent
Then the response status is 200 OK
And the response "errors" has length 0

@team:DataDog/observability-pipelines
Scenario: Validate an observability pipeline returns "Bad Request" response
Given new "ValidatePipeline" request
Expand Down
Loading