Managing DNS Efficiently with Azure Private Resolver

Azure DNS Private Resolver

Azure DNS Private Resolver is a fully managed, highly available DNS service that lets your spoke VNets and on-premises networks resolve Azure private DNS zones — without deploying and managing DNS virtual machines.

Before Private Resolver existed, enterprises had to run Windows Server DNS VMs in the hub to forward queries between on-premises and Azure. Private Resolver replaces that entirely with a managed service.


The Two Endpoints

DNS Private Resolver has two endpoint types, each deployed into a dedicated delegated subnet inside the hub VNet.

Inbound Endpoint

Receives DNS queries from outside Azure — from on-premises DNS servers or spoke VNets that point their DNS server setting directly at this IP.

  • Gets a static private IP from your hub VNet subnet (e.g. 10.0.5.4)
  • Reachable over VPN Gateway or ExpressRoute from on-premises
  • On-premises DNS servers forward specific zones (e.g. *.privatelink.blob.core.windows.net) to this IP
  • Requires a dedicated /28 subnet named however you like (e.g. snet-dns-inbound)

Outbound Endpoint

Forwards DNS queries from Azure to external resolvers — typically to on-premises DNS servers for resolving internal corp domains like *.contoso.local.

  • Also gets a private IP from a dedicated /28 subnet
  • Does not receive queries directly — works only through a Forwarding Ruleset
  • Requires a dedicated subnet separate from the inbound endpoint subnet

Forwarding Ruleset

A Forwarding Ruleset is a collection of conditional forwarding rules attached to the outbound endpoint. You then link the ruleset to spoke VNets so those spokes inherit the forwarding rules automatically.

Example ruleset rules

DomainForwarding targetUse
contoso.local.192.168.1.10:53 (on-prem DNS)Resolve internal corp names
corp.contoso.com.192.168.1.10:53Resolve corp public domain internally
prod.internal.10.3.2.5:53Resolve shared-services zone
. (wildcard)168.63.129.16:53All other queries → Azure public DNS

The wildcard . rule is the catch-all — any query that doesn’t match a specific rule falls through to Azure’s public DNS resolver.


How Spoke VNets Resolve Private DNS Zones

There are two patterns depending on whether you want centralised or per-VNet control.

Pattern 1 — Custom DNS server pointing to inbound endpoint (recommended)

Each spoke VNet sets its DNS server to the inbound endpoint’s private IP (10.0.5.4) instead of the default Azure DNS (168.63.129.16):

Spoke VM queries: myaccount.blob.core.windows.net
Spoke VNet DNS setting → 10.0.5.4 (inbound endpoint)
DNS Private Resolver checks private DNS zones
Finds: myaccount.blob.core.windows.net → 10.1.8.4 (private endpoint IP)
Returns private IP — traffic stays on private network

This is set at the VNet level in Azure portal or via ARM:

{
"dhcpOptions": {
"dnsServers": ["10.0.5.4"]
}
}

Pattern 2 — Ruleset linked to spoke VNets

Link the hub’s forwarding ruleset directly to each spoke VNet. The spoke VNets keep the default Azure DNS (168.63.129.16) but inherit the conditional forwarding rules from the ruleset:

Spoke VM queries: server01.contoso.local
Azure DNS (168.63.129.16) — checks linked ruleset
Ruleset rule: contoso.local → forward to 192.168.1.10
Outbound endpoint forwards to on-premises DNS
On-premises DNS returns 192.168.10.45

Pattern 2 avoids changing the DNS server setting on every spoke and is easier to manage at scale — you just link new spokes to the existing ruleset.


Private DNS Zone Resolution Flow (Full Detail)

1. Developer VM in prod spoke queries:
mydb.privatelink.database.windows.net
2. Query goes to 10.0.5.4 (inbound endpoint)
3. DNS Private Resolver checks:
→ Is there a forwarding rule for this domain? No
→ Is there a linked private DNS zone? Yes
Zone: privatelink.database.windows.net
Record: mydb → 10.1.9.6 (private endpoint NIC IP)
4. Returns: mydb.privatelink.database.windows.net = 10.1.9.6
5. VM connects to SQL on 10.1.9.6
Traffic never leaves Azure backbone

Without DNS Private Resolver, the public DNS record for mydb.database.windows.net would resolve to the public IP, bypassing your private endpoint entirely.


Private DNS Zone Auto-Registration

When you create Azure PaaS resources with private endpoints, you link them to a private DNS zone. Common zones:

ServicePrivate DNS zone
Azure Blob Storageprivatelink.blob.core.windows.net
Azure SQL Databaseprivatelink.database.windows.net
Azure Key Vaultprivatelink.vaultcore.azure.net
Azure Container Registryprivatelink.azurecr.io
Azure Kubernetes Serviceprivatelink.{region}.azmk8s.io
Azure Monitorprivatelink.monitor.azure.com
Azure Service Busprivatelink.servicebus.windows.net

All these zones are linked to the hub VNet where DNS Private Resolver lives. Because all spokes resolve through the resolver, they automatically get the private IPs for these services.


Subnet Requirements

EndpointSubnet name (your choice)Min sizeDelegation
Inbounde.g. snet-dns-inbound/28 (16 IPs)Microsoft.Network/dnsResolvers
Outbounde.g. snet-dns-outbound/28 (16 IPs)Microsoft.Network/dnsResolvers

Both subnets must be in the hub VNet, must be separate from each other, and must not contain any other resources. The delegation is set automatically when you create the endpoint.


Before vs After Private Resolver

Before (DNS VMs)After (DNS Private Resolver)
Infrastructure2+ Windows DNS VMs in hubZero VMs — fully managed
High availabilityManual VM HA, availability setsBuilt-in, 99.99% SLA
MaintenancePatch, monitor, backup VMsNone
Conditional forwardingConfigured per-VMForwarding rulesets, linked to VNets
On-premises resolutionRequires VM reachabilityInbound endpoint IP, reachable over VPN/ER
CostVM compute + licencesPer-endpoint + per-query pricing

DNS Private Resolver is one of the clearest examples in Azure of a managed service eliminating operational overhead — the old pattern of DNS VMs in the hub was fragile, expensive, and easy to misconfigure.

Azure Firewall Rule Types in Hub and Spoke

Azure Firewall enforces three distinct rule collections processed in a strict priority order. Understanding all three is essential to designing a secure hub and spoke topology.

The three rule types are processed top to bottom — DNAT first, then network, then application. A match at any layer stops processing. If nothing matches, traffic is implicitly denied.


