What it is
A virtual machine with diagnosticsProfile.bootDiagnostics.enabled not set to true. Boot diagnostics captures a console screenshot and serial log during startup — the only window into a VM that hangs before the OS (and therefore SSH, RDP, and every monitoring agent) comes up. With it disabled, a failed boot after a patch, resize, or unplanned host move gives you exactly nothing to work with.
Why it happens
Boot diagnostics is off unless explicitly enabled, and many ARM templates, Terraform modules, and image pipelines never set it — it's a nice-to-have that adds nothing on the happy path, so it gets skipped. The portal enables it for portal-created VMs, which makes coverage inconsistent: hand-made VMs have it, the infrastructure-as-code fleet often doesn't.
The trap has a nasty asymmetry: the setting only matters when the VM is already unbootable, and that's precisely when you can no longer turn it on and see what happened. The evidence you needed was never captured. Everything before that moment looks fine, so nothing prompts anyone to check.
What it costs / blast radius
With the managed storage option, boot diagnostics costs effectively nothing — no storage account to maintain, no meaningful line on the bill. This is pure operational insurance. What's at stake is incident time: a VM stuck at boot with diagnostics enabled shows you the kernel panic, the BSOD stop code, or the fsck prompt in one screenshot; the same VM without it is a black box you resort to detaching disks and rebuilding around, while the outage runs. The check is hygiene, but the moment it matters, it really matters. (Authored assessment of Azure behavior.)
See it
resource vm 'Microsoft.Compute/virtualMachines@2024-07-01' = {
name: 'app-vm-01'
location: location
properties: {
hardwareProfile: { vmSize: 'Standard_D4s_v5' }
// ...osProfile and networkProfile omitted for brevity
// diagnosticsProfile omitted: no console screenshot,
// no serial log when this VM fails to start
}
}resource vm 'Microsoft.Compute/virtualMachines@2024-07-01' = {
name: 'app-vm-01'
location: location
properties: {
hardwareProfile: { vmSize: 'Standard_D4s_v5' }
// ...osProfile and networkProfile omitted for brevity
diagnosticsProfile: {
bootDiagnostics: {
enabled: true // omit storageUri to use managed storage
}
}
}
}How StratoLens helps
StratoLens flags every VM with boot diagnostics disabled, continuously and across all your subscriptions, so the gap surfaces during a calm Tuesday review instead of during the outage. It's the kind of setting nobody audits by hand — which is exactly why the check runs automatically.