├── README.md
└── WVD-ARM-monitoring-workbook.json
/README.md:
--------------------------------------------------------------------------------
1 | # Archived - Windows Virtual Desktop Azure Monitor documentation for spring update (ARM).
2 |
3 | ## No longer active - archiving this repository for preservation but be sure to check out [AVD Insights](https://learn.microsoft.com/en-us/azure/virtual-desktop/diagnostics-log-analytics) which is built into the AVD Portal experience.
4 |
5 |
--------------------------------------------------------------------------------
/WVD-ARM-monitoring-workbook.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "Notebook/1.0",
3 | "items": [
4 | {
5 | "type": 1,
6 | "content": {
7 | "json": "# Windows Virtual Desktop"
8 | },
9 | "name": "header"
10 | },
11 | {
12 | "type": 9,
13 | "content": {
14 | "version": "KqlParameterItem/1.0",
15 | "crossComponentResources": [
16 | "{Subscription}"
17 | ],
18 | "parameters": [
19 | {
20 | "id": "b859a03f-2283-43dd-8536-42714bbfced6",
21 | "version": "KqlParameterItem/1.0",
22 | "name": "Subscription",
23 | "type": 6,
24 | "isRequired": true,
25 | "query": "summarize Count = count() by subscriptionId\r\n| project value = strcat('/subscriptions/', subscriptionId), label = subscriptionId, Selected = Count >= 0",
26 | "crossComponentResources": [
27 | "value::selected"
28 | ],
29 | "typeSettings": {
30 | "additionalResourceOptions": []
31 | },
32 | "queryType": 1,
33 | "resourceType": "microsoft.resourcegraph/resources"
34 | },
35 | {
36 | "id": "bab77e5f-3597-4d1f-beb4-878b8b1aab3e",
37 | "version": "KqlParameterItem/1.0",
38 | "name": "SubscriptionID",
39 | "type": 6,
40 | "isRequired": true,
41 | "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",
42 | "crossComponentResources": [
43 | "{Subscription}"
44 | ],
45 | "isHiddenWhenLocked": true,
46 | "typeSettings": {
47 | "additionalResourceOptions": []
48 | },
49 | "queryType": 1,
50 | "resourceType": "microsoft.resourcegraph/resources"
51 | },
52 | {
53 | "id": "8df9c309-e7d1-43ad-b2ad-2d190c0c4e60",
54 | "version": "KqlParameterItem/1.0",
55 | "name": "Workspace",
56 | "type": 5,
57 | "isRequired": true,
58 | "multiSelect": true,
59 | "quote": "'",
60 | "delimiter": ",",
61 | "query": "where type =~ 'microsoft.operationalinsights/workspaces'\r\n| summarize by id, name\r\n| project id",
62 | "crossComponentResources": [
63 | "{Subscription}"
64 | ],
65 | "typeSettings": {
66 | "additionalResourceOptions": [
67 | "value::all"
68 | ]
69 | },
70 | "queryType": 1,
71 | "resourceType": "microsoft.resourcegraph/resources",
72 | "value": [
73 | ""
74 | ],
75 | "label": "Log Analytics Workspace"
76 | },
77 | {
78 | "id": "2e3dfd9b-2d0f-4feb-94e8-107f220c4e28",
79 | "version": "KqlParameterItem/1.0",
80 | "name": "ResourceGroup",
81 | "type": 5,
82 | "isRequired": true,
83 | "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",
84 | "crossComponentResources": [
85 | "{Subscription}"
86 | ],
87 | "typeSettings": {
88 | "additionalResourceOptions": []
89 | },
90 | "queryType": 1,
91 | "resourceType": "microsoft.resourcegraph/resources"
92 | },
93 | {
94 | "id": "951b5870-e216-45c6-b159-34150868a46e",
95 | "version": "KqlParameterItem/1.0",
96 | "name": "HostPool",
97 | "type": 5,
98 | "isRequired": true,
99 | "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",
100 | "crossComponentResources": [
101 | "{Subscription}"
102 | ],
103 | "typeSettings": {
104 | "additionalResourceOptions": []
105 | },
106 | "timeContext": {
107 | "durationMs": 0
108 | },
109 | "timeContextFromParameter": "TimeRange",
110 | "queryType": 1,
111 | "resourceType": "microsoft.resourcegraph/resources"
112 | },
113 | {
114 | "id": "966a75f4-f4a4-4404-b649-67da45ddf636",
115 | "version": "KqlParameterItem/1.0",
116 | "name": "WVDHosts",
117 | "type": 5,
118 | "isRequired": true,
119 | "multiSelect": true,
120 | "quote": "'",
121 | "delimiter": ",",
122 | "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\"}]}}]}",
123 | "value": [
124 | "value::all"
125 | ],
126 | "typeSettings": {
127 | "additionalResourceOptions": [
128 | "value::all"
129 | ]
130 | },
131 | "timeContext": {
132 | "durationMs": 0
133 | },
134 | "timeContextFromParameter": "TimeRange",
135 | "queryType": 12
136 | },
137 | {
138 | "id": "04a8ead2-1fb2-4666-a7b0-6d92e3c29b46",
139 | "version": "KqlParameterItem/1.0",
140 | "name": "TimeRange",
141 | "type": 4,
142 | "typeSettings": {
143 | "selectableValues": [
144 | {
145 | "durationMs": 14400000
146 | },
147 | {
148 | "durationMs": 43200000
149 | },
150 | {
151 | "durationMs": 86400000
152 | },
153 | {
154 | "durationMs": 172800000
155 | },
156 | {
157 | "durationMs": 259200000
158 | },
159 | {
160 | "durationMs": 604800000
161 | },
162 | {
163 | "durationMs": 1209600000
164 | },
165 | {
166 | "durationMs": 2592000000
167 | },
168 | {
169 | "durationMs": 5184000000
170 | },
171 | {
172 | "durationMs": 7776000000
173 | }
174 | ],
175 | "allowCustom": true
176 | },
177 | "value": {
178 | "durationMs": 2592000000
179 | }
180 | }
181 | ],
182 | "style": "pills",
183 | "queryType": 1,
184 | "resourceType": "microsoft.resourcegraph/resources"
185 | },
186 | "name": "parameters - 2"
187 | },
188 | {
189 | "type": 1,
190 | "content": {
191 | "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"
192 | },
193 | "conditionalVisibility": {
194 | "parameterName": "DebugMode",
195 | "comparison": "isEqualTo",
196 | "value": "True"
197 | },
198 | "name": "abouttext"
199 | },
200 | {
201 | "type": 11,
202 | "content": {
203 | "version": "LinkItem/1.0",
204 | "style": "tabs",
205 | "links": [
206 | {
207 | "cellValue": "selectedTab",
208 | "linkTarget": "parameter",
209 | "linkLabel": "Overview",
210 | "subTarget": "Overview",
211 | "style": "link"
212 | },
213 | {
214 | "cellValue": "selectedTab",
215 | "linkTarget": "parameter",
216 | "linkLabel": "Session Details",
217 | "subTarget": "SessionDetails",
218 | "style": "link"
219 | },
220 | {
221 | "cellValue": "selectedTab",
222 | "linkTarget": "parameter",
223 | "linkLabel": "Session Diagnostics",
224 | "subTarget": "SessionDiagnostics",
225 | "style": "link"
226 | },
227 | {
228 | "cellValue": "selectedTab",
229 | "linkTarget": "parameter",
230 | "linkLabel": "User Specific Reporting",
231 | "subTarget": "UserSpecific",
232 | "style": "link"
233 | },
234 | {
235 | "cellValue": "selectedTab",
236 | "linkTarget": "parameter",
237 | "linkLabel": "Session Performance",
238 | "subTarget": "SessionPerformance",
239 | "style": "link"
240 | },
241 | {
242 | "cellValue": "selectedTab",
243 | "linkTarget": "parameter",
244 | "linkLabel": "Host Performance",
245 | "subTarget": "HostPerformance",
246 | "style": "link"
247 | },
248 | {
249 | "cellValue": "selectedTab",
250 | "linkTarget": "parameter",
251 | "linkLabel": "Disk Performance",
252 | "subTarget": "DiskPerformance",
253 | "style": "link"
254 | }
255 | ]
256 | },
257 | "name": "tabs"
258 | },
259 | {
260 | "type": 12,
261 | "content": {
262 | "version": "NotebookGroup/1.0",
263 | "groupType": "editable",
264 | "items": [
265 | {
266 | "type": 1,
267 | "content": {
268 | "json": "# WVD Overview"
269 | },
270 | "name": "text - 4"
271 | },
272 | {
273 | "type": 3,
274 | "content": {
275 | "version": "KqlItem/1.0",
276 | "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",
277 | "size": 1,
278 | "title": "WVD Resources",
279 | "noDataMessage": "No resources detected in the selected subscription.",
280 | "queryType": 1,
281 | "resourceType": "microsoft.resourcegraph/resources",
282 | "crossComponentResources": [
283 | "{Subscription}"
284 | ],
285 | "visualization": "tiles",
286 | "tileSettings": {
287 | "showBorder": false,
288 | "titleContent": {
289 | "columnMatch": "TypeName",
290 | "formatter": 1
291 | },
292 | "leftContent": {
293 | "columnMatch": "Resources",
294 | "formatter": 12,
295 | "formatOptions": {
296 | "palette": "auto"
297 | },
298 | "numberFormat": {
299 | "unit": 17,
300 | "options": {
301 | "maximumSignificantDigits": 3,
302 | "maximumFractionDigits": 2
303 | }
304 | }
305 | }
306 | }
307 | },
308 | "customWidth": "25",
309 | "showPin": true,
310 | "name": "wvdresources",
311 | "styleSettings": {
312 | "margin": "1px",
313 | "padding": "1px",
314 | "showBorder": true
315 | }
316 | },
317 | {
318 | "type": 3,
319 | "content": {
320 | "version": "KqlItem/1.0",
321 | "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)",
322 | "size": 1,
323 | "title": "Daily Connections - {HostPool} - Rolling 7 days",
324 | "noDataMessage": "No sessions detected in the last 7 days.",
325 | "timeContext": {
326 | "durationMs": 604800000
327 | },
328 | "queryType": 0,
329 | "resourceType": "microsoft.operationalinsights/workspaces",
330 | "crossComponentResources": [
331 | "{Workspace}"
332 | ],
333 | "visualization": "barchart",
334 | "chartSettings": {
335 | "xAxis": "TimeGenerated"
336 | }
337 | },
338 | "customWidth": "25",
339 | "showPin": true,
340 | "name": "rollingsessioncount",
341 | "styleSettings": {
342 | "margin": "1px",
343 | "padding": "1px",
344 | "showBorder": true
345 | }
346 | },
347 | {
348 | "type": 3,
349 | "content": {
350 | "version": "KqlItem/1.0",
351 | "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",
352 | "size": 1,
353 | "title": "Logon Location Heatmap - Rolling 7 days",
354 | "noDataMessage": "No logons detected in the last 7 days, or AAD Signin logs have not been configured for collection",
355 | "noDataMessageStyle": 2,
356 | "timeContext": {
357 | "durationMs": 604800000
358 | },
359 | "queryType": 0,
360 | "resourceType": "microsoft.operationalinsights/workspaces",
361 | "crossComponentResources": [
362 | "{Workspace}"
363 | ],
364 | "visualization": "map",
365 | "mapSettings": {
366 | "locInfo": "LatLong",
367 | "latitude": "LocationDetails_geoCoordinates_latitude",
368 | "longitude": "LocationDetails_geoCoordinates_longitude",
369 | "sizeSettings": "City",
370 | "sizeAggregation": "Count",
371 | "labelSettings": "City",
372 | "legendMetric": "City",
373 | "numberOfMetrics": 5,
374 | "legendAggregation": "Count",
375 | "itemColorSettings": {
376 | "nodeColorField": "City",
377 | "colorAggregation": "Count",
378 | "type": "heatmap",
379 | "heatmapPalette": "hotCold"
380 | }
381 | }
382 | },
383 | "customWidth": "25",
384 | "showPin": true,
385 | "name": "mapoflogons",
386 | "styleSettings": {
387 | "margin": "1px",
388 | "padding": "1px",
389 | "showBorder": true
390 | }
391 | },
392 | {
393 | "type": 3,
394 | "content": {
395 | "version": "KqlItem/1.0",
396 | "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",
397 | "size": 1,
398 | "title": "Current Session Status",
399 | "noDataMessage": "No Current or Recent Sessions collected",
400 | "timeContext": {
401 | "durationMs": 2592000000
402 | },
403 | "timeContextFromParameter": "TimeRange",
404 | "queryType": 0,
405 | "resourceType": "microsoft.operationalinsights/workspaces",
406 | "crossComponentResources": [
407 | "{Workspace}"
408 | ],
409 | "chartSettings": {
410 | "seriesLabelSettings": [
411 | {
412 | "seriesName": "Inactive Sessions",
413 | "color": "orange"
414 | },
415 | {
416 | "seriesName": "Active Sessions",
417 | "color": "green"
418 | }
419 | ]
420 | }
421 | },
422 | "customWidth": "25",
423 | "showPin": true,
424 | "name": "CurrentSessionsPieChart",
425 | "styleSettings": {
426 | "margin": "1px",
427 | "padding": "1px",
428 | "showBorder": true
429 | }
430 | },
431 | {
432 | "type": 3,
433 | "content": {
434 | "version": "KqlItem/1.0",
435 | "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",
436 | "size": 1,
437 | "title": "Top 5 Average Session Durations by User",
438 | "timeContext": {
439 | "durationMs": 2592000000
440 | },
441 | "timeContextFromParameter": "TimeRange",
442 | "queryType": 0,
443 | "resourceType": "microsoft.operationalinsights/workspaces",
444 | "crossComponentResources": [
445 | "{Workspace}"
446 | ],
447 | "gridSettings": {
448 | "formatters": [
449 | {
450 | "columnMatch": "DurationInSeconds",
451 | "formatter": 3,
452 | "formatOptions": {
453 | "palette": "blue"
454 | },
455 | "numberFormat": {
456 | "unit": 24,
457 | "options": {
458 | "style": "decimal",
459 | "useGrouping": false
460 | }
461 | }
462 | }
463 | ]
464 | }
465 | },
466 | "customWidth": "50",
467 | "showPin": true,
468 | "name": "usersessionlogonduration",
469 | "styleSettings": {
470 | "margin": "1px",
471 | "padding": "1px",
472 | "showBorder": true
473 | }
474 | },
475 | {
476 | "type": 3,
477 | "content": {
478 | "version": "KqlItem/1.0",
479 | "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\"}]}}]}",
480 | "size": 4,
481 | "queryType": 12
482 | },
483 | "customWidth": "33",
484 | "name": "hostpoolspecifics",
485 | "styleSettings": {
486 | "margin": "1px",
487 | "padding": "1px"
488 | }
489 | },
490 | {
491 | "type": 12,
492 | "content": {
493 | "version": "NotebookGroup/1.0",
494 | "groupType": "editable",
495 | "title": "Pool Health Overview",
496 | "items": [
497 | {
498 | "type": 3,
499 | "content": {
500 | "version": "KqlItem/1.0",
501 | "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",
502 | "size": 4,
503 | "timeContext": {
504 | "durationMs": 2592000000
505 | },
506 | "timeContextFromParameter": "TimeRange",
507 | "queryType": 0,
508 | "resourceType": "microsoft.operationalinsights/workspaces",
509 | "crossComponentResources": [
510 | "{Workspace}"
511 | ],
512 | "visualization": "tiles",
513 | "gridSettings": {
514 | "formatters": [
515 | {
516 | "columnMatch": "Computer",
517 | "formatter": 13,
518 | "formatOptions": {
519 | "linkTarget": null,
520 | "showIcon": true
521 | }
522 | },
523 | {
524 | "columnMatch": "FullName",
525 | "formatter": 5,
526 | "formatOptions": {}
527 | },
528 | {
529 | "columnMatch": "HostPool",
530 | "formatter": 5,
531 | "formatOptions": {}
532 | },
533 | {
534 | "columnMatch": "TSActTrend",
535 | "formatter": 5,
536 | "formatOptions": {}
537 | },
538 | {
539 | "columnMatch": "MemTrend",
540 | "formatter": 5,
541 | "formatOptions": {}
542 | },
543 | {
544 | "columnMatch": "CPUTrend",
545 | "formatter": 5,
546 | "formatOptions": {}
547 | }
548 | ]
549 | },
550 | "tileSettings": {
551 | "titleContent": {
552 | "formatter": 1
553 | },
554 | "leftContent": {
555 | "columnMatch": "Computer",
556 | "formatter": 1
557 | },
558 | "showBorder": false
559 | }
560 | },
561 | "customWidth": "33",
562 | "name": "hostperf",
563 | "styleSettings": {
564 | "margin": "1px",
565 | "padding": "1px",
566 | "progressStyle": "none"
567 | }
568 | },
569 | {
570 | "type": 3,
571 | "content": {
572 | "version": "KqlItem/1.0",
573 | "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\"}]}}]}",
574 | "size": 4,
575 | "queryType": 12,
576 | "visualization": "tiles",
577 | "gridSettings": {
578 | "formatters": [
579 | {
580 | "columnMatch": "Status",
581 | "formatter": 5,
582 | "formatOptions": {}
583 | },
584 | {
585 | "columnMatch": "Name",
586 | "formatter": 13,
587 | "formatOptions": {
588 | "linkTarget": null,
589 | "showIcon": true
590 | }
591 | },
592 | {
593 | "columnMatch": "LastHeartbeat",
594 | "formatter": 5,
595 | "formatOptions": {}
596 | },
597 | {
598 | "columnMatch": "Sessions",
599 | "formatter": 5,
600 | "formatOptions": {}
601 | }
602 | ],
603 | "labelSettings": [
604 | {
605 | "columnId": "Status"
606 | },
607 | {
608 | "columnId": "Name"
609 | },
610 | {
611 | "columnId": "LastHeartbeat"
612 | },
613 | {
614 | "columnId": "Sessions",
615 | "label": "Last Session Count"
616 | }
617 | ]
618 | },
619 | "tileSettings": {
620 | "titleContent": {
621 | "columnMatch": "Name",
622 | "formatter": 1,
623 | "formatOptions": {}
624 | },
625 | "subtitleContent": {
626 | "columnMatch": "Status",
627 | "formatOptions": {}
628 | },
629 | "leftContent": {
630 | "columnMatch": "Sessions",
631 | "formatter": 12,
632 | "formatOptions": {
633 | "palette": "auto"
634 | },
635 | "numberFormat": {
636 | "unit": 17,
637 | "options": {
638 | "style": "decimal",
639 | "useGrouping": false,
640 | "maximumFractionDigits": 2,
641 | "maximumSignificantDigits": 3
642 | }
643 | }
644 | },
645 | "showBorder": false
646 | }
647 | },
648 | "customWidth": "33",
649 | "name": "hostpooloverview",
650 | "styleSettings": {
651 | "margin": "1px",
652 | "padding": "1px",
653 | "progressStyle": "none"
654 | }
655 | },
656 | {
657 | "type": 3,
658 | "content": {
659 | "version": "KqlItem/1.0",
660 | "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\"}]}",
661 | "size": 0,
662 | "queryType": 7,
663 | "gridSettings": {
664 | "formatters": [
665 | {
666 | "columnMatch": "$gen_group",
667 | "formatter": 16,
668 | "formatOptions": {
669 | "showIcon": true
670 | }
671 | },
672 | {
673 | "columnMatch": "HostPool",
674 | "formatter": 5
675 | },
676 | {
677 | "columnMatch": "FullName",
678 | "formatter": 5
679 | },
680 | {
681 | "columnMatch": "Computer",
682 | "formatter": 7,
683 | "formatOptions": {
684 | "linkTarget": "Resource"
685 | }
686 | },
687 | {
688 | "columnMatch": "Status",
689 | "formatter": 18,
690 | "formatOptions": {
691 | "thresholdsOptions": "icons",
692 | "thresholdsGrid": [
693 | {
694 | "operator": "==",
695 | "thresholdValue": "Available",
696 | "representation": "Available",
697 | "text": "Available"
698 | },
699 | {
700 | "operator": "==",
701 | "thresholdValue": "Unavailable",
702 | "representation": "failed",
703 | "text": "Unavailable"
704 | },
705 | {
706 | "operator": "Default",
707 | "thresholdValue": null,
708 | "representation": "success",
709 | "text": "{0}{1}"
710 | }
711 | ]
712 | }
713 | },
714 | {
715 | "columnMatch": "Name",
716 | "formatter": 5
717 | },
718 | {
719 | "columnMatch": "LastHeartbeat",
720 | "formatter": 5
721 | },
722 | {
723 | "columnMatch": "Last Session Count",
724 | "formatter": 3,
725 | "formatOptions": {
726 | "palette": "blue"
727 | }
728 | },
729 | {
730 | "columnMatch": "TSActTrend",
731 | "formatter": 21,
732 | "formatOptions": {
733 | "palette": "blue"
734 | }
735 | },
736 | {
737 | "columnMatch": "MemTrend",
738 | "formatter": 21,
739 | "formatOptions": {
740 | "palette": "blue"
741 | }
742 | },
743 | {
744 | "columnMatch": "CPUTrend",
745 | "formatter": 21,
746 | "formatOptions": {
747 | "palette": "blue"
748 | }
749 | },
750 | {
751 | "columnMatch": "State",
752 | "formatter": 5
753 | },
754 | {
755 | "columnMatch": "NWRTrend",
756 | "formatter": 21,
757 | "formatOptions": {
758 | "palette": "blue"
759 | }
760 | },
761 | {
762 | "columnMatch": "NWSTrend",
763 | "formatter": 21,
764 | "formatOptions": {
765 | "palette": "blue"
766 | }
767 | }
768 | ],
769 | "hierarchySettings": {
770 | "treeType": 1,
771 | "groupBy": [
772 | "HostPool"
773 | ],
774 | "expandTopLevel": true
775 | },
776 | "labelSettings": [
777 | {
778 | "columnId": "HostPool"
779 | },
780 | {
781 | "columnId": "FullName"
782 | },
783 | {
784 | "columnId": "Computer"
785 | },
786 | {
787 | "columnId": "Status"
788 | },
789 | {
790 | "columnId": "Name"
791 | },
792 | {
793 | "columnId": "LastHeartbeat"
794 | },
795 | {
796 | "columnId": "Azure Monitor Checkin"
797 | },
798 | {
799 | "columnId": "Last Session Count"
800 | },
801 | {
802 | "columnId": "ActiveSessions",
803 | "label": "Active Sessions"
804 | },
805 | {
806 | "columnId": "InactiveSessions",
807 | "label": "Inactive Sessions"
808 | },
809 | {
810 | "columnId": "TSActTrend",
811 | "label": "Terminal Services Active Sessions"
812 | },
813 | {
814 | "columnId": "MemTrend",
815 | "label": "Memory Utilisation"
816 | },
817 | {
818 | "columnId": "CPUTrend",
819 | "label": "CPU Utilisation"
820 | },
821 | {
822 | "columnId": "State"
823 | }
824 | ]
825 | },
826 | "sortBy": []
827 | },
828 | "showPin": false,
829 | "name": "hostandperfmerge"
830 | }
831 | ]
832 | },
833 | "name": "poolhealthoverview"
834 | }
835 | ]
836 | },
837 | "conditionalVisibility": {
838 | "parameterName": "selectedTab",
839 | "comparison": "isEqualTo",
840 | "value": "Overview"
841 | },
842 | "name": "Overview"
843 | },
844 | {
845 | "type": 12,
846 | "content": {
847 | "version": "NotebookGroup/1.0",
848 | "groupType": "editable",
849 | "items": [
850 | {
851 | "type": 1,
852 | "content": {
853 | "json": "# Session Details"
854 | },
855 | "name": "text - 4"
856 | },
857 | {
858 | "type": 3,
859 | "content": {
860 | "version": "KqlItem/1.0",
861 | "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",
862 | "size": 1,
863 | "title": "Top 5 hosts with connected sessions",
864 | "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 ",
865 | "noDataMessageStyle": 4,
866 | "timeContext": {
867 | "durationMs": 2592000000
868 | },
869 | "timeContextFromParameter": "TimeRange",
870 | "queryType": 0,
871 | "resourceType": "microsoft.operationalinsights/workspaces",
872 | "crossComponentResources": [
873 | "{Workspace}"
874 | ],
875 | "visualization": "tiles",
876 | "tileSettings": {
877 | "titleContent": {
878 | "columnMatch": "Computer",
879 | "formatter": 1,
880 | "formatOptions": {}
881 | },
882 | "subtitleContent": {
883 | "columnMatch": "CounterName",
884 | "formatOptions": {}
885 | },
886 | "leftContent": {
887 | "columnMatch": "CounterValue",
888 | "formatter": 12,
889 | "formatOptions": {
890 | "palette": "auto"
891 | },
892 | "numberFormat": {
893 | "unit": 17,
894 | "options": {
895 | "maximumSignificantDigits": 3,
896 | "maximumFractionDigits": 2
897 | }
898 | }
899 | },
900 | "showBorder": true,
901 | "size": "auto"
902 | },
903 | "chartSettings": {
904 | "seriesLabelSettings": [
905 | {
906 | "seriesName": "Active Sessions",
907 | "color": "green"
908 | },
909 | {
910 | "seriesName": "Inactive Sessions",
911 | "color": "yellow"
912 | }
913 | ]
914 | }
915 | },
916 | "customWidth": "33",
917 | "showPin": true,
918 | "name": "currentsessionstatus",
919 | "styleSettings": {
920 | "margin": "1px",
921 | "padding": "1px",
922 | "showBorder": true
923 | }
924 | },
925 | {
926 | "type": 3,
927 | "content": {
928 | "version": "KqlItem/1.0",
929 | "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",
930 | "size": 1,
931 | "title": "Top 5 Active Users",
932 | "noDataMessage": "No active users detected in the selected time period.",
933 | "timeContext": {
934 | "durationMs": 2592000000
935 | },
936 | "timeContextFromParameter": "TimeRange",
937 | "queryType": 0,
938 | "resourceType": "microsoft.operationalinsights/workspaces",
939 | "crossComponentResources": [
940 | "{Workspace}"
941 | ],
942 | "visualization": "tiles",
943 | "tileSettings": {
944 | "titleContent": {
945 | "columnMatch": "UserName",
946 | "formatter": 1,
947 | "formatOptions": {}
948 | },
949 | "leftContent": {
950 | "columnMatch": "UserCount",
951 | "formatter": 12,
952 | "formatOptions": {
953 | "palette": "blue"
954 | }
955 | },
956 | "showBorder": true,
957 | "rowLimit": 10,
958 | "size": "auto"
959 | },
960 | "graphSettings": {
961 | "type": 2,
962 | "topContent": {
963 | "columnMatch": "UserName",
964 | "formatter": 1,
965 | "formatOptions": {}
966 | },
967 | "centerContent": {
968 | "columnMatch": "UserCount",
969 | "formatter": 12,
970 | "formatOptions": {
971 | "palette": "blue"
972 | },
973 | "numberFormat": {
974 | "unit": 17,
975 | "options": {
976 | "style": "decimal",
977 | "useGrouping": false,
978 | "maximumFractionDigits": 2,
979 | "maximumSignificantDigits": 3
980 | }
981 | }
982 | },
983 | "nodeIdField": "UserName",
984 | "nodeSize": null,
985 | "staticNodeSize": 100,
986 | "colorSettings": null,
987 | "hivesMargin": 5
988 | }
989 | },
990 | "customWidth": "33",
991 | "showPin": true,
992 | "name": "top5users",
993 | "styleSettings": {
994 | "margin": "1px",
995 | "padding": "1px",
996 | "showBorder": true
997 | }
998 | },
999 | {
1000 | "type": 3,
1001 | "content": {
1002 | "version": "KqlItem/1.0",
1003 | "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",
1004 | "size": 1,
1005 | "title": "Top 5 host with disconnected sessions",
1006 | "noDataMessage": "No disconnected sessions detected in the selected time frame",
1007 | "timeContext": {
1008 | "durationMs": 2592000000
1009 | },
1010 | "timeContextFromParameter": "TimeRange",
1011 | "queryType": 0,
1012 | "resourceType": "microsoft.operationalinsights/workspaces",
1013 | "crossComponentResources": [
1014 | "{Workspace}"
1015 | ],
1016 | "visualization": "tiles",
1017 | "tileSettings": {
1018 | "titleContent": {
1019 | "columnMatch": "Computer",
1020 | "formatter": 1,
1021 | "formatOptions": {}
1022 | },
1023 | "subtitleContent": {
1024 | "columnMatch": "CounterName",
1025 | "formatOptions": {}
1026 | },
1027 | "leftContent": {
1028 | "columnMatch": "CounterValue",
1029 | "formatter": 12,
1030 | "formatOptions": {
1031 | "palette": "auto"
1032 | },
1033 | "numberFormat": {
1034 | "unit": 17,
1035 | "options": {
1036 | "style": "decimal",
1037 | "useGrouping": false,
1038 | "maximumFractionDigits": 2,
1039 | "maximumSignificantDigits": 3
1040 | }
1041 | }
1042 | },
1043 | "showBorder": true,
1044 | "size": "auto"
1045 | }
1046 | },
1047 | "customWidth": "33",
1048 | "showPin": true,
1049 | "name": "top5disconnectedsessions",
1050 | "styleSettings": {
1051 | "margin": "1px",
1052 | "padding": "1px",
1053 | "showBorder": true
1054 | }
1055 | },
1056 | {
1057 | "type": 3,
1058 | "content": {
1059 | "version": "KqlItem/1.0",
1060 | "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",
1061 | "size": 1,
1062 | "title": "Total Sessions top 5 Hosts",
1063 | "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.",
1064 | "timeContext": {
1065 | "durationMs": 2592000000
1066 | },
1067 | "timeContextFromParameter": "TimeRange",
1068 | "queryType": 0,
1069 | "resourceType": "microsoft.operationalinsights/workspaces",
1070 | "crossComponentResources": [
1071 | "{Workspace}"
1072 | ],
1073 | "visualization": "tiles",
1074 | "tileSettings": {
1075 | "titleContent": {
1076 | "columnMatch": "Computer",
1077 | "formatter": 1,
1078 | "formatOptions": {}
1079 | },
1080 | "subtitleContent": {
1081 | "columnMatch": "CounterName",
1082 | "formatOptions": {}
1083 | },
1084 | "leftContent": {
1085 | "columnMatch": "CounterValue",
1086 | "formatter": 12,
1087 | "formatOptions": {
1088 | "palette": "auto"
1089 | },
1090 | "numberFormat": {
1091 | "unit": 17,
1092 | "options": {
1093 | "maximumSignificantDigits": 3,
1094 | "maximumFractionDigits": 2
1095 | }
1096 | }
1097 | },
1098 | "showBorder": true
1099 | }
1100 | },
1101 | "customWidth": "33",
1102 | "showPin": true,
1103 | "name": "totalsessions",
1104 | "styleSettings": {
1105 | "margin": "1px",
1106 | "padding": "1px",
1107 | "showBorder": true
1108 | }
1109 | },
1110 | {
1111 | "type": 3,
1112 | "content": {
1113 | "version": "KqlItem/1.0",
1114 | "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",
1115 | "size": 1,
1116 | "title": "Client Connection Operating System",
1117 | "noDataMessage": "No client connections detected in the selected time frame.",
1118 | "timeContext": {
1119 | "durationMs": 2592000000
1120 | },
1121 | "timeContextFromParameter": "TimeRange",
1122 | "queryType": 0,
1123 | "resourceType": "microsoft.operationalinsights/workspaces",
1124 | "crossComponentResources": [
1125 | "{Workspace}"
1126 | ],
1127 | "visualization": "piechart",
1128 | "chartSettings": {
1129 | "showMetrics": false,
1130 | "showLegend": true
1131 | }
1132 | },
1133 | "customWidth": "33",
1134 | "showPin": true,
1135 | "name": "clientosbreakdown",
1136 | "styleSettings": {
1137 | "margin": "1px",
1138 | "padding": "1px",
1139 | "showBorder": true
1140 | }
1141 | },
1142 | {
1143 | "type": 1,
1144 | "content": {
1145 | "json": "
"
1146 | },
1147 | "name": "text - 6"
1148 | },
1149 | {
1150 | "type": 9,
1151 | "content": {
1152 | "version": "KqlParameterItem/1.0",
1153 | "crossComponentResources": [
1154 | "{Workspace}"
1155 | ],
1156 | "parameters": [
1157 | {
1158 | "id": "37cebb64-3756-4e03-9b04-5d3b63bc2407",
1159 | "version": "KqlParameterItem/1.0",
1160 | "name": "TSSessions",
1161 | "label": "Terminal Server Session Counters",
1162 | "type": 2,
1163 | "isRequired": true,
1164 | "multiSelect": true,
1165 | "quote": "'",
1166 | "delimiter": ",",
1167 | "query": "Perf\r\n| where ObjectName == \"Terminal Services\"\r\n| summarize by CounterName\r\n| project Label = CounterName, Id = CounterName, Selected = 1",
1168 | "crossComponentResources": [
1169 | "{Workspace}"
1170 | ],
1171 | "typeSettings": {
1172 | "additionalResourceOptions": []
1173 | },
1174 | "queryType": 0,
1175 | "resourceType": "microsoft.operationalinsights/workspaces"
1176 | }
1177 | ],
1178 | "style": "pills",
1179 | "queryType": 0,
1180 | "resourceType": "microsoft.operationalinsights/workspaces"
1181 | },
1182 | "name": "parameters - 9"
1183 | },
1184 | {
1185 | "type": 3,
1186 | "content": {
1187 | "version": "KqlItem/1.0",
1188 | "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 CounterName == \"Active Sessions\"\r\n| extend ActiveSessions = toint(CounterValue)\r\n| project Computer, ActiveTimeStamp=TimeGenerated, ActiveSessions \r\n| join kind= inner (\r\n Perf\r\n | where 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 (ActiveTimeStamp - InactiveTimeStamp) between (0min .. 15s)\r\n| project ActiveSessions, InactiveSessions, bin(ActiveTimeStamp, 5m)",
1189 | "size": 0,
1190 | "aggregation": 3,
1191 | "showAnalytics": true,
1192 | "title": "Session Status History (WVD)",
1193 | "noDataMessage": "No Session History information. If you have had active sessions in the selected time period, please ensure that the collection of the Terminal Services counters into your workspace has been enabled.",
1194 | "timeContext": {
1195 | "durationMs": 0
1196 | },
1197 | "timeContextFromParameter": "TimeRange",
1198 | "queryType": 0,
1199 | "resourceType": "microsoft.operationalinsights/workspaces",
1200 | "crossComponentResources": [
1201 | "{Workspace}"
1202 | ],
1203 | "visualization": "timechart",
1204 | "chartSettings": {
1205 | "ySettings": {
1206 | "numberFormatSettings": {
1207 | "unit": 17,
1208 | "options": {
1209 | "style": "decimal",
1210 | "useGrouping": true,
1211 | "maximumFractionDigits": 0
1212 | }
1213 | }
1214 | }
1215 | }
1216 | },
1217 | "customWidth": "50",
1218 | "showPin": true,
1219 | "name": "sessionstatushistory",
1220 | "styleSettings": {
1221 | "margin": "1px",
1222 | "padding": "1px",
1223 | "showBorder": true
1224 | }
1225 | },
1226 | {
1227 | "type": 3,
1228 | "content": {
1229 | "version": "KqlItem/1.0",
1230 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nlet Counter = dynamic([{TSSessions}]);\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\" and CounterName in (Counter)\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), CounterName, Computer",
1231 | "size": 0,
1232 | "aggregation": 3,
1233 | "showAnalytics": true,
1234 | "title": "Session Overview (TermServer & WVD)",
1235 | "noDataMessage": "No Session History information. If you have had active sessions in the selected time period, please ensure that the collection of the Terminal Services counters into your workspace has been enabled.",
1236 | "timeContext": {
1237 | "durationMs": 2592000000
1238 | },
1239 | "queryType": 0,
1240 | "resourceType": "microsoft.operationalinsights/workspaces",
1241 | "crossComponentResources": [
1242 | "{Workspace}"
1243 | ],
1244 | "visualization": "timechart",
1245 | "gridSettings": {
1246 | "formatters": [
1247 | {
1248 | "columnMatch": "AggregatedValue",
1249 | "formatter": 0,
1250 | "numberFormat": {
1251 | "unit": 17,
1252 | "options": {
1253 | "style": "decimal",
1254 | "maximumFractionDigits": 0
1255 | }
1256 | }
1257 | }
1258 | ],
1259 | "sortBy": [
1260 | {
1261 | "itemKey": "TimeGenerated",
1262 | "sortOrder": 1
1263 | }
1264 | ]
1265 | },
1266 | "sortBy": [
1267 | {
1268 | "itemKey": "TimeGenerated",
1269 | "sortOrder": 1
1270 | }
1271 | ],
1272 | "chartSettings": {
1273 | "yAxis": [
1274 | "AggregatedValue"
1275 | ],
1276 | "ySettings": {
1277 | "numberFormatSettings": {
1278 | "unit": 17,
1279 | "options": {
1280 | "style": "decimal",
1281 | "useGrouping": true,
1282 | "maximumFractionDigits": 0
1283 | }
1284 | }
1285 | }
1286 | }
1287 | },
1288 | "customWidth": "50",
1289 | "showPin": true,
1290 | "name": "tssessions",
1291 | "styleSettings": {
1292 | "margin": "1px",
1293 | "padding": "1px",
1294 | "showBorder": true
1295 | }
1296 | }
1297 | ]
1298 | },
1299 | "conditionalVisibility": {
1300 | "parameterName": "selectedTab",
1301 | "comparison": "isEqualTo",
1302 | "value": "SessionDetails"
1303 | },
1304 | "name": "sessiondetails"
1305 | },
1306 | {
1307 | "type": 12,
1308 | "content": {
1309 | "version": "NotebookGroup/1.0",
1310 | "groupType": "editable",
1311 | "items": [
1312 | {
1313 | "type": 1,
1314 | "content": {
1315 | "json": "# Session Diagnostics"
1316 | },
1317 | "name": "text - 0"
1318 | },
1319 | {
1320 | "type": 9,
1321 | "content": {
1322 | "version": "KqlParameterItem/1.0",
1323 | "parameters": [
1324 | {
1325 | "id": "06f79b5c-9883-4485-8a21-244d7327fd73",
1326 | "version": "KqlParameterItem/1.0",
1327 | "name": "wvd_displayserviceerrors",
1328 | "label": "Display WVD Service Backend Errors?",
1329 | "type": 2,
1330 | "isRequired": true,
1331 | "typeSettings": {
1332 | "additionalResourceOptions": []
1333 | },
1334 | "jsonData": "[\r\n {\"label\":\"False\", \"value\":\"| where ServiceError == 'False'\", \"selected\":\"True\"},\r\n {\"label\":\"True\", \"value\":\"| where ServiceError == 'True'\", \"selected\":\"False\"}\r\n]",
1335 | "timeContext": {
1336 | "durationMs": 86400000
1337 | }
1338 | }
1339 | ],
1340 | "style": "pills",
1341 | "queryType": 0,
1342 | "resourceType": "microsoft.operationalinsights/workspaces"
1343 | },
1344 | "name": "parameters - 5"
1345 | },
1346 | {
1347 | "type": 3,
1348 | "content": {
1349 | "version": "KqlItem/1.0",
1350 | "query": "WVDErrors\r\n{wvd_displayserviceerrors}\r\n| parse _ResourceId with * \"/hostpools/\" HostPoolName\r\n| where HostPoolName like ('{HostPool}')\r\n| summarize count() by UserName",
1351 | "size": 1,
1352 | "title": "Top users encountering errors",
1353 | "noDataMessage": "No errors detected in the selected time period",
1354 | "timeContext": {
1355 | "durationMs": 0
1356 | },
1357 | "timeContextFromParameter": "TimeRange",
1358 | "queryType": 0,
1359 | "resourceType": "microsoft.operationalinsights/workspaces",
1360 | "crossComponentResources": [
1361 | "{Workspace}"
1362 | ],
1363 | "visualization": "piechart"
1364 | },
1365 | "customWidth": "25",
1366 | "showPin": true,
1367 | "name": "wvderrorsbyuser",
1368 | "styleSettings": {
1369 | "margin": "1px",
1370 | "padding": "1px",
1371 | "showBorder": true
1372 | }
1373 | },
1374 | {
1375 | "type": 3,
1376 | "content": {
1377 | "version": "KqlItem/1.0",
1378 | "query": "WVDErrors\r\n{wvd_displayserviceerrors}\r\n| parse _ResourceId with * \"/hostpools/\" HostPoolName\r\n| where HostPoolName like ('{HostPool}')\r\n| summarize usercount = count(UserName) by CodeSymbolic, CorrelationId, TimeGenerated\r\n| project CodeSymbolic, usercount, CorrelationId, TimeGenerated\r\n| sort by usercount desc",
1379 | "size": 1,
1380 | "title": "WVD Errors",
1381 | "noDataMessage": "No errors detected in the selected time period",
1382 | "timeContext": {
1383 | "durationMs": 0
1384 | },
1385 | "timeContextFromParameter": "TimeRange",
1386 | "queryType": 0,
1387 | "resourceType": "microsoft.operationalinsights/workspaces",
1388 | "crossComponentResources": [
1389 | "{Workspace}"
1390 | ],
1391 | "visualization": "piechart"
1392 | },
1393 | "customWidth": "25",
1394 | "showPin": true,
1395 | "name": "WVD Service Errors",
1396 | "styleSettings": {
1397 | "margin": "1px",
1398 | "padding": "1px",
1399 | "showBorder": true
1400 | }
1401 | },
1402 | {
1403 | "type": 3,
1404 | "content": {
1405 | "version": "KqlItem/1.0",
1406 | "query": "WVDErrors\r\n{wvd_displayserviceerrors}\r\n| parse _ResourceId with * \"/hostpools/\" HostPoolName\r\n| where HostPoolName like ('{HostPool}')\r\n| summarize usercount = count(Source) by CodeSymbolic, CorrelationId, TimeGenerated, Source\r\n| project Source, CodeSymbolic, usercount, CorrelationId, TimeGenerated",
1407 | "size": 1,
1408 | "title": "WVD Errors - by Source",
1409 | "noDataMessage": "No errors returned for the selected time range",
1410 | "timeContext": {
1411 | "durationMs": 0
1412 | },
1413 | "timeContextFromParameter": "TimeRange",
1414 | "exportFieldName": "Source",
1415 | "exportParameterName": "wvd_serviceerror_source",
1416 | "queryType": 0,
1417 | "resourceType": "microsoft.operationalinsights/workspaces",
1418 | "crossComponentResources": [
1419 | "{Workspace}"
1420 | ],
1421 | "visualization": "piechart"
1422 | },
1423 | "customWidth": "25",
1424 | "showPin": true,
1425 | "name": "WVD Service Errors - by Source",
1426 | "styleSettings": {
1427 | "margin": "1px",
1428 | "padding": "1px",
1429 | "showBorder": true
1430 | }
1431 | },
1432 | {
1433 | "type": 3,
1434 | "content": {
1435 | "version": "KqlItem/1.0",
1436 | "query": "WVDErrors\r\n{wvd_displayserviceerrors}\r\n| parse _ResourceId with * \"/hostpools/\" HostPoolName\r\n| where HostPoolName like ('{HostPool}')\r\n| summarize usercount = count(CorrelationId) by TimeGenerated, CorrelationId, CodeSymbolic, Source\r\n| project Source, CodeSymbolic, usercount, CorrelationId, TimeGenerated",
1437 | "size": 1,
1438 | "title": "WVD Errors - by rolling 7 days",
1439 | "noDataMessage": "No errors detected in the last 7 days",
1440 | "timeContext": {
1441 | "durationMs": 604800000
1442 | },
1443 | "queryType": 0,
1444 | "resourceType": "microsoft.operationalinsights/workspaces",
1445 | "crossComponentResources": [
1446 | "{Workspace}"
1447 | ],
1448 | "visualization": "barchart"
1449 | },
1450 | "customWidth": "25",
1451 | "showPin": true,
1452 | "name": "WVD Errors - by rolling 7 days",
1453 | "styleSettings": {
1454 | "margin": "1px",
1455 | "padding": "1px",
1456 | "showBorder": true
1457 | }
1458 | },
1459 | {
1460 | "type": 3,
1461 | "content": {
1462 | "version": "KqlItem/1.0",
1463 | "query": "WVDErrors\r\n| parse _ResourceId with * \"/hostpools/\" HostPoolName\r\n| where HostPoolName like ('{HostPool}')\r\n{wvd_displayserviceerrors}\r\n| project [\"Error Code\"]= CodeSymbolic, Message, UserName, ActivityType, Source, CorrelationId, TimeGenerated, [\"Host Pool\"] = _ResourceId\r\n| sort by TimeGenerated desc",
1464 | "size": 0,
1465 | "showAnalytics": true,
1466 | "title": "WVD Error Information",
1467 | "noDataMessage": "No errors collected in the specified time range",
1468 | "noDataMessageStyle": 4,
1469 | "timeContext": {
1470 | "durationMs": 0
1471 | },
1472 | "timeContextFromParameter": "TimeRange",
1473 | "showExportToExcel": true,
1474 | "exportToExcelOptions": "all",
1475 | "queryType": 0,
1476 | "resourceType": "microsoft.operationalinsights/workspaces",
1477 | "crossComponentResources": [
1478 | "{Workspace}"
1479 | ],
1480 | "gridSettings": {
1481 | "formatters": [
1482 | {
1483 | "columnMatch": "Error Code",
1484 | "formatter": 5
1485 | },
1486 | {
1487 | "columnMatch": "CorrelationId",
1488 | "formatter": 7,
1489 | "formatOptions": {
1490 | "linkTarget": "CellDetails",
1491 | "linkIsContextBlade": true
1492 | }
1493 | }
1494 | ],
1495 | "filter": true,
1496 | "hierarchySettings": {
1497 | "treeType": 1,
1498 | "groupBy": [
1499 | "Error Code"
1500 | ],
1501 | "expandTopLevel": true
1502 | }
1503 | }
1504 | },
1505 | "showPin": false,
1506 | "name": "wvderrorsspecificcode"
1507 | },
1508 | {
1509 | "type": 3,
1510 | "content": {
1511 | "version": "KqlItem/1.0",
1512 | "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| project-away TenantId,SourceSystem\r\n| summarize arg_max(TimeGenerated, *), StartTime = min(iff(State== 'Started', TimeGenerated , datetime(null) )), ConnectTime = min(iff(State== 'Connected', TimeGenerated , datetime(null) )) by CorrelationId\r\n| join kind=leftouter (\r\n WVDErrors\r\n |summarize Errors=makelist(pack('Code', Code, 'CodeSymbolic', CodeSymbolic, 'Time', TimeGenerated, 'Message', Message ,'ServiceError', ServiceError, 'Source', Source)) by CorrelationId\r\n ) on CorrelationId \r\n| join kind=leftouter (\r\n WVDCheckpoints\r\n | summarize Checkpoints=makelist(pack('Time', TimeGenerated, 'Name', Name, 'Parameters', Parameters, 'Source', Source)) by CorrelationId\r\n | mv-apply Checkpoints on\r\n (\r\n order by todatetime(Checkpoints['Time']) asc\r\n | summarize Checkpoints=makelist(Checkpoints)\r\n )\r\n ) on CorrelationId\r\n| project-away CorrelationId1, CorrelationId2, ClientIPAddress, SessionHostIPAddress, SessionHostSxSStackVersion, PredecessorConnectionId\r\n| order by TimeGenerated desc",
1513 | "size": 0,
1514 | "showAnalytics": true,
1515 | "title": "WVD Connected Session Details",
1516 | "noDataMessage": "No Connected Sessions detected in the selected time period",
1517 | "timeContext": {
1518 | "durationMs": 0
1519 | },
1520 | "timeContextFromParameter": "TimeRange",
1521 | "showExportToExcel": true,
1522 | "queryType": 0,
1523 | "resourceType": "microsoft.operationalinsights/workspaces",
1524 | "crossComponentResources": [
1525 | "{Workspace}"
1526 | ],
1527 | "gridSettings": {
1528 | "filter": true
1529 | }
1530 | },
1531 | "name": "wvdconnectedsessionsdetails"
1532 | }
1533 | ]
1534 | },
1535 | "conditionalVisibility": {
1536 | "parameterName": "selectedTab",
1537 | "comparison": "isEqualTo",
1538 | "value": "SessionDiagnostics"
1539 | },
1540 | "name": "sessiondiagnostics"
1541 | },
1542 | {
1543 | "type": 12,
1544 | "content": {
1545 | "version": "NotebookGroup/1.0",
1546 | "groupType": "editable",
1547 | "items": [
1548 | {
1549 | "type": 1,
1550 | "content": {
1551 | "json": "# User Specific Reporting"
1552 | },
1553 | "name": "text - 0"
1554 | },
1555 | {
1556 | "type": 9,
1557 | "content": {
1558 | "version": "KqlParameterItem/1.0",
1559 | "crossComponentResources": [
1560 | "{Workspace}"
1561 | ],
1562 | "parameters": [
1563 | {
1564 | "id": "e1e164a5-c5e8-4219-997a-fc580dc3f593",
1565 | "version": "KqlParameterItem/1.0",
1566 | "name": "UserName",
1567 | "type": 1,
1568 | "description": "Please enter the username you would like to explore",
1569 | "isRequired": true,
1570 | "value": "wvd9",
1571 | "timeContext": {
1572 | "durationMs": 0
1573 | },
1574 | "timeContextFromParameter": "TimeRange"
1575 | }
1576 | ],
1577 | "style": "pills",
1578 | "queryType": 0,
1579 | "resourceType": "microsoft.insights/components"
1580 | },
1581 | "name": "parameters - 1"
1582 | },
1583 | {
1584 | "type": 3,
1585 | "content": {
1586 | "version": "KqlItem/1.0",
1587 | "query": "WVDConnections\r\n|where UserName contains '{UserName}'\r\n|sort by TimeGenerated asc, CorrelationId\r\n|summarize Connectcount = dcount(CorrelationId) by bin(TimeGenerated, 1d)",
1588 | "size": 0,
1589 | "aggregation": 2,
1590 | "showAnalytics": true,
1591 | "title": "Connections per day for user {UserName}",
1592 | "color": "gray",
1593 | "noDataMessage": "No connections detected for this user in the specified time frame",
1594 | "timeContext": {
1595 | "durationMs": 0
1596 | },
1597 | "timeContextFromParameter": "TimeRange",
1598 | "queryType": 0,
1599 | "resourceType": "microsoft.operationalinsights/workspaces",
1600 | "crossComponentResources": [
1601 | "{Workspace}"
1602 | ],
1603 | "visualization": "barchart",
1604 | "chartSettings": {
1605 | "xAxis": "TimeGenerated",
1606 | "group": "Connectcount",
1607 | "createOtherGroup": null,
1608 | "showMetrics": false
1609 | }
1610 | },
1611 | "name": "ConnectionsbyUser",
1612 | "styleSettings": {
1613 | "margin": "1px",
1614 | "padding": "1px"
1615 | }
1616 | },
1617 | {
1618 | "type": 3,
1619 | "content": {
1620 | "version": "KqlItem/1.0",
1621 | "query": "WVDConnections\r\n|where UserName contains '{UserName}'\r\n|sort by TimeGenerated asc, CorrelationId\r\n| project TimeGenerated, CorrelationId, _ResourceId, SessionHostName, SessionHostIPAddress, UserName, State, ClientOS, ClientVersion, ClientType, ConnectionType, ResourceAlias, TenantId",
1622 | "size": 0,
1623 | "showAnalytics": true,
1624 | "title": "All connections for user {UserName}",
1625 | "noDataMessage": "No connections detected in the specified time frame",
1626 | "noDataMessageStyle": 4,
1627 | "timeContext": {
1628 | "durationMs": 2592000000
1629 | },
1630 | "timeContextFromParameter": "TimeRange",
1631 | "showExportToExcel": true,
1632 | "exportToExcelOptions": "all",
1633 | "queryType": 0,
1634 | "resourceType": "microsoft.operationalinsights/workspaces",
1635 | "crossComponentResources": [
1636 | "{Workspace}"
1637 | ],
1638 | "gridSettings": {
1639 | "formatters": [
1640 | {
1641 | "columnMatch": "CorrelationId",
1642 | "formatter": 5,
1643 | "formatOptions": {}
1644 | },
1645 | {
1646 | "columnMatch": "TenantId",
1647 | "formatter": 5,
1648 | "formatOptions": {}
1649 | },
1650 | {
1651 | "columnMatch": "ClientIPAddress",
1652 | "formatter": 5,
1653 | "formatOptions": {}
1654 | },
1655 | {
1656 | "columnMatch": "SessionHostSxSStackVersion",
1657 | "formatter": 5,
1658 | "formatOptions": {}
1659 | }
1660 | ],
1661 | "rowLimit": 100,
1662 | "filter": true,
1663 | "labelSettings": [
1664 | {
1665 | "columnId": "TimeGenerated"
1666 | },
1667 | {
1668 | "columnId": "CorrelationId"
1669 | },
1670 | {
1671 | "columnId": "_ResourceId",
1672 | "label": "Host Pool"
1673 | },
1674 | {
1675 | "columnId": "SessionHostName"
1676 | },
1677 | {
1678 | "columnId": "SessionHostIPAddress"
1679 | },
1680 | {
1681 | "columnId": "UserName"
1682 | },
1683 | {
1684 | "columnId": "State"
1685 | },
1686 | {
1687 | "columnId": "ClientOS"
1688 | },
1689 | {
1690 | "columnId": "ClientVersion"
1691 | },
1692 | {
1693 | "columnId": "ClientType"
1694 | },
1695 | {
1696 | "columnId": "ConnectionType"
1697 | },
1698 | {
1699 | "columnId": "ResourceAlias"
1700 | },
1701 | {
1702 | "columnId": "TenantId"
1703 | }
1704 | ]
1705 | }
1706 | },
1707 | "name": "AllConnectionsforUser"
1708 | },
1709 | {
1710 | "type": 3,
1711 | "content": {
1712 | "version": "KqlItem/1.0",
1713 | "query": "let Events = WVDConnections \r\n| where UserName contains '{UserName}' ;\r\nEvents\r\n| where State == \"Connected\"\r\n| project CorrelationId , UserName, ResourceAlias , StartTime=TimeGenerated\r\n| join (Events\r\n| where State == \"Completed\"\r\n| project EndTime=TimeGenerated, CorrelationId)\r\non CorrelationId\r\n| project Duration = EndTime - StartTime, ResourceAlias\r\n| sort by Duration desc\r\n",
1714 | "size": 0,
1715 | "showAnalytics": true,
1716 | "title": "Connection Duration for user {UserName}",
1717 | "timeContext": {
1718 | "durationMs": 0
1719 | },
1720 | "timeContextFromParameter": "TimeRange",
1721 | "queryType": 0,
1722 | "resourceType": "microsoft.operationalinsights/workspaces",
1723 | "crossComponentResources": [
1724 | "{Workspace}"
1725 | ]
1726 | },
1727 | "customWidth": "50",
1728 | "name": "ConnectionsDurationbyUser",
1729 | "styleSettings": {
1730 | "showBorder": true
1731 | }
1732 | },
1733 | {
1734 | "type": 3,
1735 | "content": {
1736 | "version": "KqlItem/1.0",
1737 | "query": "Perf\r\n| where ObjectName == \"Process\"\r\n| join\r\n(\r\nVMProcess\r\n| where UserName contains '{UserName}'\r\n| extend InstanceName = ExecutableName\r\n| project TimeGenerated, InstanceName, Computer, UserName, UserDomain\r\n)\r\non InstanceName\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), InstanceName, CounterName, UserName, Computer\r\n| order by AggregatedValue desc",
1738 | "size": 0,
1739 | "showAnalytics": true,
1740 | "title": "User Process by Session for {UserName}",
1741 | "noDataMessage": "No process information detected for user {UserName} in the selected time range",
1742 | "timeContext": {
1743 | "durationMs": 86400000
1744 | },
1745 | "showExportToExcel": true,
1746 | "queryType": 0,
1747 | "resourceType": "microsoft.operationalinsights/workspaces",
1748 | "crossComponentResources": [
1749 | "{Workspace}"
1750 | ],
1751 | "gridSettings": {
1752 | "formatters": [
1753 | {
1754 | "columnMatch": "TimeGenerated",
1755 | "formatter": 5
1756 | },
1757 | {
1758 | "columnMatch": "AggregatedValue",
1759 | "formatter": 0,
1760 | "numberFormat": {
1761 | "unit": 2,
1762 | "options": {
1763 | "style": "decimal",
1764 | "useGrouping": false
1765 | }
1766 | }
1767 | }
1768 | ],
1769 | "labelSettings": [
1770 | {
1771 | "columnId": "TimeGenerated"
1772 | },
1773 | {
1774 | "columnId": "InstanceName",
1775 | "label": "Process"
1776 | },
1777 | {
1778 | "columnId": "CounterName"
1779 | },
1780 | {
1781 | "columnId": "UserName"
1782 | },
1783 | {
1784 | "columnId": "Computer"
1785 | },
1786 | {
1787 | "columnId": "AggregatedValue",
1788 | "label": "Average Value"
1789 | }
1790 | ]
1791 | }
1792 | },
1793 | "customWidth": "50",
1794 | "name": "User Process by Session",
1795 | "styleSettings": {
1796 | "margin": "1px",
1797 | "padding": "1px",
1798 | "showBorder": true
1799 | }
1800 | },
1801 | {
1802 | "type": 3,
1803 | "content": {
1804 | "version": "KqlItem/1.0",
1805 | "query": "WVDErrors\r\n| where UserName contains '{UserName}'\r\n| project TimeGenerated, CorrelationId, _ResourceId, UserName, ActivityType, Source, Code, CodeSymbolic, Message, TenantId",
1806 | "size": 0,
1807 | "showAnalytics": true,
1808 | "title": "WVD Errors by User - {UserName}",
1809 | "noDataMessage": "No errors detected in the specified time range",
1810 | "timeContext": {
1811 | "durationMs": 2592000000
1812 | },
1813 | "timeContextFromParameter": "TimeRange",
1814 | "showExportToExcel": true,
1815 | "exportToExcelOptions": "all",
1816 | "queryType": 0,
1817 | "resourceType": "microsoft.operationalinsights/workspaces",
1818 | "crossComponentResources": [
1819 | "{Workspace}"
1820 | ],
1821 | "gridSettings": {
1822 | "formatters": [
1823 | {
1824 | "columnMatch": "CorrelationId",
1825 | "formatter": 5,
1826 | "formatOptions": {}
1827 | },
1828 | {
1829 | "columnMatch": "TenantId",
1830 | "formatter": 5,
1831 | "formatOptions": {}
1832 | }
1833 | ],
1834 | "rowLimit": 100,
1835 | "filter": true,
1836 | "labelSettings": [
1837 | {
1838 | "columnId": "TimeGenerated"
1839 | },
1840 | {
1841 | "columnId": "CorrelationId"
1842 | },
1843 | {
1844 | "columnId": "_ResourceId",
1845 | "label": "Host Pool"
1846 | },
1847 | {
1848 | "columnId": "UserName"
1849 | },
1850 | {
1851 | "columnId": "ActivityType"
1852 | },
1853 | {
1854 | "columnId": "Source"
1855 | },
1856 | {
1857 | "columnId": "Code"
1858 | },
1859 | {
1860 | "columnId": "CodeSymbolic"
1861 | },
1862 | {
1863 | "columnId": "Message"
1864 | },
1865 | {
1866 | "columnId": "TenantId"
1867 | }
1868 | ]
1869 | }
1870 | },
1871 | "name": "WVDErrorsbyUser"
1872 | }
1873 | ]
1874 | },
1875 | "conditionalVisibility": {
1876 | "parameterName": "selectedTab",
1877 | "comparison": "isEqualTo",
1878 | "value": "UserSpecific"
1879 | },
1880 | "name": "UserSpecificReportinggroup"
1881 | },
1882 | {
1883 | "type": 12,
1884 | "content": {
1885 | "version": "NotebookGroup/1.0",
1886 | "groupType": "editable",
1887 | "items": [
1888 | {
1889 | "type": 1,
1890 | "content": {
1891 | "json": "# Session Performance"
1892 | },
1893 | "name": "text - 0"
1894 | },
1895 | {
1896 | "type": 3,
1897 | "content": {
1898 | "version": "KqlItem/1.0",
1899 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend FullName = strcat(HostPool, \"/\", Computer)\r\n| where FullName in (WVDHosts)\r\n| where InstanceName != \"_Total\"\r\n| where ObjectName == \"Process\" and CounterName == \"% User Time\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), InstanceName, Computer\r\n",
1900 | "size": 0,
1901 | "showAnalytics": true,
1902 | "title": "% User Time by Process",
1903 | "timeContext": {
1904 | "durationMs": 0
1905 | },
1906 | "timeContextFromParameter": "TimeRange",
1907 | "queryType": 0,
1908 | "resourceType": "microsoft.operationalinsights/workspaces",
1909 | "crossComponentResources": [
1910 | "{Workspace}"
1911 | ],
1912 | "visualization": "linechart"
1913 | },
1914 | "customWidth": "50",
1915 | "showPin": true,
1916 | "name": "session-percusertime",
1917 | "styleSettings": {
1918 | "margin": "1px",
1919 | "padding": "1px",
1920 | "showBorder": true
1921 | }
1922 | },
1923 | {
1924 | "type": 3,
1925 | "content": {
1926 | "version": "KqlItem/1.0",
1927 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend FullName = strcat(HostPool, \"/\", Computer)\r\n| where FullName in (WVDHosts)\r\n| where InstanceName != \"_Total\"\r\n| where ObjectName == \"Process\" and CounterName == \"% Processor Time\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), InstanceName, Computer",
1928 | "size": 0,
1929 | "showAnalytics": true,
1930 | "title": "% Processor Time by Process",
1931 | "timeContext": {
1932 | "durationMs": 0
1933 | },
1934 | "timeContextFromParameter": "TimeRange",
1935 | "queryType": 0,
1936 | "resourceType": "microsoft.operationalinsights/workspaces",
1937 | "crossComponentResources": [
1938 | "{Workspace}"
1939 | ],
1940 | "visualization": "linechart"
1941 | },
1942 | "customWidth": "50",
1943 | "showPin": true,
1944 | "name": "session-percproctime",
1945 | "styleSettings": {
1946 | "margin": "1px",
1947 | "padding": "1px",
1948 | "showBorder": true
1949 | }
1950 | },
1951 | {
1952 | "type": 3,
1953 | "content": {
1954 | "version": "KqlItem/1.0",
1955 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend FullName = strcat(HostPool, \"/\", Computer)\r\n| where FullName in (WVDHosts)\r\n| where InstanceName != \"_Total\"\r\n| where ObjectName == \"Process\" and CounterName == \"IO Write Operations/sec\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), InstanceName, Computer",
1956 | "size": 0,
1957 | "showAnalytics": true,
1958 | "title": "Disk IO Write Operations/sec by Process",
1959 | "timeContext": {
1960 | "durationMs": 0
1961 | },
1962 | "timeContextFromParameter": "TimeRange",
1963 | "queryType": 0,
1964 | "resourceType": "microsoft.operationalinsights/workspaces",
1965 | "crossComponentResources": [
1966 | "{Workspace}"
1967 | ],
1968 | "visualization": "linechart"
1969 | },
1970 | "customWidth": "50",
1971 | "showPin": true,
1972 | "name": "session-iowrite",
1973 | "styleSettings": {
1974 | "margin": "1px",
1975 | "padding": "1px",
1976 | "showBorder": true
1977 | }
1978 | },
1979 | {
1980 | "type": 3,
1981 | "content": {
1982 | "version": "KqlItem/1.0",
1983 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nPerf\r\n| extend HostPool = '{HostPool}'\r\n| extend FullName = strcat(HostPool, \"/\", Computer)\r\n| where FullName in (WVDHosts)\r\n| where InstanceName != \"_Total\"\r\n| where ObjectName == \"Process\" and CounterName == \"IO Read Operations/sec\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), InstanceName, Computer",
1984 | "size": 0,
1985 | "showAnalytics": true,
1986 | "title": "Disk IO Read Operations/sec by Process",
1987 | "timeContext": {
1988 | "durationMs": 0
1989 | },
1990 | "timeContextFromParameter": "TimeRange",
1991 | "queryType": 0,
1992 | "resourceType": "microsoft.operationalinsights/workspaces",
1993 | "crossComponentResources": [
1994 | "{Workspace}"
1995 | ],
1996 | "visualization": "linechart"
1997 | },
1998 | "customWidth": "50",
1999 | "showPin": true,
2000 | "name": "session-ioread",
2001 | "styleSettings": {
2002 | "margin": "1px",
2003 | "padding": "1px",
2004 | "showBorder": true
2005 | }
2006 | }
2007 | ]
2008 | },
2009 | "conditionalVisibility": {
2010 | "parameterName": "selectedTab",
2011 | "comparison": "isEqualTo",
2012 | "value": "SessionPerformance"
2013 | },
2014 | "name": "sessionperformance"
2015 | },
2016 | {
2017 | "type": 12,
2018 | "content": {
2019 | "version": "NotebookGroup/1.0",
2020 | "groupType": "editable",
2021 | "items": [
2022 | {
2023 | "type": 1,
2024 | "content": {
2025 | "json": "# Host Performance"
2026 | },
2027 | "name": "text - 0"
2028 | },
2029 | {
2030 | "type": 3,
2031 | "content": {
2032 | "version": "KqlItem/1.0",
2033 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nHeartbeat\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| 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| join (Perf\r\n| where (ObjectName == \"Network Adapter\" and CounterName == \"Bytes Received/sec\")\r\n| make-series NWRTrend = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project NWRTrend, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"Network Adapter\" and CounterName == \"Bytes Sent/sec\")\r\n| make-series NWSTrend = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project NWSTrend, Computer) on Computer\r\n| project Computer, TSActTrend, MemTrend, CPUTrend, NWRTrend, NWSTrend",
2034 | "size": 1,
2035 | "showAnalytics": true,
2036 | "title": "Host Performance Overview",
2037 | "noDataMessage": "No performance counters to display. Please confirm that you have enabled the performance counter collection in your Log Analytics workspace",
2038 | "timeContext": {
2039 | "durationMs": 2592000000
2040 | },
2041 | "timeContextFromParameter": "TimeRange",
2042 | "queryType": 0,
2043 | "resourceType": "microsoft.operationalinsights/workspaces",
2044 | "crossComponentResources": [
2045 | "{Workspace}"
2046 | ],
2047 | "gridSettings": {
2048 | "formatters": [
2049 | {
2050 | "columnMatch": "TSActTrend",
2051 | "formatter": 21,
2052 | "formatOptions": {
2053 | "palette": "blue"
2054 | }
2055 | },
2056 | {
2057 | "columnMatch": "MemTrend",
2058 | "formatter": 21,
2059 | "formatOptions": {
2060 | "palette": "blue"
2061 | }
2062 | },
2063 | {
2064 | "columnMatch": "CPUTrend",
2065 | "formatter": 21,
2066 | "formatOptions": {
2067 | "palette": "blue"
2068 | }
2069 | },
2070 | {
2071 | "columnMatch": "NWRTrend",
2072 | "formatter": 21,
2073 | "formatOptions": {
2074 | "palette": "blue"
2075 | }
2076 | },
2077 | {
2078 | "columnMatch": "NWSTrend",
2079 | "formatter": 21,
2080 | "formatOptions": {
2081 | "palette": "blue"
2082 | }
2083 | }
2084 | ],
2085 | "labelSettings": [
2086 | {
2087 | "columnId": "Computer"
2088 | },
2089 | {
2090 | "columnId": "TSActTrend",
2091 | "label": "Terminal Services Active Sessions"
2092 | },
2093 | {
2094 | "columnId": "MemTrend",
2095 | "label": "Memory % Committed Bytes in Use"
2096 | },
2097 | {
2098 | "columnId": "CPUTrend",
2099 | "label": "Processor % Processor Time"
2100 | },
2101 | {
2102 | "columnId": "NWRTrend",
2103 | "label": "Network Bytes Read/sec"
2104 | },
2105 | {
2106 | "columnId": "NWSTrend",
2107 | "label": "Network Bytes Sent/sec"
2108 | }
2109 | ]
2110 | }
2111 | },
2112 | "name": "hostperfoverview"
2113 | },
2114 | {
2115 | "type": 3,
2116 | "content": {
2117 | "version": "KqlItem/1.0",
2118 | "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 == \"Logical Disk\" or ObjectName == \"LogicalDisk\") and CounterName contains \"%\" and InstanceName != \"_Total\" and InstanceName !contains \"HarddiskVolume\"\r\n| project TimeGenerated, Computer, ObjectName, CounterName, InstanceName, CounterValue \r\n| summarize arg_max(TimeGenerated, *) by Computer, InstanceName\r\n| extend SpaceUsed = (100-CounterValue)\r\n| top 10 by SpaceUsed desc",
2119 | "size": 1,
2120 | "showAnalytics": true,
2121 | "title": "Top 10 Hosts - Disk % Free Space",
2122 | "timeContext": {
2123 | "durationMs": 2592000000
2124 | },
2125 | "timeContextFromParameter": "TimeRange",
2126 | "queryType": 0,
2127 | "resourceType": "microsoft.operationalinsights/workspaces",
2128 | "crossComponentResources": [
2129 | "{Workspace}"
2130 | ],
2131 | "gridSettings": {
2132 | "formatters": [
2133 | {
2134 | "columnMatch": "TimeGenerated",
2135 | "formatter": 6,
2136 | "formatOptions": {},
2137 | "dateFormat": {
2138 | "formatName": "longDatePattern"
2139 | }
2140 | },
2141 | {
2142 | "columnMatch": "ObjectName",
2143 | "formatter": 5,
2144 | "formatOptions": {}
2145 | },
2146 | {
2147 | "columnMatch": "CounterName",
2148 | "formatter": 5,
2149 | "formatOptions": {}
2150 | },
2151 | {
2152 | "columnMatch": "CounterValue",
2153 | "formatter": 5,
2154 | "formatOptions": {},
2155 | "numberFormat": {
2156 | "unit": 1,
2157 | "options": {
2158 | "style": "decimal",
2159 | "useGrouping": false,
2160 | "maximumFractionDigits": 1
2161 | }
2162 | }
2163 | },
2164 | {
2165 | "columnMatch": "SpaceUsed",
2166 | "formatter": 3,
2167 | "formatOptions": {
2168 | "max": 100,
2169 | "palette": "greenRed"
2170 | },
2171 | "numberFormat": {
2172 | "unit": 1,
2173 | "options": {
2174 | "style": "decimal"
2175 | }
2176 | }
2177 | }
2178 | ],
2179 | "labelSettings": [
2180 | {
2181 | "columnId": "Computer"
2182 | },
2183 | {
2184 | "columnId": "InstanceName"
2185 | },
2186 | {
2187 | "columnId": "TimeGenerated",
2188 | "label": "Last Counter Date",
2189 | "comment": "Most recent performance counter collected"
2190 | },
2191 | {
2192 | "columnId": "ObjectName"
2193 | },
2194 | {
2195 | "columnId": "CounterName"
2196 | },
2197 | {
2198 | "columnId": "CounterValue"
2199 | },
2200 | {
2201 | "columnId": "SpaceUsed",
2202 | "label": "% Disk Space Used"
2203 | }
2204 | ]
2205 | }
2206 | },
2207 | "customWidth": "50",
2208 | "showPin": true,
2209 | "name": "hostperf-top10diskspace",
2210 | "styleSettings": {
2211 | "margin": "1px",
2212 | "padding": "1px",
2213 | "showBorder": true
2214 | }
2215 | },
2216 | {
2217 | "type": 3,
2218 | "content": {
2219 | "version": "KqlItem/1.0",
2220 | "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 == \"Processor\" and CounterName == \"% Processor Time\"\r\n| project TimeGenerated, Computer, ObjectName, CounterName, InstanceName, CounterValue \r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), Computer\r\n| summarize arg_max(TimeGenerated, *) by Computer\r\n| top 10 by AggregatedValue desc",
2221 | "size": 1,
2222 | "showAnalytics": true,
2223 | "title": "Top 10 Hosts - Processor Utilisation",
2224 | "timeContext": {
2225 | "durationMs": 2592000000
2226 | },
2227 | "timeContextFromParameter": "TimeRange",
2228 | "queryType": 0,
2229 | "resourceType": "microsoft.operationalinsights/workspaces",
2230 | "crossComponentResources": [
2231 | "{Workspace}"
2232 | ],
2233 | "gridSettings": {
2234 | "formatters": [
2235 | {
2236 | "columnMatch": "AggregatedValue",
2237 | "formatter": 3,
2238 | "formatOptions": {
2239 | "min": 0,
2240 | "max": 100,
2241 | "palette": "greenRed"
2242 | },
2243 | "numberFormat": {
2244 | "unit": 1,
2245 | "options": {
2246 | "style": "decimal",
2247 | "maximumFractionDigits": 1
2248 | }
2249 | }
2250 | }
2251 | ]
2252 | }
2253 | },
2254 | "customWidth": "50",
2255 | "showPin": true,
2256 | "name": "hostperf-top10cpu",
2257 | "styleSettings": {
2258 | "margin": "1px",
2259 | "padding": "1px",
2260 | "showBorder": true
2261 | }
2262 | },
2263 | {
2264 | "type": 3,
2265 | "content": {
2266 | "version": "KqlItem/1.0",
2267 | "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 == \"LogicalDisk\" and CounterName == \"% Free Space\" \r\n| where InstanceName <> \"_Total\" \r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), Computer, InstanceName ",
2268 | "size": 1,
2269 | "aggregation": 3,
2270 | "title": "Logical Disk Space Used by Host",
2271 | "timeContext": {
2272 | "durationMs": 2592000000
2273 | },
2274 | "timeContextFromParameter": "TimeRange",
2275 | "queryType": 0,
2276 | "resourceType": "microsoft.operationalinsights/workspaces",
2277 | "crossComponentResources": [
2278 | "{Workspace}"
2279 | ],
2280 | "visualization": "linechart",
2281 | "chartSettings": {
2282 | "ySettings": {
2283 | "numberFormatSettings": {
2284 | "unit": 1,
2285 | "options": {
2286 | "style": "decimal",
2287 | "useGrouping": true,
2288 | "maximumFractionDigits": 2
2289 | }
2290 | },
2291 | "max": 100
2292 | }
2293 | }
2294 | },
2295 | "customWidth": "25",
2296 | "showPin": true,
2297 | "name": "diskspacebyhost",
2298 | "styleSettings": {
2299 | "margin": "1px",
2300 | "padding": "1px",
2301 | "showBorder": true
2302 | }
2303 | },
2304 | {
2305 | "type": 3,
2306 | "content": {
2307 | "version": "KqlItem/1.0",
2308 | "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 == \"Processor\" and CounterName == \"% Processor Time\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), Computer, InstanceName ",
2309 | "size": 1,
2310 | "aggregation": 3,
2311 | "title": "Processor % Processor Time per host",
2312 | "timeContext": {
2313 | "durationMs": 2592000000
2314 | },
2315 | "timeContextFromParameter": "TimeRange",
2316 | "queryType": 0,
2317 | "resourceType": "microsoft.operationalinsights/workspaces",
2318 | "crossComponentResources": [
2319 | "{Workspace}"
2320 | ],
2321 | "visualization": "timechart",
2322 | "chartSettings": {
2323 | "ySettings": {
2324 | "numberFormatSettings": {
2325 | "unit": 1,
2326 | "options": {
2327 | "style": "decimal",
2328 | "useGrouping": true,
2329 | "maximumFractionDigits": 1
2330 | }
2331 | },
2332 | "max": 100
2333 | }
2334 | }
2335 | },
2336 | "customWidth": "25",
2337 | "showPin": true,
2338 | "name": "hostperf-processor",
2339 | "styleSettings": {
2340 | "margin": "1px",
2341 | "padding": "1px",
2342 | "showBorder": true
2343 | }
2344 | },
2345 | {
2346 | "type": 3,
2347 | "content": {
2348 | "version": "KqlItem/1.0",
2349 | "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 == \"Memory\" and CounterName == \"% Committed Bytes In Use\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), Computer",
2350 | "size": 1,
2351 | "aggregation": 3,
2352 | "title": "Memory % Committed bytes in use per Host",
2353 | "timeContext": {
2354 | "durationMs": 2592000000
2355 | },
2356 | "timeContextFromParameter": "TimeRange",
2357 | "queryType": 0,
2358 | "resourceType": "microsoft.operationalinsights/workspaces",
2359 | "crossComponentResources": [
2360 | "{Workspace}"
2361 | ],
2362 | "visualization": "timechart",
2363 | "chartSettings": {
2364 | "ySettings": {
2365 | "numberFormatSettings": {
2366 | "unit": 1,
2367 | "options": {
2368 | "style": "decimal",
2369 | "useGrouping": true,
2370 | "maximumFractionDigits": 1
2371 | }
2372 | },
2373 | "max": 100
2374 | }
2375 | }
2376 | },
2377 | "customWidth": "25",
2378 | "showPin": true,
2379 | "name": "hostperf-memory",
2380 | "styleSettings": {
2381 | "margin": "1px",
2382 | "padding": "1px",
2383 | "showBorder": true
2384 | }
2385 | },
2386 | {
2387 | "type": 3,
2388 | "content": {
2389 | "version": "KqlItem/1.0",
2390 | "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 == \"Network Interface\" \r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), Computer, InstanceName, CounterName ",
2391 | "size": 1,
2392 | "aggregation": 3,
2393 | "title": "Network Usage per host",
2394 | "timeContext": {
2395 | "durationMs": 2592000000
2396 | },
2397 | "timeContextFromParameter": "TimeRange",
2398 | "queryType": 0,
2399 | "resourceType": "microsoft.operationalinsights/workspaces",
2400 | "crossComponentResources": [
2401 | "{Workspace}"
2402 | ],
2403 | "visualization": "timechart",
2404 | "chartSettings": {
2405 | "ySettings": {
2406 | "numberFormatSettings": {
2407 | "unit": 11,
2408 | "options": {
2409 | "style": "decimal",
2410 | "useGrouping": true,
2411 | "maximumFractionDigits": 1
2412 | }
2413 | }
2414 | }
2415 | }
2416 | },
2417 | "customWidth": "25",
2418 | "showPin": true,
2419 | "name": "hostperf-network",
2420 | "styleSettings": {
2421 | "margin": "1px",
2422 | "padding": "1px",
2423 | "showBorder": true
2424 | }
2425 | },
2426 | {
2427 | "type": 3,
2428 | "content": {
2429 | "version": "KqlItem/1.0",
2430 | "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 == \"RemoteFX Network\" and InstanceName matches regex @\"(rdp-sxs\\d{9}\\s\\d{0,7}|rdp-sxs#\\d{0,7}|rdp-sxs \\d{0,7})\" and CounterName == \"Current TCP RTT\" and CounterValue > 0\r\n| summarize RTTLatency =avg(CounterValue) by Computer, bin(TimeGenerated, 5m), InstanceName\r\n| order by RTTLatency desc",
2431 | "size": 0,
2432 | "aggregation": 3,
2433 | "title": "RTT Latency avg by Computer (ms)",
2434 | "timeContext": {
2435 | "durationMs": 0
2436 | },
2437 | "timeContextFromParameter": "TimeRange",
2438 | "queryType": 0,
2439 | "resourceType": "microsoft.operationalinsights/workspaces",
2440 | "crossComponentResources": [
2441 | "{Workspace}"
2442 | ],
2443 | "visualization": "timechart"
2444 | },
2445 | "name": "hostperf-rtt"
2446 | },
2447 | {
2448 | "type": 3,
2449 | "content": {
2450 | "version": "KqlItem/1.0",
2451 | "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 == \"RemoteFX Network\" and InstanceName matches regex @\"(rdp-sxs\\d{9}\\s\\d{0,7}|rdp-sxs#\\d{0,7}|rdp-sxs \\d{0,7})\" and CounterName == \"Current TCP RTT\" and CounterValue > 0\r\n| summarize RTTLatency =avg(CounterValue) by InstanceName, bin(TimeGenerated, 5m), Computer\r\n| project RTTLatency, TimeGenerated, strcat(InstanceName, \"-\", Computer)\r\n| order by RTTLatency desc",
2452 | "size": 0,
2453 | "aggregation": 3,
2454 | "title": "RTT Latency avg by SessionID (ms)",
2455 | "timeContext": {
2456 | "durationMs": 0
2457 | },
2458 | "timeContextFromParameter": "TimeRange",
2459 | "queryType": 0,
2460 | "resourceType": "microsoft.operationalinsights/workspaces",
2461 | "crossComponentResources": [
2462 | "{Workspace}"
2463 | ],
2464 | "visualization": "timechart",
2465 | "chartSettings": {
2466 | "group": "Column1",
2467 | "createOtherGroup": 0,
2468 | "showLegend": true
2469 | }
2470 | },
2471 | "name": "hostperf-rtt - Usersessions"
2472 | }
2473 | ]
2474 | },
2475 | "conditionalVisibility": {
2476 | "parameterName": "selectedTab",
2477 | "comparison": "isEqualTo",
2478 | "value": "HostPerformance"
2479 | },
2480 | "name": "hostperformance"
2481 | },
2482 | {
2483 | "type": 12,
2484 | "content": {
2485 | "version": "NotebookGroup/1.0",
2486 | "groupType": "editable",
2487 | "items": [
2488 | {
2489 | "type": 1,
2490 | "content": {
2491 | "json": "# Disk Performance"
2492 | },
2493 | "name": "text - 0"
2494 | },
2495 | {
2496 | "type": 3,
2497 | "content": {
2498 | "version": "KqlItem/1.0",
2499 | "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 == \"PhysicalDisk\" and InstanceName !contains \"Total\"\r\n| join (Perf\r\n| where (ObjectName == \"PhysicalDisk\" and CounterName == \"Avg. Disk Bytes/Read\")\r\n| make-series AvgDiskBytesRead = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project AvgDiskBytesRead, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"PhysicalDisk\" and CounterName == \"Avg. Disk Bytes/Write\")\r\n| make-series AvgDiskBytesWrite = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project AvgDiskBytesWrite, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"PhysicalDisk\" and CounterName == \"Avg. Disk sec/Write\")\r\n| make-series AvgDiskSecBytesWrite = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project AvgDiskSecBytesWrite, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"PhysicalDisk\" and CounterName == \"Avg. Disk sec/Read\")\r\n| make-series DiskReadsSec = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project DiskReadsSec, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"PhysicalDisk\" and CounterName == \"Avg. Disk Bytes/Transfer\")\r\n| make-series AvgDiskSecBytesTransfer = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project AvgDiskSecBytesTransfer, Computer) on Computer\r\n| join (Perf\r\n| where (ObjectName == \"PhysicalDisk\" and CounterName == \"Avg. Disk sec/Transfer\")\r\n| make-series AvgDiskSecTransfer = avg(CounterValue) default=0 on TimeGenerated from {TimeRange:start} to {TimeRange:end} step {TimeRange:grain} by ObjectName, Computer | project AvgDiskSecTransfer, Computer) on Computer\r\n| project Computer, AvgDiskBytesRead, AvgDiskBytesWrite, AvgDiskSecBytesWrite, DiskReadsSec, AvgDiskSecBytesTransfer, AvgDiskSecTransfer",
2500 | "size": 0,
2501 | "title": "Host Disk Performance Overview",
2502 | "noDataMessage": "No results. Please ensure that you have configured collection of disk performance counters across your hosts.",
2503 | "noDataMessageStyle": 4,
2504 | "timeContext": {
2505 | "durationMs": 0
2506 | },
2507 | "timeContextFromParameter": "TimeRange",
2508 | "queryType": 0,
2509 | "resourceType": "microsoft.operationalinsights/workspaces",
2510 | "crossComponentResources": [
2511 | "{Workspace}"
2512 | ],
2513 | "gridSettings": {
2514 | "formatters": [
2515 | {
2516 | "columnMatch": "AvgDiskBytesRead",
2517 | "formatter": 21,
2518 | "formatOptions": {
2519 | "palette": "blue"
2520 | }
2521 | },
2522 | {
2523 | "columnMatch": "AvgDiskBytesWrite",
2524 | "formatter": 21,
2525 | "formatOptions": {
2526 | "palette": "blue"
2527 | }
2528 | },
2529 | {
2530 | "columnMatch": "AvgDiskSecBytesWrite",
2531 | "formatter": 21,
2532 | "formatOptions": {
2533 | "palette": "blue"
2534 | }
2535 | },
2536 | {
2537 | "columnMatch": "DiskReadsSec",
2538 | "formatter": 21,
2539 | "formatOptions": {
2540 | "palette": "blue"
2541 | }
2542 | },
2543 | {
2544 | "columnMatch": "AvgDiskSecBytesTransfer",
2545 | "formatter": 21,
2546 | "formatOptions": {
2547 | "palette": "blue"
2548 | }
2549 | },
2550 | {
2551 | "columnMatch": "AvgDiskSecTransfer",
2552 | "formatter": 21,
2553 | "formatOptions": {
2554 | "palette": "blue"
2555 | }
2556 | }
2557 | ]
2558 | }
2559 | },
2560 | "name": "query - 3"
2561 | },
2562 | {
2563 | "type": 9,
2564 | "content": {
2565 | "version": "KqlParameterItem/1.0",
2566 | "crossComponentResources": [
2567 | "{Workspace}"
2568 | ],
2569 | "parameters": [
2570 | {
2571 | "id": "36641c91-e8dc-4fb1-a4f0-0f981443a37b",
2572 | "version": "KqlParameterItem/1.0",
2573 | "name": "DiskCounter",
2574 | "label": "Disk Counter",
2575 | "type": 2,
2576 | "isRequired": true,
2577 | "multiSelect": true,
2578 | "quote": "'",
2579 | "delimiter": ",",
2580 | "query": "Perf\r\n| where ObjectName == \"LogicalDisk\"\r\n| summarize Count = count() by CounterName\r\n| project value = CounterName, label = CounterName, Selected = Count >= 0",
2581 | "crossComponentResources": [
2582 | "{Workspace}"
2583 | ],
2584 | "value": [
2585 | "% Free Space"
2586 | ],
2587 | "typeSettings": {
2588 | "additionalResourceOptions": [
2589 | "value::all"
2590 | ],
2591 | "showDefault": false
2592 | },
2593 | "timeContext": {
2594 | "durationMs": 0
2595 | },
2596 | "timeContextFromParameter": "TimeRange",
2597 | "queryType": 0,
2598 | "resourceType": "microsoft.operationalinsights/workspaces"
2599 | }
2600 | ],
2601 | "style": "pills",
2602 | "queryType": 0,
2603 | "resourceType": "microsoft.operationalinsights/workspaces"
2604 | },
2605 | "name": "parameters - 2"
2606 | },
2607 | {
2608 | "type": 3,
2609 | "content": {
2610 | "version": "KqlItem/1.0",
2611 | "query": "let WVDHosts = dynamic([{WVDHosts}]);\r\nlet Counter = dynamic([{DiskCounter}]);\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 == \"LogicalDisk\" and CounterName in (Counter) and InstanceName !contains \"Total\"\r\n| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 10m), CounterName, Computer, InstanceName",
2612 | "size": 0,
2613 | "aggregation": 3,
2614 | "showAnalytics": true,
2615 | "title": "{DiskCounter}",
2616 | "timeContext": {
2617 | "durationMs": 0
2618 | },
2619 | "timeContextFromParameter": "TimeRange",
2620 | "queryType": 0,
2621 | "resourceType": "microsoft.operationalinsights/workspaces",
2622 | "crossComponentResources": [
2623 | "{Workspace}"
2624 | ],
2625 | "visualization": "linechart",
2626 | "chartSettings": {
2627 | "group": "Computer",
2628 | "createOtherGroup": null,
2629 | "showLegend": true,
2630 | "ySettings": {
2631 | "numberFormatSettings": {
2632 | "unit": 0,
2633 | "options": {
2634 | "style": "decimal",
2635 | "useGrouping": true,
2636 | "maximumFractionDigits": 2
2637 | }
2638 | }
2639 | }
2640 | }
2641 | },
2642 | "name": "diskperfall"
2643 | }
2644 | ]
2645 | },
2646 | "conditionalVisibility": {
2647 | "parameterName": "selectedTab",
2648 | "comparison": "isEqualTo",
2649 | "value": "DiskPerformance"
2650 | },
2651 | "name": "diskperformancegroup"
2652 | }
2653 | ],
2654 | "fallbackResourceIds": [
2655 | "Azure Monitor"
2656 | ],
2657 | "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
2658 | }
2659 |
--------------------------------------------------------------------------------