Rule Type 1 — DNAT Rules

Destination Network Address Translation rewrites the destination IP (and optionally port) of inbound traffic hitting the firewall’s public IP, redirecting it to a private backend inside a spoke VNet.

What it does

Internet client → Firewall public IP (52.x.x.x:443)
↓ DNAT rule fires
Rewrites destination to 10.1.4.5:443
Backend VM in production spoke

Example DNAT rules

NameProtocolSourceDest (public IP)Dest portTranslated IPTranslated port
allow-web-inboundTCP*52.10.20.3044310.1.4.5443
allow-rdp-adminTCP203.0.113.0/2452.10.20.30338910.0.3.103389
allow-api-gatewayTCP*52.10.20.3180,44310.4.2.88080

Key rules about DNAT

  • DNAT rules implicitly create a matching network rule to allow the translated traffic through — you don’t need a separate network rule for the return path.
  • DNAT only applies to inbound traffic — traffic arriving at the firewall’s public IP from outside.
  • You cannot DNAT to a broadcast or multicast address.
  • After translation, the packet is treated as if it came from the firewall’s private IP — so your backend VMs see the firewall, not the original client. Preserve source IP with SNAT if needed.

Rule Type 2 — Network Rules

Network rules are Layer 3/4 filters — they match on source IP, destination IP, port, and protocol. No payload inspection. This is the right tool for non-HTTP traffic: SQL, RDP, SMB, DNS, NTP, custom protocols.

What it does

Spoke VM (10.1.2.5) → SQL Server (10.3.4.10:1433)
Network rule: allow src=10.1.0.0/16 dest=10.3.4.10 port=1433 proto=TCP
Traffic passes — no application-layer inspection

Example network rules

NameSourceDestinationProtocolPortAction
allow-spoke-to-ad10.0.0.0/810.3.2.0/24TCP/UDP53,88,389,636Allow
allow-prod-to-sql10.1.0.0/1610.3.4.10TCP1433Allow
allow-mgmt-rdp10.0.3.0/2410.0.0.0/8TCP3389Allow
allow-ntp10.0.0.0/8*UDP123Allow
deny-dev-to-prod10.2.0.0/1610.1.0.0/16AnyAnyDeny
allow-internet-out10.0.0.0/8*TCP80,443Allow

Network rule features

IP Groups — reusable objects containing lists of IPs and CIDRs, so you don’t repeat 10.1.0.0/16, 10.2.0.0/16, 10.3.0.0/16 in every rule:

IPGroup: "all-spokes" = [10.1.0.0/16, 10.2.0.0/16, 10.3.0.0/16, 10.4.0.0/16]

FQDN in network rules — you can use FQDNs as destinations in network rules (e.g. *.windows.update.com) but only for TCP/UDP. The firewall resolves the FQDN using its DNS settings and matches on the resolved IP.

Service Tags — Microsoft-managed groups of IP ranges for Azure services:

Source: 10.0.0.0/8 → Destination: AzureMonitor → Port: 443 → Allow

Common tags: AzureCloud, AzureMonitor, Storage, Sql, WindowsUpdate, MicrosoftDefenderForEndpoint


Rule Type 3 — Application Rules

Application rules operate at Layer 7 — they can inspect the HTTP/HTTPS host header and URL path, enforce FQDN allow-lists, apply web category filtering, and (with Premium SKU) perform full TLS inspection.

What it does

Spoke VM → HTTPS request to api.github.com
Application rule: allow src=10.1.0.0/16 target=*.github.com proto=Https
Firewall checks SNI / Host header — matches rule
Traffic passes (or inspected if TLS inspection enabled)

Example application rules

NameSourceTarget FQDNsProtocolAction
allow-windows-update10.0.0.0/8*.update.microsoft.com, *.windowsupdate.comHTTP, HTTPSAllow
allow-azure-services10.0.0.0/8*.azure.com, *.core.windows.netHTTPSAllow
allow-dev-package-mgrs10.2.0.0/16*.npmjs.org, *.pypi.org, *.nuget.orgHTTPSAllow
allow-github10.1.0.0/16*.github.com, *.githubusercontent.comHTTPSAllow
deny-social-media10.0.0.0/8Web category: SocialNetworkingHTTP, HTTPSDeny
allow-all-outbound10.0.0.0/8*HTTP, HTTPSAllow

FQDN Tags — Microsoft-managed bundles

Instead of listing dozens of Microsoft service URLs manually, use built-in FQDN tags:

FQDN TagWhat it covers
WindowsUpdateAll Windows Update endpoints
WindowsDiagnosticsTelemetry and diagnostics endpoints
MicrosoftActiveProtectionServiceDefender update endpoints
AppServiceEnvironmentASE management traffic

Azure Firewall SKUs

FeatureBasicStandardPremium
DNAT rules
Network rules
Application rules
FQDN filteringLimited
Web category filtering
Threat intelligenceAlert only✅ Alert + deny✅ Alert + deny
TLS inspection
IDPS (intrusion detection)
URL filtering (path-level)
Use caseDev/testMost enterprisesHigh-security / compliance

TLS inspection (Premium only) decrypts HTTPS traffic, inspects the payload with IDPS signatures, then re-encrypts it. Requires deploying a CA certificate chain trusted by all spoke VMs — typically distributed via Group Policy or Intune.


Firewall Policy vs Classic Rules

Modern Azure Firewall uses Firewall Policy — an ARM resource that holds all rule collections and can be shared across multiple firewall instances:

Firewall Policy (parent — global rules)
↓ inheritance
Firewall Policy (child — environment-specific rules)
↓ applied to
Azure Firewall instance (hub VNet)

This lets you enforce baseline rules (e.g. deny dev→prod) at the parent policy level across all environments, while child policies add environment-specific rules. Child policies cannot override parent deny rules.


Rule Processing Priority — the Full Picture

Priority 100 (lowest number = highest priority)
DNAT collection A → rules evaluated top to bottom
DNAT collection B
Priority 200
Network collection A → IP/port rules
Network collection B
Priority 300
Application collection A → FQDN / URL rules
Application collection B
Priority 65000 (built-in)
Allow Azure infrastructure FQDNs (IMDS, DNS, etc.)
Priority 65500 (built-in)
Implicit deny all

Rule collections within each type are evaluated by priority number — lowest number wins. Within a collection, rules are evaluated top to bottom and the first match wins.

Azure VPN Gateway: A Guide to Connection Types and Benefits

What is Azure VPN Gateway?

