Symptoms
- Reports are stale, but there are no failed runs — there are no runs at all.
- Started after a release pipeline deployed the factory, or after someone published from the dev factory.
1. Check trigger runtime state
az datafactory trigger list -g rg-data --factory-name adf-prod \
--query "[].{name:name, type:properties.type, state:properties.runtimeState}" -o table
Stopped triggers don't fire. The common cause: the recommended CI/CD pattern stops triggers before deployment (the pre/post-deployment script) and the post-deployment step that restarts them failed or was skipped.
2. Start them
az datafactory trigger start -g rg-data --factory-name adf-prod -n tr_daily_0200
Or all of them:
Get-AzDataFactoryV2Trigger -ResourceGroupName rg-data -DataFactoryName adf-prod |
Where-Object { $_.RuntimeState -eq 'Stopped' } |
ForEach-Object { Start-AzDataFactoryV2Trigger -ResourceGroupName rg-data -DataFactoryName adf-prod -Name $_.Name -Force }
Warning
Check with the data owners before starting triggers that were stopped on purpose (decommissioned feeds, paused for maintenance). Keep a list of intentionally stopped triggers in the repo.
3. Storage event triggers
Event triggers depend on an Event Grid subscription on the storage account. If the subscription was deleted or the Event Grid resource provider isn't registered, the trigger shows Started but never fires.
az eventgrid event-subscription list --source-resource-id <storage-account-id> -o table
az provider show -n Microsoft.EventGrid --query registrationState
Stop and start the trigger to recreate the subscription.
4. Backfill what was missed
Tumbling window triggers keep window state: once started, they can run missed windows from the trigger's start time automatically (if within the configured settings), or you rerun specific windows from Monitor → Trigger runs.
Schedule triggers don't backfill. Run the pipeline manually for each missed period with parameters:
az datafactory pipeline create-run -g rg-data --factory-name adf-prod --name pl_daily_load \
--parameters '{"runDate":"2026-10-24"}'
Run them in order if loads depend on the previous day.
5. Fix the release pipeline
- Make the post-deployment script step run even if earlier steps had warnings, and fail the release if triggers don't end up
Started. - Add a verification step:
stopped=$(az datafactory trigger list -g rg-data --factory-name adf-prod --query "[?properties.runtimeState=='Stopped'].name" -o tsv | grep -v -f intentionally-stopped.txt)
[ -z "$stopped" ] || { echo "Stopped triggers: $stopped"; exit 1; }
Prevent it next time
Alert on the absence of runs, not just failures:
ADFPipelineRun
| where TimeGenerated > ago(26h) and PipelineName == "pl_daily_load"
| summarize runs = count()
| where runs == 0
Create a log alert on this query for each critical pipeline (or one query over a list).