![]() |
VOOZH | about |
Pipeline Simulation is in Preview. Reach out to your account manager to request access.
When you configure or edit a pipeline in Observability Pipelines, you often have to update filter queries, sampling rules, or Packs that transform your telemetry. These changes can impact downstream monitors, dashboards, and detection rules. Therefore, it’s important to test and validate how your changes affect your production data before you deploy those changes.
Use Pipeline Simulation to preview how your processors, volume control rules, and Packs modify your log data before deploying your pipeline configuration. This helps ensure your processors target the right data and modify your logs as expected. You can test your configuration with live logs sent through the pipeline or import your own sample data.
To use Pipeline Simulation:
This document goes over each of those steps in detail.
The following example of Pipeline Simulation shows an unparsed log that a processor group receives (Entry) and the parsed output after the log is processed and tagged (Exit).
Only users with the Observability Pipelines Live Capture Write permission can set up captures. Users with the Observability Pipelines Live Capture Read permission can only view the events that have already been captured. See Observability Pipelines Permissions for a list of permissions for Observability Pipelines assets.
Datadog Admins have read and write permissions by default. Standard users have only read permission by default. See Access Control for more information about default Datadog roles and how to create custom roles.
If you are using a firewall, add these domains to the allowlist:
api.obpipeline-intake.config.Before running a simulation, you need to capture sample log data to test against. Pipeline Simulation lets you capture live data from an active pipeline, reuse previously captured samples, or import your own data.
The status of a pipeline determines whether a simulation can be run with live data, imported data, or both.
| Pipeline status | Simulation with imported data | Simulation with saved data | Simulation with live data |
|---|---|---|---|
| Active | ✔️ | ✔️ | ✔️ |
| Inactive | ✔️ | ✔️ | |
| Draft | ✔️ | ✔️ |
Note: For inactive pipelines or pipelines in draft mode, you must import data the first time you run a simulation for the pipeline.
For active pipelines, Observability Pipelines automatically runs a Live Capture if a previously saved capture, whether from imported data or a live capture, is not available.
To run a capture for a specific set of data:
*.service:cloudtrail env:prod, to target a specific set of logs. This helps to distinguish between different sets of logs you use for your simulations. For example, you can capture a set of logs for custom app log processors and another for the Cloudflare Pack.To import sample data for your pipeline simulation:
When you import sample data in JSON format, the data must be:
The following is an example set of logs in JSON you can import for a simulation:
[
{
"id": "abcd",
"content": {
"timestamp": "2026-05-27T19:41:46.609Z",
"tags": [
"env:prod",
"service:web-store",
"source:ruby"
],
"host": "123",
"service": "web-store",
"message": "UnhandledInternalServiceError: Payment service reported 500 error code.",
"attributes": {
"transaction_id": "abc123",
"shopist": {
"webstore": {
"merchant": {
"plan_type": "m2m",
"tier": "enterprise",
"store_name": "ElectroNova"
}
},
"customer": {
"name": "Pam Jones",
"location": "San Francisco, California"
}
},
"level": "error",
"logger": {
"name": "ShoppingCartController"
},
"status": "error"
}
}
}
]
A JSONL file must contain multiple JSON objects, where each object is on its own line, separated by a newline.
The following is an example JSONL file you can import for a simulation:
{"name":"process_payload_ms.count","tags":{"host":"i-abcd123","version":"7.77.3"},"timestamp":"2026-05-08T20:16:10Z","interval_ms":10000,"kind":"incremental","counter":{"value":0.0}}
{"name":"max_eps.max_rate","tags":{"host":"i-efg123","version":"7.77.3"},"timestamp":"2026-05-08T20:16:10Z","interval_ms":10000,"kind":"absolute","gauge":{"value":200.0}}
{"name":"service_checks","tags":{"client_version":"5.8.3","host":"i-hijk123"},"timestamp":"2026-05-08T20:16:10Z","interval_ms":10000,"kind":"incremental","counter":{"value":0.0}}
{"name":"aggregated_context_by_type","tags":{"client_version":"5.8.1","xyz123":"macbook","metrics_type":"distribution"},"timestamp":"2026-05-08T20:16:10Z","interval_ms":10000,"kind":"incremental","counter":{"value":0.0}}
After you use Live Capture to pull data from your pipeline, the results are stored for 72 hours in the Datadog platform and can be used for simulations. To use previously captured data for your pipeline simulation:
After you have captured data for your pipeline simulation, edit your pipeline processors and run a simulation.
Modified only shows only modified events.Unmodified only shows only unmodified events.Rerouted only shows only logs rerouted to an overflow destination by the Quota processor.Created only shows only:Dropped only shows only dropped events.Logs only or Metrics only events. Metrics only shows events only from the Generate Logs-Based Metrics processor.Note: For the Enrichment Table processor, only the Reference Table option supports Pipeline Simulation.
When you run a simulation, you can choose to send your data to a specific processor group or through all processor groups to get an end-to-end preview.
On the Pipeline Simulation page, you can choose which set of processors you want to test and validate. The simulation sends data through the previous processor groups and the selected group. For example, if you run a simulation for processor group 2, the processed data you see is the result from sending the logs through groups 1 and 2. Similarly, if you run a simulation for group 3, the result is after processing the log data through processor groups 1, 2, and 3.
When you toggle End-to-End Preview and run a simulation, the entry event shown is the log sent from the source before any processing is done. The exit log is the result after all processors have been applied and sent to the destination. This lets you visualize how a log is transformed after it goes through the entire pipeline.
Additional helpful documentation, links, and articles:
| |