An Azure VPN Gateway is a managed network gateway service that sends encrypted traffic between an Azure Virtual Network and an on-premises location (or another Azure VNet) over the public internet using IPsec/IKE tunnels. It’s the primary service that bridges your on-premises network to Azure in a hub and spoke topology.


Three Connection Types

Site-to-Site (S2S) connects your entire on-premises network to Azure over an IPsec/IKE tunnel. Your on-premises VPN device (router or firewall) terminates the tunnel. This is the most common type used in hub and spoke.

Point-to-Site (P2S) connects individual remote devices (laptops, phones) directly to the Azure VNet. Uses OpenVPN, SSTP, or IKEv2 protocols. No on-premises device required — just a VPN client app.

VNet-to-VNet connects two Azure VNets in different regions using the same IPsec tunnel mechanism as S2S. For same-region connections, VNet peering is cheaper and faster — VNet-to-VNet is mainly used cross-region or across subscriptions/tenants.


How It Works Internally

On-premises VPN device
↓ IPsec/IKE tunnel (encrypted)
Azure VPN Gateway (2 VM instances in GatewaySubnet)
↓ internal routing
Hub VNet → UDR propagation → Spoke VNets

The gateway always deploys as two instances for high availability. You choose between active-passive (one standby, ~10s failover) or active-active (both instances forward traffic simultaneously, faster failover).


SKUs — Full Breakdown

SKUs are grouped into generations. Generation 2 is current and recommended for all new deployments.

Generation 1 (legacy — avoid for new deployments)

SKUMax throughputS2S tunnelsP2S connectionsBGPZone-redundant
Basic100 Mbps10128
VpnGw1650 Mbps30250
VpnGw21 Gbps30500
VpnGw31.25 Gbps301,000

Generation 2 (current — recommended)

SKUMax throughputS2S tunnelsP2S connectionsBGPZone-redundant
VpnGw1650 Mbps30250
VpnGw21 Gbps30500
VpnGw31.25 Gbps301,000
VpnGw45 Gbps1005,000
VpnGw510 Gbps10010,000
VpnGw1AZ650 Mbps30250
VpnGw2AZ1 Gbps30500
VpnGw3AZ1.25 Gbps301,000
VpnGw4AZ5 Gbps1005,000
VpnGw5AZ10 Gbps10010,000

The AZ suffix means the gateway is deployed across Availability Zones — its instances span physically separate datacentre buildings, protecting against a full zone failure. This is the right choice for production workloads with strict uptime requirements.


SKU Selection Guide

ScenarioRecommended SKU
Dev/test only, no BGP neededBasic
Small org, <30 branch officesVpnGw1AZ
Mid-size enterpriseVpnGw2AZ or VpnGw3AZ
Large enterprise, many tunnelsVpnGw4AZ
Very high throughput (10 Gbps)VpnGw5AZ
High SLA required in productionAny AZ SKU

Key Concepts to Know

BGP (Border Gateway Protocol) — enables dynamic route exchange between Azure and your on-premises router. Without BGP, you must manually define every on-premises subnet in the Local Network Gateway. With BGP, routes are exchanged automatically. Required for active-active configurations and most enterprise setups.

GatewaySubnet — a dedicated subnet in your hub VNet that must be named exactly GatewaySubnet. Minimum /27 (32 addresses), recommended /26 or larger for future gateway coexistence (VPN + ExpressRoute). No other resources should be placed in this subnet.

Local Network Gateway — an Azure resource that represents your on-premises VPN device. You define its public IP address and the address space of your on-premises network here.

Active-Active mode — both gateway instances are active simultaneously, each with its own public IP. Your on-premises VPN device must support two tunnels. Provides near-zero downtime failover and higher aggregate throughput.

IKE versions — the gateway supports IKEv1 and IKEv2. IKEv2 is preferred — it’s faster to negotiate, more secure, and required for P2S with IKEv2 clients.


VPN Gateway vs ExpressRoute Gateway

VPN GatewayExpressRoute Gateway
TransportPublic internet (encrypted)Private MPLS circuit (unencrypted at layer)
Max throughput10 Gbps (VpnGw5AZ)Up to 100 Gbps (UltraPerformance)
LatencyVariable (internet)Consistent, low latency
CostLowerHigher (circuit + gateway)
Use caseMost enterprisesFinancial, healthcare, high-compliance

In many enterprise deployments both coexist in the same GatewaySubnet — ExpressRoute as the primary path, VPN as the failover.

Azure Hub and Spoke Network Design Explained

Here’s the Azure Hub and Spoke network architecture — the foundational enterprise network pattern on Azure. I’ll show it in two diagrams: the overall topology first, then the hub internals in detail.

The topology shows the hub as the central control point, with all spoke VNets peered to it. Now here’s a closer look at what lives inside the hub and how traffic flows through it.

Azure Hub and Spoke — Key Design Principles


Why Hub and Spoke?

Hub and spoke is the recommended enterprise network topology for Azure. Instead of each team or workload managing its own connectivity and security, all shared services live in one central hub VNet, and workloads live in isolated spoke VNets peered to it.

Every spoke talks to the world THROUGH the hub — never directly.

The Hub VNet — what lives inside

The hub is the security and connectivity control plane. It contains no workloads — only shared infrastructure:

  • VPN Gateway / ExpressRoute Gateway — the on-premises bridge, placed in a dedicated GatewaySubnet. All hybrid traffic enters and exits here.
  • Azure Firewall — placed in AzureFirewallSubnet, it inspects all east-west (spoke-to-spoke) and north-south (internet/on-prem) traffic. Every spoke uses a User Defined Route (UDR) pointing 0.0.0.0/0 to the firewall’s private IP.
  • Azure Bastion — placed in AzureBastionSubnet, it provides browser-based RDP/SSH to any VM in any peered spoke without requiring public IPs on the VMs.
  • Route Server — exchanges BGP routes with Network Virtual Appliances (NVAs) so dynamic routing updates propagate automatically across all spokes.
  • DNS Private Resolver — centralises DNS resolution for all private DNS zones, so every spoke resolves *.privatelink.azure.com correctly through the hub.
  • DDoS Protection Standard — applied at the subscription level, protects all public IPs across hub and spokes from volumetric attacks.

The Spoke VNets — what lives inside

Each spoke is an isolated workload boundary:

SpokeTypical contentsCIDR
ProductionApp VMs, AKS, SQL MI, App Service10.1.0.0/16
DevelopmentDev/test workloads, lower SKUs10.2.0.0/16
Shared servicesActive Directory DCs, monitoring agents10.3.0.0/16
DMZ / perimeterApp Gateway, WAF, API Management10.4.0.0/16

