Paradime integrates natively with Elementary CLI to enable you to generate report and/or send alerts using the Bolt scheduler out of the box. No additional installation required.
1. Get Datadog API Credentials
To send incidents to Datadog, you’ll need both an API key and an Application key. Get your API Key- Log in to your Datadog account
- Navigate to Organization Settings → API Keys
- Click + New Key to create a new API key
- Give it a descriptive name like “Elementary Integration”
- Copy the API key (you’ll need this later)
- In Organization Settings, go to Application Keys
- Click + New Key to create a new application key
- Give it a descriptive name like “Elementary Integration”
- Copy the application key (you’ll need this later)
incident_notification_settings_readincident_readincident_writeteams_readuser_access_read
2. Configure the Integration
Pass your credentials directly when runningedr monitor. You should use environment variables in the Bolt command, as described here for secrets.
These four flags are the only Datadog settings available on the command line. Other global defaults, such as a default notification handle, commander, or a custom severity mapping, are set once in a
config.yml file. See Set project-level defaults.3. Test your Integration
Run the following command to create a test incident in your Datadog account and verify the integration is configured correctly:4. Execute the CLI
Once configured, run the following command after your dbt™ runs and tests:5. Set project-level defaults (avoid repeating alerts_config)
You do not need to repeat the
alerts_config block in every model YAML. There are two ways to set defaults once and let them apply across your whole project, and you can combine both.- A
config.ymlfile sets true global defaults for the whole project (one value for every alert). - dbt™ config inheritance (
+metaindbt_project.yml) sets defaults per folder or domain, using standard dbt™ merging.
Global defaults with a config.yml file
Elementary reads global settings from a config.yml file. Point edr at the directory containing it with the --config-dir (-c) flag. Because this file is committed to your dbt™ repository, it works in Bolt schedules without any extra setup.
edr:
datadog: keys in config.yml
Per-folder defaults with dbt™ +meta inheritance
Setting alerts_config through dbt™‘s standard config inheritance (+meta in dbt_project.yml, applied to a folder) is respected by Elementary exactly like model-level meta. This is the recommended way to handle datadog_incident_type_uuid, which has no config.yml global, and to vary handles per domain. You set it once per folder instead of once per model.
alerts_config are datadog_severity, datadog_notification_handle, datadog_commander_uuid, and datadog_incident_type_uuid.
Models vs. tests precedence. Folder-level
+meta applies to both. For models, a folder or config.meta value overrides the model’s top-level meta:. For tests, the reverse holds: a test’s own meta: takes precedence over folder-level +meta. So if a specific test already carries its own alerts_config in meta, set the override explicitly on that test.- Put organization-wide defaults (
default_severity,severity_mapping,notification_handles,commander_user_id,site) in oneconfig.yml. - Put per-domain overrides, especially
datadog_incident_type_uuidand each domain’s notification handle, as folder-level+meta.alerts_configindbt_project.yml, one block per domain path. - Only drop down to model-level or test-level
metafor the rare exception that needs a special commander, incident type, or severity.
alerts_config block from every model YAML: nothing needs to be per-model unless you want a deliberate exception.
6. Per-Alert Customization via dbt™ YAML
You can override Datadog incident settings on a per-model or per-test basis directly in your dbt™ project YAML files. These settings take precedence over the global CLI and
config.yml defaults.alerts_config block under config: meta: in your dbt™ YAML files. They can be applied at:
- Model level: affects all alerts from that model’s tests
- Test level: affects only that specific test (overrides model-level if both are set)
How to find the required UUIDs
User UUID (
datadog_commander_uuid)
- In Datadog, navigate to Organization Settings → Users
- Click on the user you want to assign as commander
- The UUID is visible in the URL:
app.datadoghq.com/organization-settings/users/<uuid>
datadog_incident_type_uuid)
- In Datadog, navigate to Incidents → Settings → Incident Types
- Click on the incident type you want to use
- The UUID is visible in the URL or in the incident type details panel
- Test-level
datadog_severityinconfig.meta.alerts_config - Model-level or folder-level
datadog_severityinconfig.meta.alerts_config config.ymlseverity_mapping(status → severity). When set, this replaces the built-in status mapping below.- Built-in status mapping (
error→ SEV-1,fail→ SEV-2,warn→ SEV-3), used only when noseverity_mappingis configured. - Default severity from
--datadog-default-severity(which overridesconfig.ymldefault_severity); fallbackSEV-3.
Alert on Source Freshness Failures
Not supported in dbt Cloud.
edr run-operation upload-source-freshness immediately after each execution of dbt source freshness. This operation uploads the results to a table, and the subsequent edr monitor execution will send the alert as a Datadog incident.
Keep the following in mind:
dbt source freshnessandupload-source-freshnessmust run from the same machine.upload-source-freshnessrequires the--project-dirargument to be passed.
Continuous Alerting
To monitor continuously, use your orchestrator to runedr monitor on a regular schedule. We recommend running it right after your dbt™ job ends to catch the latest data updates as quickly as possible.
Deduplication
Elementary automatically deduplicates Datadog incidents. Before creating a new incident, it checks whether an active incident already exists for the same alert. If one is found, no duplicate is created. This means:- Re-running
edr monitorwithout resolving the underlying issue will not create duplicate incidents. - Once an incident is resolved in Datadog, the next failing run will create a fresh incident.