Skip to content

Monitoring, Diagnostics, and KQL Queries ​

Use this page to validate observability coverage across AVD control-plane resources and Azure Local session-host workloads.

1) Diagnostic categories by resource ​

ResourceRecommended categoriesDestination
Host PoolManagement, Error, CheckpointLog Analytics
Application GroupManagement, ErrorLog Analytics
WorkspaceManagement, ErrorLog Analytics
Key VaultAuditEventLog Analytics
Azure ActivitySubscription activity logsLog Analytics

2) Common Log Analytics tables ​

TablePurpose
WVDConnectionsSession connection and reconnection events
WVDErrorsService and agent-side AVD errors
WVDAgentHealthStatusSession host agent state and freshness
WVDCheckpointsBroker/session workflow checkpoints
HeartbeatVM liveness and MMA/AMA heartbeat
AzureDiagnosticsUnified diagnostics for configured Azure resources
SecurityEventSecurity events from Windows session hosts

3) Health and availability queries ​

Agent health by host pool ​

kusto
WVDAgentHealthStatus
| where TimeGenerated > ago(1h)
| summarize LastSeen=max(TimeGenerated), Hosts=dcount(SessionHostName) by HostPoolName
| order by LastSeen asc

Session host heartbeat freshness ​

kusto
Heartbeat
| where TimeGenerated > ago(15m)
| summarize LastHeartbeat=max(TimeGenerated) by Computer
| extend MinutesSinceHeartbeat = datetime_diff('minute', now(), LastHeartbeat)
| order by MinutesSinceHeartbeat desc

Error summary by symbol ​

kusto
WVDErrors
| where TimeGenerated > ago(24h)
| summarize Errors=count() by CodeSymbolic, ServiceError
| order by Errors desc

4) User experience queries ​

kusto
WVDConnections
| where TimeGenerated > ago(7d)
| summarize Connections=count(), Users=dcount(UserName) by HostPoolName, bin(TimeGenerated, 1h)
| order by TimeGenerated asc

Top reconnect users ​

kusto
WVDConnections
| where TimeGenerated > ago(24h)
| summarize Connections=count() by UserName, HostPoolName
| order by Connections desc
| take 25

5) FSLogix and profile reliability queries ​

FSLogix warnings/errors from Windows events ​

kusto
Event
| where TimeGenerated > ago(24h)
| where Source == 'frxsvc'
| summarize Events=count() by EventLevelName, Computer
| order by Events desc

Profile attach error trend ​

kusto
Event
| where TimeGenerated > ago(7d)
| where Source == 'frxsvc' and EventLevelName in ('Error','Warning')
| summarize Count=count() by bin(TimeGenerated, 1h), Computer
| order by TimeGenerated asc

6) Cost sampling queries ​

Ingestion estimate by table (last 24h) ​

kusto
Usage
| where TimeGenerated > ago(24h)
| summarize GB=sum(Quantity) / 1000 by DataType
| order by GB desc

Daily ingestion trend ​

kusto
Usage
| where TimeGenerated > ago(30d)
| summarize GB=sum(Quantity) / 1000 by bin(TimeGenerated, 1d)
| order by TimeGenerated asc

7) Alerting recommendations ​

  • Agent health staleness over 10 minutes.
  • Error rate spike over rolling baseline.
  • Heartbeat missing for critical session-host groups.
  • Log Analytics ingestion anomaly (sharp day-over-day increase).

8) Operational run frequency ​

  • Hourly: host heartbeat and active error checks.
  • Daily: connection trend and ingestion checks.
  • Weekly: host-pool balancing and user-density review.

References ​

Released under the MIT License.