In Flashduty On-call
Create either a dedicated or shared Dash0 alert integration and copy its complete Push URL.
Configure Dash0
1
Create a webhook notification channel
- In Dash0, open the notification channel settings and create a new channel of type Webhook
- Name it
Flashduty - Paste the complete Flashduty Push URL into URL
- Flashduty needs no extra request headers, so leave Additional HTTP Headers empty
2
Route check rules to the channel
Following Dash0’s alert routing settings, send the check rules you want to sync to the
Flashduty channel. To notify only on critical failures, use Dash0’s severity-based routing option.3
Verify the lifecycle
Let a check rule cross its threshold and confirm Flashduty receives an active alert. Then let the metric return to normal and confirm the same alert recovers. Dash0 sends a fixed JSON body, so no custom payload is needed.
Alert Key
Flashduty uses
data.issue.issueIdentifier as the Alert Key. Dash0 documents it as the “identifier for the combination of CheckRule and Resource, should remain stable over different issue instances”, so trigger and recovery carry the same value.
data.issue.id identifies a single issue instance and data.issue.checkrules[].id identifies the check rule. Both are kept as labels only and are not part of the Alert Key. Changes to the title, status, description, start time, or check rule version do not change the Alert Key. An alert-type request without issueIdentifier is rejected, because later recovery could not be matched.
Event types and severity
Dash0 does not publish the exact meaning of
alert.closed and alert.superseded. Flashduty handles them conservatively: closed is treated as the issue having ended, and superseded is assumed to be followed by a new alert.ongoing for the same identifier, so it does not change alert state.
Troubleshooting
- Dash0 gets a non-2xx response: confirm the Push URL is complete and includes
integration_key - Flashduty returns an invalid-parameter error: confirm the body is valid JSON and
data.issue.issueIdentifieris not empty - The alert does not recover: confirm the channel receives recovery notifications (
alert.resolved/alert.closed) and that the check rule’s routing does not notify only on critical failures - Requests arrive but no alert appears:
alert.supersededand unknown types are ignored