Spokes cannot talk to each other directly — traffic must traverse the hub firewall, giving you full inspection and control of lateral movement.


Traffic flow rules

All routing is forced through the hub firewall via UDRs applied to every spoke subnet:

Spoke VM → UDR (0.0.0.0/0 → Firewall IP)
Azure Firewall (inspect, allow/deny)
Destination (internet / on-prem / other spoke)

This means even spoke-to-spoke traffic — for example, production VM calling a shared services VM — travels hub → firewall → hub → destination, giving you a full audit trail.


Address space planning

Non-overlapping CIDRs are mandatory — VNet peering fails if address spaces overlap:

Hub VNet: 10.0.0.0/16
GatewaySubnet: 10.0.0.0/27 (min /27 for gateway)
AzureFirewallSubnet: 10.0.1.0/26 (min /26)
AzureBastionSubnet: 10.0.2.0/26 (min /26)
RouteServerSubnet: 10.0.3.0/27 (min /27)
Spoke 1 (prod): 10.1.0.0/16
Spoke 2 (dev): 10.2.0.0/16
Spoke 3 (shared svc): 10.3.0.0/16
Spoke 4 (DMZ): 10.4.0.0/16

When to use Azure Virtual WAN instead

Hub and spoke with manual VNet peering works well up to ~10 spokes. Beyond that, consider Azure Virtual WAN — a Microsoft-managed hub that automatically handles routing, peering, and gateway scaling across dozens of spokes and multiple regions, at the cost of less customisation flexibility.

Understanding Hub and Spoke Architecture in Azure

The Hub and Spoke—the gold standard of enterprise networking in Azure. It’s the architectural equivalent of a major airport hub (the Hub) connecting to various smaller regional airports (the Spokes).

In this setup, you centralize shared services to save money and improve security, while letting individual workloads live in their own isolated Spokes.


The Architecture Breakdown

ComponentResponsibilityTypical Resources
The HubCentral connectivity & security.Azure Firewall, VPN Gateway, ExpressRoute, Centralized Logging.
The SpokesSpecific workloads/applications.App Services, VMs, AKS Clusters, Databases.
The GlueConnecting the two.VNet Peering (Non-transitive by default).

1. How Private Endpoints fit into Hub & Spoke

This is where most engineers get a headache. You have two main choices for where to put your Private Endpoints:

Option A: The “Distributed” Model (Endpoints in Spokes)

You put the Private Endpoint directly in the same VNet as the VM/App that needs it.

  • Pros: Easier to set up initially; traffic stays within the Spoke.
  • Cons: Harder to manage at scale if you have 50 Spokes.

Option B: The “Centralized” Model (Endpoints in the Hub)

You put all Private Endpoints in a dedicated “Shared Services” subnet in the Hub.

  • Pros: One place to manage all private IPs; better for shared databases.
  • Cons: Requires “Transitive Routing”—traffic must go from Spoke A -> Hub -> Private Endpoint.

2. The DNS Challenge in Hub & Spoke

If your Private DNS Zone lives in the Hub, but your VM lives in the Spoke, the Spoke VM won’t be able to resolve the name unless you do one of these:

  1. Link the DNS Zone to every Spoke: You must create a Virtual Network Link between the Hub’s Private DNS Zone and every Spoke VNet.
  2. Centralized DNS Resolver: Use the Azure DNS Private Resolver in the Hub. Spokes point to the Hub’s IP for DNS, and the Hub handles the lookup.

3. Troubleshooting Hub & Spoke with Network Watcher

When a VM in a Spoke can’t talk to a Database in the Hub (or another Spoke), here is your checklist:

A. The “Gatekeeper” (VNet Peering)

Check the Peering status. If it doesn’t say Connected, nothing else matters.

  • Crucial Setting: For Spokes to use a VPN/ExpressRoute in the Hub, you must enable “Use Remote Gateways” on the Spoke and “Allow Gateway Transit” on the Hub.

B. The “Traffic Cop” (Next Hop)

In a Hub and Spoke, you often want traffic to go through an Azure Firewall in the Hub.

  • Use Network Watcher Next Hop: If the Next Hop is “Internet” instead of the “Virtual Appliance” (Firewall IP), your User-Defined Route (UDR) is missing or wrong.

C. The “Blind Spot” (Non-Transitivity)

VNet Peering is NOT transitive.

  • If Spoke A is peered to the Hub, and Spoke B is peered to the Hub, Spoke A cannot talk to Spoke B through the Hub automatically.
  • The Fix: You must use an NVA (Network Virtual Appliance) or Azure Firewall in the Hub to route that traffic, or peer Spoke A and B directly.

Summary Checklist for “Defense in Depth” Setup

  • [ ] Hub VNet: Contains Firewall and VPN/ER Gateway.
  • [ ] Spoke VNets: Peer to Hub with “Use Remote Gateways” enabled.
  • [ ] DNS: Private DNS Zones live in the Hub and are linked to all Spokes.
  • [ ] Routing: UDRs on Spoke subnets force 0.0.0.0/0 traffic to the Hub Firewall.
  • [ ] Monitoring: Network Watcher is enabled in both the Hub and Spoke regions.

You can route Spoke-to-Spoke traffic through a central Firewall, or your Spokes mostly be isolated from one another.

Understanding Microsoft Entra ID: The Future of IAM

First things first: If you’re looking for “Azure Active Directory” in the Azure portal today, you’ll find it under its new name: Microsoft Entra ID.

Microsoft rebranded the service to align it with their broader “Entra” identity and network access family. While the name has changed, the core functionality—managing users, groups, and permissions for the cloud—remains the same.


1. What is Microsoft Entra ID?

It is a Cloud-native Identity and Access Management (IAM) service. Unlike traditional Active Directory (which runs on local servers), Entra ID is designed for the internet.

  • It’s not just for Azure: It provides Single Sign-On (SSO) to thousands of apps like Salesforce, Zoom, and Google Workspace, not just Microsoft services.
  • The “Zero Trust” Engine: It is the primary tool used to verify every access request based on user identity, location, device health, and service risk.

2. Core Pillars of Identity

To master Entra ID, you need to understand these four concepts:

FeatureWhat it does
Users & GroupsThe “Who.” You can create cloud-only users or sync them from your local office (Hybrid).
Enterprise ApplicationsThe “Where.” This is where you connect 3rd-party apps so your users can log in with their work credentials.
Conditional AccessThe “Brain.” This allows you to say: “If the user is outside the office, they MUST use MFA to log in.”
App RegistrationsThe “Code.” If you are building your own app and want it to use Microsoft logins, you register it here.

