Is the host healthy?
- The function app is running and the function isn't disabled (
AzureWebJobs.<FunctionName>.Disabledapp setting). -
AzureWebJobsStoragepoints to a storage account that exists and can be reached. The host needs it for locks, timers and blob receipts. -
FUNCTIONS_EXTENSION_VERSION = ~4andFUNCTIONS_WORKER_RUNTIMEmatches your code (dotnet-isolated, node, python, java, powershell). - The latest deployment actually contains the function. Check Functions in the portal; an empty list means a deployment or packaging problem.
az functionapp show -g rg-fn -n fn-prod --query "{state:state, kind:kind}" -o table
az functionapp config appsettings list -g rg-fn -n fn-prod \
--query "[?name=='AzureWebJobsStorage' || name=='FUNCTIONS_WORKER_RUNTIME' || name=='FUNCTIONS_EXTENSION_VERSION']" -o table
Look at what the host says
// Application Insights
traces
| where timestamp > ago(1h)
| where severityLevel >= 3 or message has_any ("Host started", "Host lock", "Listener", "unable to", "Error")
| project timestamp, severityLevel, message
| order by timestamp desc
Messages like The listener for function 'X' was unable to start name the trigger that failed and why, often a connection string or permission problem.
Trigger-specific checks
Timer
- The CRON expression has six fields (seconds first):
0 */5 * * * *means every 5 minutes. - The time zone is UTC unless
WEBSITE_TIME_ZONEis set (supported on Windows and Linux Premium/Dedicated plans). - Only one instance runs a timer, using a blob lease in
AzureWebJobsStorage. If two apps share that storage account and the same host ID, one of them silently doesn't run.
Queue / Service Bus
- The connection setting name in the binding matches an app setting, for example
"connection": "ServiceBusConn". With identity-based connections, useServiceBusConn__fullyQualifiedNamespace. - Messages aren't all going to the poison or dead-letter queue. Check
<queue>-poisonor the DLQ. - The identity has a data role (Storage Queue Data Contributor / Azure Service Bus Data Receiver).
Blob
- On Consumption plans, the classic blob trigger polls and can lag by minutes. Use the Event Grid-based blob trigger for low latency.
- Blob receipts in
azure-webjobs-hostsstop reprocessing of existing blobs. Re-uploading the same name doesn't fire again unless the blob changes.
HTTP
- Callers use the right function key (
?code=or thex-functions-keyheader) and route. - Access restrictions or private endpoints aren't blocking the caller.
Networking
- If the storage account is locked down, the app needs VNet integration plus private endpoints for blob, queue, table and file. Set
WEBSITE_CONTENTOVERVNET=1where the plan requires it. - DNS resolves those endpoints to private IPs from inside the integrated VNet.
Scale and cold start
- On Consumption, scale-out can be delayed for some trigger types. For latency-sensitive work use Premium or Flex Consumption with always-ready instances.
-
functionAppScaleLimitisn't set to a tiny number by mistake.
Tip
After fixing settings, restart the function app. Some binding settings are only read when the host starts.