Skip to content
Open
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
13 changes: 13 additions & 0 deletions .generator/schemas/v2/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75613,12 +75613,15 @@ components:
description: |-
If `true`, Splunk tries to extract timestamps from incoming log events.
If `false`, Splunk assigns the time the event was received.
Only applies when `endpoint_target` is `event`; cannot be `true` when `endpoint_target` is `raw`.
example: true
type: boolean
buffer:
$ref: "#/components/schemas/ObservabilityPipelineBufferOptions"
encoding:
$ref: "#/components/schemas/ObservabilityPipelineSplunkHecDestinationEncoding"
endpoint_target:
$ref: "#/components/schemas/ObservabilityPipelineSplunkHecDestinationEndpointTarget"
endpoint_url_key:
description: Name of the environment variable or secret that holds the Splunk HEC endpoint URL.
example: SPLUNK_HEC_ENDPOINT_URL
Expand Down Expand Up @@ -75673,6 +75676,16 @@ components:
x-enum-varnames:
- JSON
- RAW_MESSAGE
ObservabilityPipelineSplunkHecDestinationEndpointTarget:
description: The Splunk HEC endpoint to send events to. Use `event` to send structured events to the `/event` endpoint, or `raw` to send the raw message to the `/raw` endpoint.
enum:
- event
- raw
example: event
type: string
x-enum-varnames:
- EVENT
- RAW
ObservabilityPipelineSplunkHecDestinationTokenStrategy:
description: Controls how the Splunk HEC token is supplied. Use `custom` to provide a token with `token_key`, or `from_source` to forward the token received from an upstream Splunk HEC source.
enum:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// Validate an observability pipeline with Splunk HEC destination endpoint_target 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.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.ObservabilityPipelineDatadogAgentSource;
import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSourceType;
import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessor;
import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessorType;
import com.datadog.api.client.v2.model.ObservabilityPipelineSpec;
import com.datadog.api.client.v2.model.ObservabilityPipelineSpecData;
import com.datadog.api.client.v2.model.ObservabilityPipelineSplunkHecDestination;
import com.datadog.api.client.v2.model.ObservabilityPipelineSplunkHecDestinationEndpointTarget;
import com.datadog.api.client.v2.model.ObservabilityPipelineSplunkHecDestinationType;
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()
.destinations(
Collections.singletonList(
new ObservabilityPipelineConfigDestinationItem(
new ObservabilityPipelineSplunkHecDestination()
.id("splunk-hec-destination")
.inputs(
Collections.singletonList(
"my-processor-group"))
.type(
ObservabilityPipelineSplunkHecDestinationType
.SPLUNK_HEC)
.tokenKey("SPLUNK_HEC_TOKEN")
.endpointTarget(
ObservabilityPipelineSplunkHecDestinationEndpointTarget
.RAW))))
.processorGroups(
Collections.singletonList(
new ObservabilityPipelineConfigProcessorGroup()
.enabled(true)
.id("my-processor-group")
.include("service:my-service")
.inputs(
Collections.singletonList(
"datadog-agent-source"))
.processors(
Collections.singletonList(
new ObservabilityPipelineConfigProcessorItem(
new ObservabilityPipelineFilterProcessor()
.enabled(true)
.id("filter-processor")
.include("status:error")
.type(
ObservabilityPipelineFilterProcessorType
.FILTER))))))
.sources(
Collections.singletonList(
new ObservabilityPipelineConfigSourceItem(
new ObservabilityPipelineDatadogAgentSource()
.id("datadog-agent-source")
.type(
ObservabilityPipelineDatadogAgentSourceType
.DATADOG_AGENT)))))
.name("Pipeline with Splunk HEC endpoint_target"))
.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 @@ -29,6 +29,7 @@
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_AUTO_EXTRACT_TIMESTAMP,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_BUFFER,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ENCODING,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ENDPOINT_TARGET,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ENDPOINT_URL_KEY,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_ID,
ObservabilityPipelineSplunkHecDestination.JSON_PROPERTY_INDEX,
Expand All @@ -52,6 +53,9 @@ public class ObservabilityPipelineSplunkHecDestination {
public static final String JSON_PROPERTY_ENCODING = "encoding";
private ObservabilityPipelineSplunkHecDestinationEncoding encoding;

public static final String JSON_PROPERTY_ENDPOINT_TARGET = "endpoint_target";
private ObservabilityPipelineSplunkHecDestinationEndpointTarget endpointTarget;

public static final String JSON_PROPERTY_ENDPOINT_URL_KEY = "endpoint_url_key";
private String endpointUrlKey;

Expand Down Expand Up @@ -102,7 +106,9 @@ public ObservabilityPipelineSplunkHecDestination autoExtractTimestamp(

/**
* If <code>true</code>, Splunk tries to extract timestamps from incoming log events. If <code>
* false</code>, Splunk assigns the time the event was received.
* false</code>, Splunk assigns the time the event was received. Only applies when <code>
* endpoint_target</code> is <code>event</code>; cannot be <code>true</code> when <code>
* endpoint_target</code> is <code>raw</code>.
*
* @return autoExtractTimestamp
*/
Expand Down Expand Up @@ -169,6 +175,35 @@ public void setEncoding(ObservabilityPipelineSplunkHecDestinationEncoding encodi
this.encoding = encoding;
}

public ObservabilityPipelineSplunkHecDestination endpointTarget(
ObservabilityPipelineSplunkHecDestinationEndpointTarget endpointTarget) {
this.endpointTarget = endpointTarget;
this.unparsed |= !endpointTarget.isValid();
return this;
}

/**
* The Splunk HEC endpoint to send events to. Use <code>event</code> to send structured events to
* the <code>/event</code> endpoint, or <code>raw</code> to send the raw message to the <code>/raw
* </code> endpoint.
*
* @return endpointTarget
*/
@jakarta.annotation.Nullable
@JsonProperty(JSON_PROPERTY_ENDPOINT_TARGET)
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
public ObservabilityPipelineSplunkHecDestinationEndpointTarget getEndpointTarget() {
return endpointTarget;
}

public void setEndpointTarget(
ObservabilityPipelineSplunkHecDestinationEndpointTarget endpointTarget) {
if (!endpointTarget.isValid()) {
this.unparsed = true;
}
this.endpointTarget = endpointTarget;
}

public ObservabilityPipelineSplunkHecDestination endpointUrlKey(String endpointUrlKey) {
this.endpointUrlKey = endpointUrlKey;
return this;
Expand Down Expand Up @@ -445,6 +480,8 @@ public boolean equals(Object o) {
observabilityPipelineSplunkHecDestination.autoExtractTimestamp)
&& Objects.equals(this.buffer, observabilityPipelineSplunkHecDestination.buffer)
&& Objects.equals(this.encoding, observabilityPipelineSplunkHecDestination.encoding)
&& Objects.equals(
this.endpointTarget, observabilityPipelineSplunkHecDestination.endpointTarget)
&& Objects.equals(
this.endpointUrlKey, observabilityPipelineSplunkHecDestination.endpointUrlKey)
&& Objects.equals(this.id, observabilityPipelineSplunkHecDestination.id)
Expand All @@ -468,6 +505,7 @@ public int hashCode() {
autoExtractTimestamp,
buffer,
encoding,
endpointTarget,
endpointUrlKey,
id,
index,
Expand All @@ -489,6 +527,7 @@ public String toString() {
.append("\n");
sb.append(" buffer: ").append(toIndentedString(buffer)).append("\n");
sb.append(" encoding: ").append(toIndentedString(encoding)).append("\n");
sb.append(" endpointTarget: ").append(toIndentedString(endpointTarget)).append("\n");
sb.append(" endpointUrlKey: ").append(toIndentedString(endpointUrlKey)).append("\n");
sb.append(" id: ").append(toIndentedString(id)).append("\n");
sb.append(" index: ").append(toIndentedString(index)).append("\n");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
* This product includes software developed at Datadog (https://www.datadoghq.com/).
* Copyright 2019-Present Datadog, Inc.
*/

package com.datadog.api.client.v2.model;

import com.datadog.api.client.ModelEnum;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
* The Splunk HEC endpoint to send events to. Use <code>event</code> to send structured events to
* the <code>/event</code> endpoint, or <code>raw</code> to send the raw message to the <code>/raw
* </code> endpoint.
*/
@JsonSerialize(
using =
ObservabilityPipelineSplunkHecDestinationEndpointTarget
.ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer.class)
public class ObservabilityPipelineSplunkHecDestinationEndpointTarget extends ModelEnum<String> {

private static final Set<String> allowedValues =
new HashSet<String>(Arrays.asList("event", "raw"));

public static final ObservabilityPipelineSplunkHecDestinationEndpointTarget EVENT =
new ObservabilityPipelineSplunkHecDestinationEndpointTarget("event");
public static final ObservabilityPipelineSplunkHecDestinationEndpointTarget RAW =
new ObservabilityPipelineSplunkHecDestinationEndpointTarget("raw");

ObservabilityPipelineSplunkHecDestinationEndpointTarget(String value) {
super(value, allowedValues);
}

public static class ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer
extends StdSerializer<ObservabilityPipelineSplunkHecDestinationEndpointTarget> {
public ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer(
Class<ObservabilityPipelineSplunkHecDestinationEndpointTarget> t) {
super(t);
}

public ObservabilityPipelineSplunkHecDestinationEndpointTargetSerializer() {
this(null);
}

@Override
public void serialize(
ObservabilityPipelineSplunkHecDestinationEndpointTarget value,
JsonGenerator jgen,
SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeObject(value.value);
}
}

@JsonCreator
public static ObservabilityPipelineSplunkHecDestinationEndpointTarget fromValue(String value) {
return new ObservabilityPipelineSplunkHecDestinationEndpointTarget(value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2026-08-03T12:48:21.947Z
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[
{
"httpRequest": {
"body": {
"type": "JSON",
"json": "{\"data\":{\"attributes\":{\"config\":{\"destinations\":[{\"endpoint_target\":\"raw\",\"id\":\"splunk-hec-destination\",\"inputs\":[\"my-processor-group\"],\"token_key\":\"SPLUNK_HEC_TOKEN\",\"type\":\"splunk_hec\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]},\"name\":\"Pipeline with Splunk HEC endpoint_target\"},\"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": "73db9f94-ddcd-4bde-3cd5-7de25c4c7329"
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,14 @@ Feature: Observability Pipelines
Then the response status is 200 OK
And the response "errors" has length 0

@team:DataDog/observability-pipelines
Scenario: Validate an observability pipeline with Splunk HEC destination endpoint_target returns "OK" response
Given new "ValidatePipeline" request
And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "splunk-hec-destination", "inputs": ["my-processor-group"], "type": "splunk_hec", "token_key": "SPLUNK_HEC_TOKEN", "endpoint_target": "raw"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Splunk HEC endpoint_target"}, "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 with Splunk HEC destination token_strategy returns "OK" response
Given new "ValidatePipeline" request
Expand Down
Loading