{ "version": "Notebook/1.0", "items": [ { "type": 1, "content": { "json": "# Windows Virtual Desktop" }, "name": "header" }, { "type": 9, "content": { "version": "KqlParameterItem/1.0", "crossComponentResources": [ "{Subscription}" ], "parameters": [ { "id": "b859a03f-2283-43dd-8536-42714bbfced6", "version": "KqlParameterItem/1.0", "name": "Subscription", "type": 6, "isRequired": true, "query": "summarize Count = count() by subscriptionId\r\n| project value = strcat('/subscriptions/', subscriptionId), label = subscriptionId, Selected = Count >= 0", "crossComponentResources": [ "value::selected" ], "typeSettings": { "additionalResourceOptions": [] }, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" }, { "id": "bab77e5f-3597-4d1f-beb4-878b8b1aab3e", "version": "KqlParameterItem/1.0", "name": "SubscriptionID", "type": 6, "isRequired": true, "query": "resourcecontainers\r\n | where type == \"microsoft.resources/subscriptions\"\r\n | summarize Count = count() by subscriptionId\r\n | project Label = subscriptionId, Id = subscriptionId, Selected = Count >= 0", "crossComponentResources": [ "{Subscription}" ], "isHiddenWhenLocked": true, "typeSettings": { "additionalResourceOptions": [] }, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" }, { "id": "8df9c309-e7d1-43ad-b2ad-2d190c0c4e60", "version": "KqlParameterItem/1.0", "name": "Workspace", "type": 5, "isRequired": true, "multiSelect": true, "quote": "'", "delimiter": ",", "query": "where type =~ 'microsoft.operationalinsights/workspaces'\r\n| summarize by id, name\r\n| project id", "crossComponentResources": [ "{Subscription}" ], "typeSettings": { "additionalResourceOptions": [ "value::all" ] }, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", "value": [ "" ], "label": "Log Analytics Workspace" }, { "id": "2e3dfd9b-2d0f-4feb-94e8-107f220c4e28", "version": "KqlParameterItem/1.0", "name": "ResourceGroup", "type": 5, "isRequired": true, "query": "resources\r\n| where type contains \"desktopvirtualization\"\r\n| summarize Count = count() by resourceGroup\r\n| project Label = resourceGroup, Id = resourceGroup, Selected = Count >= 0", "crossComponentResources": [ "{Subscription}" ], "typeSettings": { "additionalResourceOptions": [] }, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" }, { "id": "951b5870-e216-45c6-b159-34150868a46e", "version": "KqlParameterItem/1.0", "name": "HostPool", "type": 5, "isRequired": true, "query": "resources\r\n| where type == \"microsoft.desktopvirtualization/hostpools\"\r\n| summarize Count = count() by name, id\r\n| project Label = name, Id = id, Selected = Count >= 1", "crossComponentResources": [ "{Subscription}" ], "typeSettings": { "additionalResourceOptions": [] }, "timeContext": { "durationMs": 0 }, "timeContextFromParameter": "TimeRange", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" }, { "id": "966a75f4-f4a4-4404-b649-67da45ddf636", "version": "KqlParameterItem/1.0", "name": "WVDHosts", "type": 5, "isRequired": true, "multiSelect": true, "quote": "'", "delimiter": ",", "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"{SubscriptionID}/resourcegroups/{ResourceGroup}/providers/Microsoft.DesktopVirtualization/hostpools/{HostPool}/sessionhosts?api-version=2019-01-23-preview\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"$.name\",\"columnid\":\"Name\"}]}}]}", "value": [ "value::all" ], "typeSettings": { "additionalResourceOptions": [ "value::all" ] }, "timeContext": { "durationMs": 0 }, "timeContextFromParameter": "TimeRange", "queryType": 12 }, { "id": "04a8ead2-1fb2-4666-a7b0-6d92e3c29b46", "version": "KqlParameterItem/1.0", "name": "TimeRange", "type": 4, "typeSettings": { "selectableValues": [ { "durationMs": 14400000 }, { "durationMs": 43200000 }, { "durationMs": 86400000 }, { "durationMs": 172800000 }, { "durationMs": 259200000 }, { "durationMs": 604800000 }, { "durationMs": 1209600000 }, { "durationMs": 2592000000 }, { "durationMs": 5184000000 }, { "durationMs": 7776000000 } ], "allowCustom": true }, "value": { "durationMs": 2592000000 } } ], "style": "pills", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" }, "name": "parameters - 2" }, { "type": 1, "content": { "json": "This workbook relies on the following:\r\n* Windows Virtual Desktop spring release with WCD Diagnostic Logs enabled\r\n* Azure Monitor VMInsights with Map enabled\r\n* Azure Monitor Log Analytics workspace, with the performance counter and event log collection as detailed in *[this document](dummyurl)*.\r\n* AAD Diagnostic Logs enabled" }, "conditionalVisibility": { "parameterName": "DebugMode", "comparison": "isEqualTo", "value": "True" }, "name": "abouttext" }, { "type": 11, "content": { "version": "LinkItem/1.0", "style": "tabs", "links": [ { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "Overview", "subTarget": "Overview", "style": "link" }, { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "Session Details", "subTarget": "SessionDetails", "style": "link" }, { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "Session Diagnostics", "subTarget": "SessionDiagnostics", "style": "link" }, { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "User Specific Reporting", "subTarget": "UserSpecific", "style": "link" }, { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "Session Performance", "subTarget": "SessionPerformance", "style": "link" }, { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "Host Performance", "subTarget": "HostPerformance", "style": "link" }, { "cellValue": "selectedTab", "linkTarget": "parameter", "linkLabel": "Disk Performance", "subTarget": "DiskPerformance", "style": "link" } ] }, "name": "tabs" }, { "type": 12, "content": { "version": "NotebookGroup/1.0", "groupType": "editable", "items": [ { "type": 1, "content": { "json": "# WVD Overview" }, "name": "text - 4" }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "resources\r\n| where type contains \"desktopvirtualization\"\r\n| parse type with * \"microsoft.desktopvirtualization/\" TypeName\r\n| summarize Resources=count() by TypeName\r\n| order by Resources desc", "size": 1, "title": "WVD Resources", "noDataMessage": "No resources detected in the selected subscription.", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", "crossComponentResources": [ "{Subscription}" ], "visualization": "tiles", "tileSettings": { "showBorder": false, "titleContent": { "columnMatch": "TypeName", "formatter": 1 }, "leftContent": { "columnMatch": "Resources", "formatter": 12, "formatOptions": { "palette": "auto" }, "numberFormat": { "unit": 17, "options": { "maximumSignificantDigits": 3, "maximumFractionDigits": 2 } } } } }, "customWidth": "25", "showPin": true, "name": "wvdresources", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nWVDConnections\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, SessionHostName)\r\n| where Computername in (WVDHosts)\r\n|sort by TimeGenerated asc, CorrelationId\r\n|summarize Sessions = dcount(CorrelationId) by bin(TimeGenerated, 1d)", "size": 1, "title": "Daily Connections - {HostPool} - Rolling 7 days", "noDataMessage": "No sessions detected in the last 7 days.", "timeContext": { "durationMs": 604800000 }, "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "barchart", "chartSettings": { "xAxis": "TimeGenerated" } }, "customWidth": "25", "showPin": true, "name": "rollingsessioncount", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "SigninLogs\r\n| where ResourceDisplayName == \"Windows Virtual Desktop\"\r\n| summarize arg_max(CorrelationId, *) by CorrelationId\r\n| project [\"City\"]= LocationDetails.city, LocationDetails.geoCoordinates.longitude, LocationDetails.geoCoordinates.latitude", "size": 1, "title": "Logon Location Heatmap - Rolling 7 days", "noDataMessage": "No logons detected in the last 7 days, or AAD Signin logs have not been configured for collection", "noDataMessageStyle": 2, "timeContext": { "durationMs": 604800000 }, "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "map", "mapSettings": { "locInfo": "LatLong", "latitude": "LocationDetails_geoCoordinates_latitude", "longitude": "LocationDetails_geoCoordinates_longitude", "sizeSettings": "City", "sizeAggregation": "Count", "labelSettings": "City", "legendMetric": "City", "numberOfMetrics": 5, "legendAggregation": "Count", "itemColorSettings": { "nodeColorField": "City", "colorAggregation": "Count", "type": "heatmap", "heatmapPalette": "hotCold" } } }, "customWidth": "25", "showPin": true, "name": "mapoflogons", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "Perf\r\n| where CounterName == \"Active Sessions\"\r\n| extend ActiveTimeStamp = TimeGenerated > ago(5m)\r\n| summarize LatestActiveSessionCounter = arg_max(ActiveTimeStamp, *) by CounterName, Computer\r\n| extend LatestActiveSessionCount = iff(LatestActiveSessionCounter == \"false\", 0, toint(CounterValue))\r\n| join kind =inner ( \r\nPerf\r\n | where CounterName == \"Inactive Sessions\"\r\n | extend InactiveTimeStamp = TimeGenerated > ago(5m)\r\n | summarize LatestInactiveSessionCounter = arg_max(InactiveTimeStamp, *) by CounterName, Computer\r\n | extend LatestInactiveSessionCount = iff(LatestInactiveSessionCounter == \"false\", 0, toint(CounterValue - 2))\r\n )\r\n on Computer\r\n| extend Sessions = pack(\"Inactive Sessions\", LatestInactiveSessionCount, \"Active Sessions\", LatestActiveSessionCount)\r\n| mvexpand kind=array Sessions\r\n| project SessionType = tostring(Sessions[0]), value = toint(Sessions[1]), Computer = Computer\r\n| render piechart", "size": 1, "title": "Current Session Status", "noDataMessage": "No Current or Recent Sessions collected", "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "chartSettings": { "seriesLabelSettings": [ { "seriesName": "Inactive Sessions", "color": "orange" }, { "seriesName": "Active Sessions", "color": "green" } ] } }, "customWidth": "25", "showPin": true, "name": "CurrentSessionsPieChart", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nWVDConnections\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, SessionHostName)\r\n| where Computername in (WVDHosts)\r\n| where Type =~\"WVDConnections\" and State =~ \"Connected\" \r\n| extend Multi=split(_ResourceId, \"/\")\r\n| project ResourceAlias, HostPool=toupper(HP=Multi[8]), SessionHostName , UserName ,CState=iff(SessionHostOSVersion==\"<>\",\"Failure\",\"Success\"), CorrelationId, TimeGenerated, ResourceGroup=Multi[4], DesktopGroup_s=toupper(strcat(RG=Multi[4],\".\", HP=Multi[8])), StartTime=TimeGenerated\r\n| join (WVDConnections\r\n| where State == \"Completed\"\r\n| project EndTime=TimeGenerated, CorrelationId)\r\non CorrelationId\r\n| project Duration = EndTime - StartTime,UserName\r\n| summarize Duration=avg(Duration) by UserName\r\n| sort by Duration desc\r\n| take 5\r\n", "size": 1, "title": "Top 5 Average Session Durations by User", "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "gridSettings": { "formatters": [ { "columnMatch": "DurationInSeconds", "formatter": 3, "formatOptions": { "palette": "blue" }, "numberFormat": { "unit": 24, "options": { "style": "decimal", "useGrouping": false } } } ] } }, "customWidth": "50", "showPin": true, "name": "usersessionlogonduration", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"{SubscriptionID}/resourcegroups/{ResourceGroup}/providers/Microsoft.DesktopVirtualization/hostpools/{HostPool}?api-version=2019-01-23-preview\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.properties\",\"columns\":[{\"path\":\"$.hostPoolType\",\"columnid\":\"HostPoolType\"},{\"path\":\"$.maxSessionLimit\",\"columnid\":\"MaxSessionLimit\"}]}}]}", "size": 4, "queryType": 12 }, "customWidth": "33", "name": "hostpoolspecifics", "styleSettings": { "margin": "1px", "padding": "1px" } }, { "type": 12, "content": { "version": "NotebookGroup/1.0", "groupType": "editable", "title": "Pool Health Overview", "items": [ { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nHeartbeat\r\n| extend HostPool = '{HostPool}'\r\n| extend FullName = strcat(HostPool, \"/\", Computer)\r\n| where FullName in (WVDHosts)\r\n| summarize LastHeartbeat = max(TimeGenerated) by Computer, FullName, HostPool\r\n| extend State = iff(LastHeartbeat < ago(15m), 'Unhealthy', 'Healthy')\r\n| extend TimeFromNow = now() - LastHeartbeat\r\n| extend [\"TimeAgo\"] = strcat(case(TimeFromNow < 2m, strcat(toint(TimeFromNow / 1m), ' seconds'), TimeFromNow < 2h, strcat(toint(TimeFromNow / 1m), ' minutes'), TimeFromNow < 2d, strcat(toint(TimeFromNow / 1h), ' hours'), strcat(toint(TimeFromNow / 1d), ' days')), ' ago')\r\n| join kind= innerunique (\r\nPerf\r\n| where ObjectName == \"Terminal Services\" and\r\n(CounterName == \"Active Sessions\")\r\n| extend ActiveSessions = toint(CounterValue), Computer, TimeGenerated\r\n| project Computer, TimeGenerated, ActiveSessions\r\n| join kind=inner (\r\nPerf\r\n| where ObjectName == \"Terminal Services\" and CounterName == \"Inactive Sessions\"\r\n| extend totalinactivesessions = toint(CounterValue)\r\n| extend InactiveSessions = totalinactivesessions -2\r\n| project Computer, InactiveTimeStamp=TimeGenerated, InactiveSessions\r\n) on Computer\r\n| where (TimeGenerated - InactiveTimeStamp) between (0min .. 15s)\r\n| summarize arg_max(TimeGenerated, *) by Computer\r\n| project ActiveSessions, InactiveSessions, Computer\r\n) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"Terminal Services\" and CounterName == \"Active Sessions\")\r\n| make-series TSActTrend = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project TSActTrend, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"Memory\" and CounterName == \"% Committed Bytes In Use\")\r\n| make-series MemTrend = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project MemTrend, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"Processor\" and CounterName == \"% Processor Time\")\r\n| make-series CPUTrend = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project CPUTrend, Computer) on Computer\r\n| project Computer, State, ActiveSessions, InactiveSessions,[\"Azure Monitor Checkin\"]=strcat('🕒 ', TimeAgo), FullName, HostPool, TSActTrend, MemTrend, CPUTrend", "size": 4, "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "tiles", "gridSettings": { "formatters": [ { "columnMatch": "Computer", "formatter": 13, "formatOptions": { "linkTarget": null, "showIcon": true } }, { "columnMatch": "FullName", "formatter": 5, "formatOptions": {} }, { "columnMatch": "HostPool", "formatter": 5, "formatOptions": {} }, { "columnMatch": "TSActTrend", "formatter": 5, "formatOptions": {} }, { "columnMatch": "MemTrend", "formatter": 5, "formatOptions": {} }, { "columnMatch": "CPUTrend", "formatter": 5, "formatOptions": {} } ] }, "tileSettings": { "titleContent": { "formatter": 1 }, "leftContent": { "columnMatch": "Computer", "formatter": 1 }, "showBorder": false } }, "customWidth": "33", "name": "hostperf", "styleSettings": { "margin": "1px", "padding": "1px", "progressStyle": "none" } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"{SubscriptionID}/resourcegroups/{ResourceGroup}/providers/Microsoft.DesktopVirtualization/hostpools/{HostPool}/sessionhosts?api-version=2019-01-23-preview\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"$.properties.status\",\"columnid\":\"Status\"},{\"path\":\"$.name\",\"columnid\":\"Name\"},{\"path\":\"$.properties.lastHeartBeat\",\"columnid\":\"LastHeartbeat\"},{\"path\":\"$.properties.sessions\",\"columnid\":\"Sessions\"}]}}]}", "size": 4, "queryType": 12, "visualization": "tiles", "gridSettings": { "formatters": [ { "columnMatch": "Status", "formatter": 5, "formatOptions": {} }, { "columnMatch": "Name", "formatter": 13, "formatOptions": { "linkTarget": null, "showIcon": true } }, { "columnMatch": "LastHeartbeat", "formatter": 5, "formatOptions": {} }, { "columnMatch": "Sessions", "formatter": 5, "formatOptions": {} } ], "labelSettings": [ { "columnId": "Status" }, { "columnId": "Name" }, { "columnId": "LastHeartbeat" }, { "columnId": "Sessions", "label": "Last Session Count" } ] }, "tileSettings": { "titleContent": { "columnMatch": "Name", "formatter": 1, "formatOptions": {} }, "subtitleContent": { "columnMatch": "Status", "formatOptions": {} }, "leftContent": { "columnMatch": "Sessions", "formatter": 12, "formatOptions": { "palette": "auto" }, "numberFormat": { "unit": 17, "options": { "style": "decimal", "useGrouping": false, "maximumFractionDigits": 2, "maximumSignificantDigits": 3 } } }, "showBorder": false } }, "customWidth": "33", "name": "hostpooloverview", "styleSettings": { "margin": "1px", "padding": "1px", "progressStyle": "none" } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"eb82698f-2418-4770-8607-a730f61540f9\",\"mergeType\":\"innerunique\",\"leftTable\":\"hostpooloverview\",\"rightTable\":\"hostperf\",\"leftColumn\":\"Name\",\"rightColumn\":\"FullName\"}],\"projectRename\":[{\"originalName\":\"[hostperf].HostPool\",\"mergedName\":\"HostPool\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostperf].FullName\",\"mergedName\":\"FullName\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostperf].Computer\",\"mergedName\":\"Computer\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostpooloverview].Status\",\"mergedName\":\"Status\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostpooloverview].Name\",\"mergedName\":\"Name\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostpooloverview].LastHeartbeat\",\"mergedName\":\"LastHeartbeat\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostperf].Azure Monitor Checkin\",\"mergedName\":\"Azure Monitor Checkin\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostpooloverview].Sessions\",\"mergedName\":\"Last Session Count\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostperf].ActiveSessions\",\"mergedName\":\"ActiveSessions\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostperf].InactiveSessions\",\"mergedName\":\"InactiveSessions\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostperf].TSActTrend\",\"mergedName\":\"TSActTrend\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostperf].MemTrend\",\"mergedName\":\"MemTrend\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostperf].CPUTrend\",\"mergedName\":\"CPUTrend\",\"fromId\":\"eb82698f-2418-4770-8607-a730f61540f9\"},{\"originalName\":\"[hostperf].State\",\"mergedName\":\"State\",\"fromId\":\"unknown\"},{\"originalName\":\"[hostperf].NWSTrend\"},{\"originalName\":\"[hostperf].NWRTrend\"}]}", "size": 0, "queryType": 7, "gridSettings": { "formatters": [ { "columnMatch": "$gen_group", "formatter": 16, "formatOptions": { "showIcon": true } }, { "columnMatch": "HostPool", "formatter": 5 }, { "columnMatch": "FullName", "formatter": 5 }, { "columnMatch": "Computer", "formatter": 7, "formatOptions": { "linkTarget": "Resource" } }, { "columnMatch": "Status", "formatter": 18, "formatOptions": { "thresholdsOptions": "icons", "thresholdsGrid": [ { "operator": "==", "thresholdValue": "Available", "representation": "Available", "text": "Available" }, { "operator": "==", "thresholdValue": "Unavailable", "representation": "failed", "text": "Unavailable" }, { "operator": "Default", "thresholdValue": null, "representation": "success", "text": "{0}{1}" } ] } }, { "columnMatch": "Name", "formatter": 5 }, { "columnMatch": "LastHeartbeat", "formatter": 5 }, { "columnMatch": "Last Session Count", "formatter": 3, "formatOptions": { "palette": "blue" } }, { "columnMatch": "TSActTrend", "formatter": 21, "formatOptions": { "palette": "blue" } }, { "columnMatch": "MemTrend", "formatter": 21, "formatOptions": { "palette": "blue" } }, { "columnMatch": "CPUTrend", "formatter": 21, "formatOptions": { "palette": "blue" } }, { "columnMatch": "State", "formatter": 5 }, { "columnMatch": "NWRTrend", "formatter": 21, "formatOptions": { "palette": "blue" } }, { "columnMatch": "NWSTrend", "formatter": 21, "formatOptions": { "palette": "blue" } } ], "hierarchySettings": { "treeType": 1, "groupBy": [ "HostPool" ], "expandTopLevel": true }, "labelSettings": [ { "columnId": "HostPool" }, { "columnId": "FullName" }, { "columnId": "Computer" }, { "columnId": "Status" }, { "columnId": "Name" }, { "columnId": "LastHeartbeat" }, { "columnId": "Azure Monitor Checkin" }, { "columnId": "Last Session Count" }, { "columnId": "ActiveSessions", "label": "Active Sessions" }, { "columnId": "InactiveSessions", "label": "Inactive Sessions" }, { "columnId": "TSActTrend", "label": "Terminal Services Active Sessions" }, { "columnId": "MemTrend", "label": "Memory Utilisation" }, { "columnId": "CPUTrend", "label": "CPU Utilisation" }, { "columnId": "State" } ] }, "sortBy": [] }, "showPin": false, "name": "hostandperfmerge" } ] }, "name": "poolhealthoverview" } ] }, "conditionalVisibility": { "parameterName": "selectedTab", "comparison": "isEqualTo", "value": "Overview" }, "name": "Overview" }, { "type": 12, "content": { "version": "NotebookGroup/1.0", "groupType": "editable", "items": [ { "type": 1, "content": { "json": "# Session Details" }, "name": "text - 4" }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, Computer)\r\n| where Computername in (WVDHosts)\r\n| where ObjectName == \"Terminal Services\" \r\n| where CounterName == \"Active Sessions\" \r\n| summarize arg_max(TimeGenerated, *) by Computer\r\n| project Computer, CounterName, CounterValue\r\n| order by CounterValue desc\r\n| take 5", "size": 1, "title": "Top 5 hosts with connected sessions", "noDataMessage": "No session information to display. Please ensure that you have enabled collection of the Terminal Services performance counters into your workspace.have enabled the ", "noDataMessageStyle": 4, "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "tiles", "tileSettings": { "titleContent": { "columnMatch": "Computer", "formatter": 1, "formatOptions": {} }, "subtitleContent": { "columnMatch": "CounterName", "formatOptions": {} }, "leftContent": { "columnMatch": "CounterValue", "formatter": 12, "formatOptions": { "palette": "auto" }, "numberFormat": { "unit": 17, "options": { "maximumSignificantDigits": 3, "maximumFractionDigits": 2 } } }, "showBorder": true, "size": "auto" }, "chartSettings": { "seriesLabelSettings": [ { "seriesName": "Active Sessions", "color": "green" }, { "seriesName": "Inactive Sessions", "color": "yellow" } ] } }, "customWidth": "33", "showPin": true, "name": "currentsessionstatus", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nWVDConnections\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, SessionHostName)\r\n| where Computername in (WVDHosts)\r\n| where State == \"Connected\"\r\n| summarize UserCount = count() by UserName\r\n| sort by UserCount desc\r\n| take 5", "size": 1, "title": "Top 5 Active Users", "noDataMessage": "No active users detected in the selected time period.", "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "tiles", "tileSettings": { "titleContent": { "columnMatch": "UserName", "formatter": 1, "formatOptions": {} }, "leftContent": { "columnMatch": "UserCount", "formatter": 12, "formatOptions": { "palette": "blue" } }, "showBorder": true, "rowLimit": 10, "size": "auto" }, "graphSettings": { "type": 2, "topContent": { "columnMatch": "UserName", "formatter": 1, "formatOptions": {} }, "centerContent": { "columnMatch": "UserCount", "formatter": 12, "formatOptions": { "palette": "blue" }, "numberFormat": { "unit": 17, "options": { "style": "decimal", "useGrouping": false, "maximumFractionDigits": 2, "maximumSignificantDigits": 3 } } }, "nodeIdField": "UserName", "nodeSize": null, "staticNodeSize": 100, "colorSettings": null, "hivesMargin": 5 } }, "customWidth": "33", "showPin": true, "name": "top5users", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, Computer)\r\n| where Computername in (WVDHosts)\r\n| where ObjectName == \"Terminal Services\" \r\n| where CounterName == \"Inactive Sessions\" \r\n| summarize arg_max(TimeGenerated, *) by Computer\r\n| project Computer, CounterName, CounterValue\r\n| order by CounterValue desc\r\n| take 5", "size": 1, "title": "Top 5 host with disconnected sessions", "noDataMessage": "No disconnected sessions detected in the selected time frame", "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "tiles", "tileSettings": { "titleContent": { "columnMatch": "Computer", "formatter": 1, "formatOptions": {} }, "subtitleContent": { "columnMatch": "CounterName", "formatOptions": {} }, "leftContent": { "columnMatch": "CounterValue", "formatter": 12, "formatOptions": { "palette": "auto" }, "numberFormat": { "unit": 17, "options": { "style": "decimal", "useGrouping": false, "maximumFractionDigits": 2, "maximumSignificantDigits": 3 } } }, "showBorder": true, "size": "auto" } }, "customWidth": "33", "showPin": true, "name": "top5disconnectedsessions", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, Computer)\r\n| where Computername in (WVDHosts)\r\n| where ObjectName == \"Terminal Services\" \r\n| where CounterName == \"Total Sessions\" \r\n| summarize arg_max(TimeGenerated, *) by Computer\r\n| project Computer, CounterName, CounterValue\r\n| order by CounterValue desc\r\n| take 5", "size": 1, "title": "Total Sessions top 5 Hosts", "noDataMessage": "No total sessions detected in the selected time range. If there have been sessions, please ensure that the Terminal Services counters are being collected into your workspace.", "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "tiles", "tileSettings": { "titleContent": { "columnMatch": "Computer", "formatter": 1, "formatOptions": {} }, "subtitleContent": { "columnMatch": "CounterName", "formatOptions": {} }, "leftContent": { "columnMatch": "CounterValue", "formatter": 12, "formatOptions": { "palette": "auto" }, "numberFormat": { "unit": 17, "options": { "maximumSignificantDigits": 3, "maximumFractionDigits": 2 } } }, "showBorder": true } }, "customWidth": "33", "showPin": true, "name": "totalsessions", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nWVDConnections\r\n| extend HostPool = '{HostPool}'\r\n| extend HostPool = strcat(HostPool, \"/\")\r\n| extend Computername = strcat(HostPool, SessionHostName)\r\n| where Computername in (WVDHosts)\r\n| where State == \"Connected\"\r\n| extend ClientOSType = pack(\"ClientOSVersion\", ClientOS)\r\n| summarize AggregatedValue = count() by ClientOS", "size": 1, "title": "Client Connection Operating System", "noDataMessage": "No client connections detected in the selected time frame.", "timeContext": { "durationMs": 2592000000 }, "timeContextFromParameter": "TimeRange", "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", "crossComponentResources": [ "{Workspace}" ], "visualization": "piechart", "chartSettings": { "showMetrics": false, "showLegend": true } }, "customWidth": "33", "showPin": true, "name": "clientosbreakdown", "styleSettings": { "margin": "1px", "padding": "1px", "showBorder": true } }, { "type": 1, "content": { "json": "