3. Azure AD (Entra ID) vs. Windows Server AD

This is the most common point of confusion. They are different tools for different jobs:

  • Windows Server AD: Uses protocols like Kerberos and LDAP. It’s built for managing physical desks, local printers, and file shares inside a building.
  • Microsoft Entra ID: Uses modern web protocols like OAuth 2.0, SAML, and OpenID Connect. It’s built for web apps and remote work.

The Hybrid Reality: Most companies use Microsoft Entra Connect to sync their on-premises users up to the cloud. This way, a user has one password for their laptop and their email.


4. Key 2026 Features & Updates

As of now in 2026, several high-impact features have become standard:

  • Phish-Resistant MFA: Entra ID now heavily pushes FIDO2 security keys and certificate-based authentication to combat modern “MFA Fatigue” attacks.
  • Entra ID Protection: Uses AI to detect “Risky Sign-ins.” If a user logs in from New York and then 5 minutes later from London, the system automatically blocks the account (Impossible Travel).
  • External ID: A unified way to manage “Guests”—like contractors or customers—without cluttering your main employee directory.

Troubleshooting Tip: The “Sign-in Logs”

If a user can’t log in, don’t guess. Go to Microsoft Entra ID > Monitoring > Sign-in logs.

It will give you a specific failure reason, such as:

  • MFA requirement not met.
  • Blocked by a specific Conditional Access policy.
  • Account locked due to too many bad passwords.

Where you have a Cloud-only presence (like new SaaS apps or a startup) and a Hybrid presence (syncing from a local office)—your identity strategy becomes the bridge that holds everything together.

As of 2026, Microsoft Entra ID handles these two worlds using different synchronization engines.


1. The Hybrid Bridge: Connect vs. Cloud Sync

If you have an existing on-premises Active Directory (AD), you need to get those users into the cloud. You have two primary tools to do this:

FeatureMicrosoft Entra Connect (The Heavyweight)Microsoft Entra Cloud Sync (The Lightweight)
ArchitectureRuns a full SQL-based sync engine on a local server.Uses a tiny “Agent” on-prem; the engine lives in the cloud.
Best ForComplex setups, Exchange Hybrid, and “Writeback.”High availability, multiple forests, and fast setup.
WritebackSupports Password, Device, and Group writeback.Limited (mainly Password Writeback).
ControlDeep, granular rules and attribute filtering.Simplified, “set-it-and-forget-it” configuration.

2026 Recommendation: If you don’t need “Device Writeback” or complex Exchange Hybrid features, move to Cloud Sync. It is easier to maintain and doesn’t require you to manage a heavy local database.


2. The Cloud-Only Side: “Entra Joined”

For your new cloud-native resources (like a remote employee’s laptop or a new Azure VM), you should skip the local domain entirely.

  • Entra ID Joined: The device is managed entirely in the cloud. There is no local Domain Controller involved.
  • Benefits: Users can log in from anywhere without a VPN, and you manage the device via Microsoft Intune instead of old-school Group Policy (GPOs).

3. Managing “Both” (The Operational View)

When you are in a hybrid state, you are managing identities in two places at once. This requires a strict “Defense in Depth” approach to identity security.

A. The “UPN” Golden Rule

Your User Principal Name (e.g., john@company.com) must match exactly between your local AD and Entra ID. If they don’t match, your users will experience constant login prompts and “Account not found” errors.

B. Conditional Access (The Brain)

This is where you manage “Both” types of users. You can create a policy that says:

  • If the user is Synced (Hybrid) and on a corporate device, allow access.
  • If the user is Cloud-only and on an unknown device, require Phish-resistant MFA (FIDO2).

4. Troubleshooting “Both”

When something goes wrong in a hybrid/cloud environment, the culprit is usually the Sync Cycle.

  • Scenario: You updated a user’s name in local AD, but it hasn’t changed in Azure.
    • Check: Open the Synchronization Service Manager on your local server. It will show you if the “Export” to the cloud failed.
    • Manual Trigger: Use PowerShell to force a sync if you’re in a hurry:Start-ADSyncSyncCycle -PolicyType Delta
  • Scenario: A user is locked out of their cloud apps but can still log into their desk PC.
    • Check: Check the Entra Sign-in Logs. If it says “Authentication Failed,” but the password is correct, check if the Password Hash Sync (PHS) service is currently “Healthy” in the Entra Admin Center.

Summary Checklist for “Both”

  • [ ] Standardize UPNs: Ensure local mail attributes match cloud logins.
  • [ ] Enable SSPR: Set up Self-Service Password Reset with “Password Writeback” so cloud password changes update the local AD.
  • [ ] Modernize Devices: Aim for Entra Join for new PCs, leaving Hybrid Join only for legacy servers that strictly require it.
  • [ ] Monitor Health: Check the Hybrid Health Dashboard weekly to catch sync errors before users notice them.

Mastering Azure Networking: Private Endpoint Fixes

Private Endpoints are the “final boss” of Azure networking troubleshooting. They are incredibly secure because they keep traffic off the public internet, but they introduce a layer of complexity—specifically around DNS resolution.

If your Private Endpoint isn’t working, 9 times out of 10, it’s a DNS issue.


1. The “DNS Trap” (Check this first!)

When you create a Private Endpoint for a service (like Azure SQL or Storage), the service still has a public FQDN (e.g., mydb.database.windows.net).

  • The Problem: Your VM might be trying to connect to the Public IP instead of the Private IP of the endpoint.
  • The Test: Run nslookup <your-resource-name>.database.windows.net from your client VM.
    • Fail: It returns a Public IP. Your VM is trying to go out to the internet.
    • Success: It returns a Private IP (e.g., 10.0.0.5).

The Fix: Ensure your Private DNS Zone is correctly linked to your Virtual Network and that the A-record for the resource exists.


2. Using Network Watcher for Private Endpoints

Once you’ve confirmed DNS is pointing to the right IP, use Network Watcher to see why the “handshake” is failing.

IP Flow Verify

Check if an NSG is blocking the traffic.

  • Crucial Note: By default, Network Security Groups (NSGs) did not apply to Private Endpoints. However, Azure recently added a feature called “Network Policy for Private Endpoints.” * If this policy is Enabled on the subnet, your NSG could be blocking the traffic. Run IP Flow Verify to see if a “Deny” rule is stopping your VM from hitting the Private Endpoint’s IP.

Connection Troubleshoot

