Introduction
Azure Load Balancer uses health probes to determine which backend instances are healthy and should receive traffic. When probes fail, the load balancer removes instances from rotation, potentially causing service unavailability.
Symptoms
Backend instances unhealthy:
```bash $ az network lb address-pool show \ --lb-name my-lb \ --name my-backend-pool \ --resource-group my-rg
# Backend instances show as unhealthy or not receiving traffic ```
Probe timeout:
# In load balancer metrics:
HealthProbeStatus: Down
ProbeUpResponseCount: 0Application unreachable:
```bash $ curl http://my-lb-ip/
# Connection timeout or 502 Bad Gateway ```
Common Causes
- 1.Probe path incorrect - Wrong endpoint or path
- 2.Backend port mismatch - App not listening on expected port
- 3.Application health endpoint missing - No health check endpoint
- 4.Firewall blocking probes - NSG rules blocking health probe traffic
- 5.Probe interval too short - App can't respond in time
- 6.HTTPS vs HTTP mismatch - Wrong protocol configured
- 7.Backend application crash - App not running
Step-by-Step Fix
- 1.Check logs for specific error messages
- 2.Verify configuration settings
- 3.Test network connectivity
- 4.Review recent changes
- 5.Apply corrective action
- 6.Verify the fix
Step 1: Check Load Balancer Probe Configuration
```bash # Get probe configuration az network lb probe show \ --lb-name my-lb \ --name my-probe \ --resource-group my-rg \ --query '{Protocol:protocol,Port:port,Path:requestPath,Interval:intervalInSeconds,Threshold:numberOfProbes}'
# Verify: # - Protocol matches what backend expects # - Port matches backend listening port # - Path returns 200 OK # - Interval and threshold reasonable ```
Step 2: Test Backend Health Endpoint Directly
```bash # Test from a machine in same VNet curl -v http://backend-private-ip:port/health
# Expected response: 200 OK # If 404, the path doesn't exist # If timeout, the port is closed or app not running ```
Step 3: Check Backend Application Status
```bash # SSH to backend VM ssh user@backend-private-ip
# Check if app is running # For web servers: sudo netstat -tlnp | grep :80 sudo systemctl status nginx # or apache2
# For custom apps: ps aux | grep app sudo journalctl -u myapp -f ```
Step 4: Verify NSG Rules
```bash # Get NSG for backend subnet az network nsg show \ --name my-nsg \ --resource-group my-rg \ --query 'securityRules[]'
# Load Balancer probes come from Azure infrastructure IPs # Ensure NSG allows: # - Inbound from AzureLoadBalancer source # - On the probe port
# Add rule if missing az network nsg rule create \ --nsg-name my-nsg \ --resource-group my-rg \ --name AllowHealthProbe \ --priority 100 \ --direction Inbound \ --source-address-prefix AzureLoadBalancer \ --source-port-range '*' \ --destination-address-prefix '*' \ --destination-port-range 80 \ --protocol Tcp \ --access Allow ```
Step 5: Update Probe Configuration
```bash # Fix probe path az network lb probe update \ --lb-name my-lb \ --name my-probe \ --resource-group my-rg \ --path /health \ --protocol Http \ --port 80
# Adjust timing if app is slow az network lb probe update \ --lb-name my-lb \ --name my-probe \ --resource-group my-rg \ --interval 30 \ --threshold 3
# Default interval: 5 seconds # Default threshold: 2 failed probes ```
Step 6: Create Health Check Endpoint
# Nginx example
location /health {
access_log off;
return 200 "healthy\n";
add_header Content-Type text/plain;
}# Python Flask example
@app.route('/health')
def health():
return 'OK', 200# Reload web server after config change
sudo nginx -t && sudo nginx -s reloadStep 7: Check Protocol Configuration
```bash # For HTTPS backends, ensure probe uses HTTPS az network lb probe update \ --lb-name my-lb \ --name my-probe \ --resource-group my-rg \ --protocol Https \ --path /health
# For TCP probes (no HTTP health check) az network lb probe update \ --lb-name my-lb \ --name my-probe \ --resource-group my-rg \ --protocol Tcp \ --port 3306 ```
Step 8: Verify Backend Pool Configuration
```bash # Check backend pool az network lb address-pool show \ --lb-name my-lb \ --name my-backend-pool \ --resource-group my-rg
# Ensure backend VMs or VMSS are correctly associated # Check NIC configurations az network nic show \ --name my-vm-nic \ --resource-group my-rg \ --query '{BackendPool:ipConfigurations[0].loadBalancerBackendAddressPools}' ```
Step 9: Monitor Probe Metrics
```bash # Check probe health metrics az monitor metrics list \ --resource /subscriptions/SUB/resourceGroups/my-rg/providers/Microsoft.Network/loadBalancers/my-lb \ --metric "DipAvailability" \ --interval PT1H
# Value of 100 = healthy # Value of 0 = unhealthy
Step 10: Test Load Balancer Traffic
```bash # After fixing probes, test traffic distribution for i in {1..10}; do curl -s http://my-lb-ip/ | grep -o "Server: .*" done
# Should show responses from different backend instances
# Check backend health in portal # Load Balancer > Backend pools > Backend health ```
Load Balancer Probe Configuration Reference
| Setting | Recommended | Notes |
|---|---|---|
| Protocol | HTTP | Allows path-based health check |
| Port | App listening port | Must match backend |
| Path | /health | Lightweight health endpoint |
| Interval | 15-30 seconds | Balance detection speed vs. load |
| Threshold | 2-3 | Probes before marking unhealthy |
Verification
```bash # Check backend health status az network lb show \ --name my-lb \ --resource-group my-rg \ --query 'backendAddressPools[].backendIpConfigurations[].{Name:name,Health:provisioningState}'
# Test endpoint curl -I http://my-lb-ip/health
# Should return 200 OK
# Monitor probe success rate az monitor metrics list \ --resource /subscriptions/SUB/resourceGroups/my-rg/providers/Microsoft.Network/loadBalancers/my-lb \ --metric "DipAvailability" \ --query 'value[0].timeseries[0].data[-1]'
# Should show 100 (healthy) ```
Prevention
To prevent Azure Load Balancer probe failing issues from recurring, implement these proactive measures:
1. Monitor Probe Health
groups:
- name: azure-loadbalancer
rules:
- alert: AzureLoadBalancerProbeFailing
expr: |
azure_lb_probe_health_percentage < 100
for: 5m
labels:
severity: critical
annotations:
summary: "Azure Load Balancer probe health below 100%"2. Implement Health Endpoints
```bash # Configure lightweight health endpoint on backend VMs # nginx.conf: location /health { return 200 'OK'; add_header Content-Type text/plain; }
# Or for applications: # Create dedicated health check endpoint @app.route('/health') def health(): return 'OK', 200 ```
3. Configure Probe Alerts
# Set up probe failure alerts
az monitor activity-log alert create \
--name lb-probe-alert \
--resource-group my-rg \
--condition category='ResourceHealth' and resourceType='Microsoft.Network/loadBalancers' and status='Active'Best Practices Checklist
- [ ] Monitor probe health percentage
- [ ] Implement health endpoints
- [ ] Configure probe failure alerts
- [ ] Test probes after configuration changes
- [ ] Use appropriate probe intervals
- [ ] Document probe configuration
Related Issues
- [Fix Azure Application Gateway Backend Pool Not Resolving](/articles/fix-azure-backend-pool-not-resolving)
- [Fix Azure Network Security Group Blocking Traffic](/articles/fix-azure-network-security-group-blocking)
- [Fix Azure VM Not Starting](/articles/fix-azure-vm-not-starting)
Related Articles
- [Technical troubleshooting: Fix Azure Aks Pod Crashloopbackoff Issue in Azure](azure-aks-pod-crashloopbackoff)
- [Technical troubleshooting: Fix Azure Api Management Policy Expression Runtime](azure-api-management-policy-expression-runtime-error)
- [Technical troubleshooting: Fix Azure App Configuration Feature Flag Not Refre](azure-app-configuration-feature-flag-not-refreshing)
- [Technical troubleshooting: Fix Azure App Service 503 Always On Disabled Issue](azure-app-service-503-always-on-disabled)
- [Technical troubleshooting: Fix Azure Application Gateway Err SSL Unrecognized](azure-application-gateway-err-ssl-unrecognized-name-alert)
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Fix Azure Load Balancer Health Probe Failing", "description": "Troubleshoot Azure Load Balancer health probe failures. Check probe configuration, backend health, and network connectivity.", "url": "https://www.fixwikihub.com/fix-azure-load-balancer-probe-failing", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2026-04-03T03:38:33.546Z", "dateModified": "2026-04-03T03:38:33.546Z" } </script>