Collect and query Graphics Data for Azure Virtual Desktop connections – Now in Public Preview

Microsoft

Graphics data logs for Azure Virtual Desktop are in public preview! You can now set up the diagnostics table in Azure Log Analytics and collect graphics data for your Azure Virtual Desktop connections. The graphics data table generates information whenever end-to-end delay and dropped frames percentages fall below a healthy threshold for Azure Virtual Desktop. This table helps administrators understand factors across the server, client, and network that could be contributing to slow or choppy experiences for a user.  

 

Set up 

To start collecting graphics data, you’ll need to ensure your Azure Virtual Desktop host pools have diagnostics enabled and that the Connection Graphics Data Logs Preview table is selected. You can check and modify these settings in the Azure Portal: 

  1. Visit your Azure Virtual Desktop Host Pools in the Azure Portal. 
  2. Select the host pool where you’d like to set up network data, then select Diagnostic settings. 
  3. Select Edit setting, or +add diagnostic setting if you don’t have a diagnostic setting already. 
  4. Select allLogs or the individual categories you would like to collect. Confirm Connection Graphics Data Logs Preview is selected. 
  5. Select a destination (Log Analytics workspace for Azure Virtual Desktop Insights users) 
  6. Save and repeat for other host pools. 

 

Sample queries  

You can run these sample Kusto queries in the Log Analytics query editor. For each query, replace alias@domain, start_time, end_time, VmName, or HostPoolName with the information you would like to search for. 

 

Search graphics data by a specific user or users

 

 

 

// Query for a specific user or group of users 
let Users = datatable(User:string) 
[
	"alias@domain.com", 
	"alias@domain.com"
];
WVDConnectionGraphicsDataPreview
| join kind = leftouter
(
	WVDConnections
	| extend Protocol = iff(UdpUse in ("<>", "0"), "TCP", "UDP")
	| extend GatewayRegion = iff(GatewayRegion in ("<>", ""), "Unknow", GatewayRegion)
	| summarize GatewayRegion = take_anyif(GatewayRegion, GatewayRegion != "Unknown") by CorrelationId, UserName, SessionHostName, Protocol
) on CorrelationId
| where UserName in (Users)
| project-away CorrelationId1
| project-reorder TimeGenerated, UserName, Protocol, GatewayRegion, SessionHostName

 

 

 

 

Search graphics data in a specific time range

 

 

 

// Query for a specific time range
let start_time = todatetime('2022-09-01 00:00:00.0');
let end_time = todatetime('2022-09-15 00:00:00.0');
WVDConnectionGraphicsDataPreview
| join kind = leftouter
(
	WVDConnections
	| extend Protocol = iff(UdpUse in ("<>", "0"), "TCP", "UDP")
	| extend GatewayRegion = iff(GatewayRegion in ("<>", ""), "Unknown", GatewayRegion)
	| summarize GatewayRegion = take_anyif(GatewayRegion, GatewayRegion != "Unknown") by CorrelationId, UserName, SessionHostName, Protocol
) on CorrelationId
| where TimeGenerated between (start_time .. end_time)
| project-away CorrelationId1
| project-reorder TimeGenerated, UserName, Protocol, GatewayRegion, SessionHostName

 

 

 

 

Search graphics data for a specific session host

 

 

 

// Query for a specific Session Host
let VmName = "";
WVDConnectionGraphicsDataPreview
| join kind = leftouter
(
	WVDConnections
	| extend Protocol = iff(UdpUse in ("<>=", "0"), "TCP", "UDP")
	| extend GatewayRegion = iff(GatewayRegion in ("<>", ""), "Unknown", GatewayRegion)
	| summarize GatewayRegion = take_anyif(GatewayRegion, GatewayRegion != "Unknown") by CorrelationId, UserName, SessionHostName, Protocol
) on CorrelationId
| where SessionHostName == VmName
| project-away CorrelationId1
| project-reorder TimeGenerated, UserName, Protocol, GatewayRegion, SessionHostName

 

 

 

 

Search graphics data for a specific host pool

 

 

 

// Query for a specific Host Pool
let HostPoolName = "";
WVDConnectionGraphicsDataPreview
| join kind = leftouter
(
    WVDConnections
    | extend Protocol = iff(UdpUse in ("<>", "0"), "TCP", "UDP")
    | extend GatewayRegion = iff(GatewayRegion in ("<>", ""), "Unknown", GatewayRegion)
                    | summarize GatewayRegion = take_anyif(GatewayRegion, GatewayRegion != "Unknown") by CorrelationId, UserName, SessionHostName, Protocol
) on CorrelationId
| where extract("/subscriptions/.*/resourcegroups/.*/providers/.*/hostpools/(.*)", 1, _ResourceId) == HostPoolName
| project-away CorrelationId1
| project-reorder TimeGenerated, UserName, Protocol, GatewayRegion, SessionHostName

 

 

 

 

Query all graphics data and correlate with username, protocol, gateway region, and session host name

 

 

// Query all rows from graphics data table and add username, protocol, gateway region, and session host name information from connections table
WVDConnectionGraphicsDataPreview 
| join kind = leftouter
(
    WVDConnections
    | extend Protocol = iff(UdpUse in ("<>", "0"), "TCP", "UDP")
    | extend GatewayRegion = iff(GatewayRegion in ("<>", ""), "Unknown", GatewayRegion)
    | summarize GatewayRegion = take_anyif(GatewayRegion, GatewayRegion != "Unknown") by CorrelationId, UserName, SessionHostName, Protocol
) on CorrelationId
| project-away CorrelationId1
| project-reorder TimeGenerated, UserName, Protocol, GatewayRegion, SessionHostName

 

 

 

Please feel free to submit feedback here or leave questions on this post! To learn more about the Connection Graphics Data Logs Preview and other connection quality resources, see Connection quality in Azure Virtual Desktop  or our Network Data announcement from April. 

0 Replies