This is the most effective tool here because it tests the entire path.

  • Setup: Set the Source as your VM and the Destination as the Private IP of the endpoint.
  • What it reveals: It will tell you if the issue is a platform-level problem or a routing loop.

3. The “Hidden” Subnet Setting

A common “gotcha” when debugging Private Endpoints is the Subnet Private Endpoint Network Policy.

  1. Go to your Virtual Network -> Subnets.
  2. Click on the subnet where your Private Endpoint lives.
  3. Look for “Private endpoint network policy”.
    • If you want to use NSGs to filter traffic to the Private Endpoint, this must be set to “Enabled”.
    • If it’s disabled, your NSGs are ignored for that endpoint, which can be a security hole (or a source of confusion during debugging).

4. Resource-Level Firewall

Even if the network is clear, the Target Resource (the SQL DB, the Key Vault, etc.) has its own internal “firewall” settings.

  • The Debug Step: Go to the “Networking” blade of the resource itself (e.g., the Storage Account).
  • The Check: Make sure “Public Network Access” is set to “Disabled” or “Enabled from selected virtual networks and IP addresses”, and ensure your Private Endpoint is listed as “Approved” in the Private Endpoint Connections tab.

Troubleshooting Checklist

SymptomProbable CauseTool to Use
nslookup returns a Public IPDNS Zone not linked to VNetnslookup or dig
nslookup returns Private IP, but ping failsNSG blocking traffic (if policy enabled)IP Flow Verify
Connection works from one VNet but not anotherMissing VNet Peering or DNS linkingNext Hop
Connection times out intermittentlyAsymmetric routing or NVA interferencePacket Capture

Peer Tip: Don’t bother pinging a Private Endpoint. Most Azure PaaS services (like SQL or App Service) disable ICMP (ping) at the platform level. You can have a perfect connection and ping will still time out. Use Test-NetConnection -Port 443 (for HTTPS) or 1433 (for SQL) instead.

If are you seeing a “Connection Refused” error, or is the request simply timing out, that distinction usually tells you if the problem is the Firewall or the Routing.

When we talk about Private Endpoints, the “both” almost always refers to the two halves of the puzzle: DNS (the name) and Connectivity (the path). If one works but the other doesn’t, the connection fails.


1. The DNS Side (The “Who”)

This is where 90% of Private Endpoint issues live. You need your computer to look up mydb.database.windows.net and get a Private IP (like 10.0.0.5) instead of a Public IP.

How it works:

  • The Private DNS Zone: Azure uses a special zone (e.g., privatelink.database.windows.net) to override the public internet record.
  • Virtual Network Links: For your VM to “see” that private zone, the Private DNS Zone must be linked to the Virtual Network where the VM lives.
  • The CNAME Magic: Azure uses a CNAME chain. It goes:mydb.database.windows.net -> mydb.privatelink.database.windows.net -> 10.0.0.5.

Troubleshooting the DNS “Half”:

  • The Tool: Use nslookup or dig.
  • The “Tell”: If you see a public IP or an error saying the name can’t be resolved, your VNet Link is missing or your DNS server (if using custom DNS) isn’t forwarding requests to the Azure WireServer IP (168.63.129.16).

2. The Connectivity Side (The “How”)

Even if you have the right IP, the “wires” (virtual or otherwise) must allow the traffic to flow.

The Key Hurdles:

  • NSG Support (Network Policy): By default, Network Security Groups (NSGs) ignore Private Endpoints. If you want to block or allow traffic to a Private Endpoint using an NSG, you must Enable Private Endpoint Network Policy on the subnet.
  • VNet Peering: If your VM is in VNet A and your Private Endpoint is in VNet B, you need VNet Peering set up. Furthermore, VNet A must also be linked to the Private DNS Zone in VNet B.
  • The Resource Firewall: Some services (like Storage Accounts) have a “Firewalls and Virtual Networks” tab. You must ensure that “Public Network Access” is disabled or restricted, but the Private Endpoint Connection itself is marked as Approved.

How to Debug “Both” Simultaneously

If you are staring at a “Timed Out” error, follow this logic:

  1. Test DNS: Run nslookup.
    • Public IP? Fix your DNS Private Zone/Linking.
    • Private IP? DNS is fine; move to step 2.
  2. Test the Path: Run Test-NetConnection -ComputerName <FQDN> -Port 443.
    • TcpTestSucceeded : False? You have a routing or NSG issue.
    • TcpTestSucceeded : True? The network is perfect; the problem is likely your application’s credentials or configuration.

Comparison at a Glance

ComponentGoalPrimary Failure Mode
DNSTranslate the URL to a 10.x.x.x IP.Returning a Public IP (Internet-facing).
ConnectivityGet the packet from VM to that IP.NSG “Deny” rules or missing VNet Peerings.

Peer Tip: When setting up Private Endpoints for a team, always use Azure Private DNS Zones integrated with the service. If you try to manage host files on individual VMs to “hack” the DNS, you will create a maintenance nightmare that will eventually break.

Troubleshooting SQL Connection Issues with Network Watcher

Let’s walk through a classic, “everything is on fire” scenario. This is the bread and butter of why Network Watcher exists.

The Scenario: “The Database is Down (But it’s Not)”

The Setup: You have a 3-tier application. Your Frontend Web VM is trying to connect to a Backend SQL VM on port 1433.

The Symptom: The web app is throwing “Connection Timed Out” errors. Your database admin swears the SQL server is up and running perfectly.

Here is how you use Network Watcher to find the culprit in 5 minutes.


Step 1: The “Bouncer” Check (IP Flow Verify)

First, you need to know if a firewall rule is blocking the traffic.

  • Action: Run IP Flow Verify.
  • Input: Source IP (Web VM), Destination IP (SQL VM), Port 1433, Protocol TCP.
  • The Result: Network Watcher tells you: “Denied by Security Rule: DefaultRule_DenyAllInBound”.
  • The Fix: You realize someone created a high-priority NSG rule that accidentally blocked all traffic to the backend subnet. You fix the rule.

Step 2: The “GPS” Check (Next Hop)

Traffic is now “Allowed” by the NSG, but the app still can’t connect. Now you check if the packets are actually being routed to the right place.

  • Action: Run Next Hop.
  • The Result: It shows the Next Hop is a Virtual Appliance (NVA) (like a Palo Alto or Fortigate firewall) instead of the Virtual Network.
  • The Insight: You find an old User-Defined Route (UDR) that is forcing traffic through a firewall that isn’t configured to handle SQL traffic.
  • The Fix: You update the Route Table to allow direct VNet-to-VNet communication for the SQL port.

Step 3: The “All-in-One” Diagnostic (Connection Troubleshoot)

The rules look good, the route looks good, but it’s still failing. You’re starting to sweat.

  • Action: Run Connection Troubleshoot.
  • The Result: It checks everything (DNS, Routing, NSG) and reports: “Status: Reachable” at the network level, but “Port unreachable” at the OS level.
  • The Insight: This is the “Eureka” moment. The network is fine, but the application is rejecting the connection.
  • The Fix: You log into the SQL VM and realize the Windows Firewall is turned on and blocking 1433, or the SQL service isn’t listening on the public IP.

Step 4: The “Deep Dive” (Packet Capture)

If Connection Troubleshoot had said “Network reachable” but you were seeing weird data corruption or intermittent drops, you’d go nuclear.

  • Action: Start a Remote Packet Capture on both VMs.
  • The Result: You download the .cap file and open it in Wireshark.
  • The Insight: You see a “TCP Reset” packet being sent halfway through the handshake. This proves a middle-box (like a Load Balancer) is killing the connection due to an idle timeout.

Summary of the “Defense in Depth” Workflow

ToolAsk yourself…
IP Flow Verify“Is the Bouncer (NSG) letting me in?”
Next Hop“Is the GPS (Routing) sending me to the right house?”
NSG Flow Logs“Did the packet actually arrive at the gate?”
Connection Troubleshoot“Is the whole path from A to B clear?”
Packet Capture“What exactly are these two talking about?”

Peer Tip: Always start with IP Flow Verify. In 90% of Azure networking cases, the problem is a “Deny” rule in a Network Security Group that someone forgot existed.

Top Tools in Azure Network Watcher for Network Troubleshooting

If Azure Monitor is the “Central Nervous System,” Azure Network Watcher is the “Private Investigator.”

While regular monitoring tells you if a server is up, Network Watcher tells you why two resources can’t talk to each other, even though they both seem healthy. It focuses specifically on the IaaS (Infrastructure as a Service) networking layer—VNets, Subnets, Network Security Groups (NSGs), and Gateways.


The “Big Three” Troubleshooting Tools

Most people use Network Watcher for these three specific “Oh no, why isn’t this working?” scenarios:

1. IP Flow Verify

Have you ever been certain your Firewall/NSG rules were correct, but traffic still wasn’t getting through?

  • What it does: You give it a source/destination IP and port. It runs a simulation and tells you exactly which rule is Allowing or Denying that traffic.
  • The “Win”: No more scrolling through 50 NSG rules to find the one “Deny All” hidden at the bottom.

2. Next Hop

Sometimes a packet leaves a VM but never arrives, not because of a firewall, but because it got lost in the routing.

  • What it does: It tells you where a packet is headed next (e.g., Internet, Virtual Appliance, or VNet Gateway).
  • The “Win”: It helps you identify if a User-Defined Route (UDR) is accidentally sending your database traffic into a “black hole.”

3. Connection Troubleshoot

This is the “All-in-One” button. It checks the connectivity between a source (VM or Application Gateway) and a destination (VM, URI, or IP).

  • What it does: It checks for DNS issues, routing problems, and port blockages all at once.

Advanced Monitoring & Logging

Network Watcher also handles the “heavy lifting” of network data analysis:

  • NSG Flow Logs: This records every single IP flow passing through your Network Security Groups. It tells you who talked to whom, over which port, and whether it was allowed.
    • Pair it with: Traffic Analytics to turn that raw data into a beautiful map showing where your global traffic is coming from.
  • Packet Capture: If you need to go “Full Matrix,” you can trigger a remote packet capture on a VM. It creates a .cap file that you can open in Wireshark to see exactly what is happening at the byte level.
  • Topology: This automatically generates a visual map of your entire network. If you inherited a messy environment, this is how you figure out what is actually connected to what.

Crucial Things to Know

  1. It’s Regional: Network Watcher must be enabled for every region where you have resources. If you have VMs in East US but Network Watcher is only on in West US, you can’t troubleshoot the East US VMs.
  2. The “NetworkWatcherRG”: You might see a resource group with this name appear automatically. Don’t delete it. That’s where Azure stores the Network Watcher instances for your regions.
  3. Cost: Most of the diagnostic tools (IP Flow Verify, Next Hop) are free. However, Packet Captures and NSG Flow Logs incur storage costs (and processing costs if you use Traffic Analytics).

Peer Tip: If you’re ever stuck on a “Communication Link Failure” error between an App and a Database, run IP Flow Verify first. 90% of the time, it’s a missing NSG rule for the specific port you’re using.

In the cloud, “defense in depth” means assuming that at some point, one of your layers will be bypassed. Monitoring is your way of making sure that when it happens, you aren’t the last one to find out.

For a robust setup, you want to layer your visibility from the outside (the internet) all the way down to the code.


The “Defense in Depth” Monitoring Stack

Layer 1: The Perimeter (Network Watcher + NSG)

This is your “security camera” at the front gate.

  • NSG Flow Logs: Enable these for all critical subnets. It records every hit (and every block) on your firewalls.
  • Traffic Analytics: This is a must-add to Flow Logs. It visualizes the data so you can see if, for example, a random IP in a country you don’t do business with is hammering your SSH port.

Layer 2: The House (Azure Monitor + VM Insights)

This monitors the health of the “building” itself.

  • Azure Activity Logs: These track who did what in the Azure Portal. If someone deletes a production database, the Activity Log is where you find the “fingerprints.”
  • Resource Health: Set up alerts for when Azure’s own infrastructure has an issue (e.g., a hardware failure in the data center).

Layer 3: The Interior (Azure Monitor Agent – AMA)

Once inside the VM, you need to know what’s happening in the “rooms.”

  • Syslog (Linux) / Event Logs (Windows): Use the AMA to stream these to Log Analytics. You’re looking for failed login attempts or unauthorized “sudo” commands.
  • Process Monitoring: VM Insights can show you if a strange, unnamed process is suddenly eating 90% of your CPU (a classic sign of crypto-jacking).

Layer 4: The Residents (Application Insights)

This is monitoring the behavior of the people (the code) inside.

  • Exception Tracking: If your app starts throwing 401 Unauthorized errors suddenly, App Insights will tell you if it’s a bug or a brute-force credential stuffing attack.
  • User Behavior: Monitor for unusual spikes in traffic to specific API endpoints.

Organizing Your “Command Center”

To keep this from becoming a chaotic mess of alerts, follow these three best practices:

StrategyActionBenefit
CentralizeSend all logs to a single Log Analytics Workspace.Allows you to “correlate” data (e.g., see a network spike and a CPU spike at the same time).
Action GroupsGroup your alerts by “Severity.”SEV 0 goes to a phone call; SEV 3 just sends a quiet email or a Slack message.
Smart DefaultsUse Azure Policy to enforce monitoring.Automatically installs the Monitoring Agent on any new VM created, so you never have “blind spots.”

The “Final Boss” of Defense: Microsoft Sentinel

Since you mentioned “Defense in Depth,” you should eventually look at Microsoft Sentinel. It’s a SIEM (Security Information and Event Management) that sits on top of all the tools we’ve discussed.

It uses AI to look at your Network Watcher logs, your VM logs, and your App Insights and says: “Hey, I saw a weird login on this VM, and then five minutes later, that VM started sending weird traffic to an unknown IP. This looks like an attack.”


Peer Tip: Don’t try to alert on everything at once. You’ll get “Alert Fatigue” and start ignoring your inbox. Start with Availability (is it up?) and Errors (is it broken?), then refine from there.

Understanding Azure Monitor: Your Cloud’s Central Nervous System

Monitoring in Azure isn’t just one single tool; it’s a massive ecosystem designed to make sure your applications aren’t screaming for help in a language you don’t understand. At the heart of it all is Azure Monitor.

Think of Azure Monitor as the “Central Nervous System” of your cloud environment. It collects, analyzes, and acts on telemetry from both your Azure and on-premises environments.


The Two Pillars of Azure Monitor

Azure Monitor relies on two fundamental types of data to tell you what’s going on:

FeatureMetricsLogs
What is it?Numerical values over time (Standardized).Records of events (Structured or Unstructured).
SpeedNear real-time; great for alerting.Slower to ingest but deep for analysis.
AnalogyThe speedometer in your car.The mechanic’s detailed service history.
StorageTime-series database.Log Analytics Workspace (Kusto/KQL).

Core Components and Tools

1. Application Insights (APM)

If you’re a developer, this is your best friend. It monitors your live web applications. It detects performance anomalies, tracks exceptions, and helps you understand what users are actually doing in your app.

2. Log Analytics

This is the “engine room.” It uses Kusto Query Language (KQL). If you want to find out why a specific VM crashed at 3:00 AM last Tuesday, you’ll be writing a KQL query here.

Note: If you haven’t learned KQL yet, it’s surprisingly intuitive—like SQL and Excel had a very powerful baby.

3. VM & Container Insights

These are specialized “lenses” for your infrastructure:

  • VM Insights: Monitors the health and performance of your virtual machines (Windows/Linux).
  • Container Insights: Deep visibility into Azure Kubernetes Service (AKS) or Azure Container Instances.

Taking Action (Before Things Break)

Monitoring is useless if you’re the last to know there’s a problem.

  • Alerts: You can set triggers based on metrics (e.g., “CPU > 80%”) or log searches. These can send emails, SMS, or even trigger Azure Functions or Logic Apps to attempt a “self-healing” fix.
  • Autoscale: Azure Monitor can automatically add or remove resources based on demand, saving you money and keeping your app responsive.

Visualizing the Data

Raw data is ugly. Azure gives you a few ways to make it pretty:

  • Dashboards: Best for “Single Pane of Glass” views in the Azure Portal.
  • Workbooks: Think of these as interactive, data-driven reports. They are much more flexible than standard dashboards and can combine text, queries, and parameters.
  • Grafana Integration: For the hardcore monitoring enthusiasts, Azure has a managed Grafana service that plugs directly into Azure Monitor.

Going for the “full-stack” visibility approach. It’s the difference between knowing the engine is running and knowing exactly why a specific passenger’s seat heater isn’t working.

Here is how you tackle both ends of the spectrum in Azure.


1. The Infrastructure Layer: VM Health Alerts

To monitor VMs, you’re looking at Metric Alerts. These are fast, lightweight, and trigger as soon as a threshold is crossed.

The Setup

  1. The Agent: Ensure the Azure Monitor Agent (AMA) is installed on your VMs. This allows you to collect “Guest-level” metrics like specific memory usage or disk space that Azure can’t see from the outside.
  2. The Alert Rule: You’ll create an Alert Rule based on a signal.
    • Common Signals: CPU Percentage, Available Memory, or “Heartbeat” (to know if the VM is even online).
  3. The Action Group: This defines who gets bothered when the alert fires.
    • Email/SMS: For the “fix it now” vibes.
    • Logic App/Automation: For the “self-healing” vibes (e.g., restarting the service automatically).

Recommended “Starter” Alerts

SignalLogicWhy?
Percentage CPUAverage > 90% for 5 minsIdentifies performance bottlenecks or runaway processes.
Available Memory< 10% for 5 minsPrevents “Out of Memory” crashes.
VM HeartbeatNo data for 1 minuteTells you the VM or the OS has completely hung.

2. The App Layer: Application Insights (APM)

This is where the magic happens for developers. App Insights provides Distributed Tracing, allowing you to see the journey of a single request across multiple services.

Deep Tracing Capabilities

  • Application Map: A visual flowchart showing how your web app talks to databases, APIs, and external services. It highlights exactly where the “red” (errors) or “yellow” (slowness) is happening.
  • End-to-End Transaction Tracing: You can click on a single failed request and see the entire call stack—exactly which line of code threw the exception and what the SQL query looked like at that moment.
  • Live Metrics Stream: A “Matrix-style” scrolling view of your app’s health in real-time (latency, request rates, etc.)—perfect for monitoring during a new code deployment.

Pro Tip: Use Auto-instrumentation if you don’t want to touch your code. For many languages (.NET, Java, Node.js), you can just flip a switch in the Azure Portal to start collecting data.


3. The “Unified View”: Azure Workbooks

Since you’re doing both, you don’t want to jump between ten different screens. Use Azure Workbooks to create a custom “NOC” (Network Operations Center) dashboard.

  • Top half: VM Health (CPU sparks, disk space bars).
  • Bottom half: App Health (Request latencies, 500-error counts).
  • The Result: You can see if a spike in App Errors is being caused by a CPU bottleneck on the underlying VM.

The “Secret Sauce”: KQL

Regardless of whether it’s a VM log or an App Insight trace, everything ends up in a Log Analytics Workspace. To get the most out of your data, you’ll eventually want to run a query like this:

Code snippet

// Find the top 5 slowest requests in the last hour
requests
| where success == false
| summarize count() by name, resultCode
| order by count_ desc