joseangelfernandez.es solo otro blog más…

Consulta de las métricas de uso en Windows Virtual Desktop

El uso de Windows Virtual Desktop (WVD) como herramienta para desplegar entornos de trabajo remoto en estos tiempos de pandemia se ha incrementado considerablemente. De forma global, se había visto un crecimiento de un 300% en las últimas semanas. A día de hoy, es la carga de trabajo que nos encontramos prácticamente en todos nuestros clientes independiente del sector industrial al que pertenezcan.

Una vez que hemos trabajado para tener el entorno inicial en marcha y los usuarios están haciendo uso del servicio, surge la necesidad de conocer mejor qué es lo que está sucediendo y empezar a sacar estádisticas y realizar análisis del mismo. A día de hoy, WVD no tiene una integración directa con el portal de Azure que nos permita verlo; sin embargo, eso no quiere decir que no podamos tener esos datos.

El primer paso necesario es activar el envío de los logs de actividad a Azure Monitor Logs. Esto nos permitirá monitorizar las siguientes actividades en nuestro tenant:

Los eventos quedarán registrados en la tabla WVDActivityV1_CL dentro de nuestro área de trabajo de Azure Monitor Logs. Junto a ella, también se crearán las tabla WVDCheckpointV1_CL y WVDErrorV1_CL que contienen eventos internos y los errores relacionados con el sistema respectivamente.

Por lo tanto, si necesitas recuperar información histórica de uso para saber quién se ha conectado, cuántas veces lo ha hecho, cuánto tiempo han estado conectados o qué aplicaciones o nodos han utilizado, este es el camino. La información está disponible en bruto por lo que será necesario que construyas las consultas de Kusto específicas para extraer los datos que te interesen. En la propia documentación vienen algunos ejemplos para empezar.

Os recomendaría empezar filtrando por las actividades cuyo Type_s sea igual a Connection; si queréis filtrar por tipo de recurso utilizado, emplear el parámetro ResourceType igual a DESKTOP, para sesiones de escritorio remoto, o a RAIL, para sesiones de aplicaciones virtualizadas. En la siguiente tabla os dejo un ejemplo de cada uno de estos dos eventos para que os sirva de referencia para vuestras consultas:

Registro inicio de sesión en un escritorio virtual

Párametro Valor
SourceSystem RestAPI
TimeGenerated [UTC] 2020-04-01T12:11:52.776Z
PredecessorConnectionId_s <>
ResourceAlias_s SessionDesktop
ResourceType DESKTOP
SessionHostPoolName_s xxx-Pool-01
SessionHostName_s RDSH-Pool-0.aadds.xxx.es
SessionHostIPAddress_s 13.80.xx.xx
AgentOSVersion_s 10.0.18363
AgentOSDescription_s Windows 10 Enterprise for Virtual Desktops
AgentSxsStackVersion_s rdp-sxs200326004
ClientOS_s Windows 10 Chrome 80.0.3987.149
ClientVersion_s 1.0.21.1
ClientType_s HTML
ClientIPAddress_s <
Id_g a68a5265-3e2b-xxxx-xxxx-aa06e9510000
Type_s Connection
StartTime_t [UTC] 2020-04-01T11:30:03.59Z
EndTime_t [UTC] 2020-04-01T12:11:22.502Z
UserName_s xxx@xxx.es
Outcome_s Success
Status_s Completed
TenantId_s xxxWVD
Type WVDActivityV1_CL

Registro inicio de sesión en una aplicación virtualizada

Párametro Valor
SourceSystem RestAPI
TimeGenerated [UTC] 2020-03-30T16:57:19.957Z
PredecessorConnectionId_s <>
ResourceAlias_s powerpoint
ResourceType RAIL
SessionHostPoolName_s xxx-Pool-01
SessionHostName_s RDSH-Pool-0.aadds.xxx.es
SessionHostIPAddress_s 13.80.xx.xx
AgentOSVersion_s 10.0.18363
AgentOSDescription_s Windows 10 Enterprise for Virtual Desktops
AgentSxsStackVersion_s rdp-sxs200326004
ClientOS_s Windows 10 Chrome 83.0.4086.0
ClientVersion_s 1.0.21.1
ClientType_s HTML
ClientIPAddress_s <>
Id_g 7f9b814c-8d9f-xxxx-xxxx-c7446f290000
Type_s Connection
StartTime_t [UTC] 2020-03-30T16:50:39.229Z
EndTime_t [UTC] 2020-03-30T16:54:47.111Z
UserName_s xxx@xxx.es
Outcome_s Failure
Status_s Completed
TenantId_s VirtualdomWVD
Type WVDActivityV1_CL

Os dejo algunas consultas que puedan servir para consultar este tipo de estadísticas de uso:

// Number of sessions, both Desktop 
// and Remote Apps, per user
WVDActivityV1_CL 
| where ResourceType == "DESKTOP" or 
    ResourceType == "RAIL"
| extend Duration = EndTime_t - StartTime_t 
| project SessionHostName_s, UserName_s, 
    Duration, StartTime_t, EndTime_t    
| summarize Number_Sessions = count() by UserName_s

// Desktop usage by user, application name, 
// session host and duration of the session
WVDActivityV1_CL 
| where ResourceType == "DESKTOP"
| extend Duration = EndTime_t - StartTime_t 
| project SessionHostName_s , UserName_s, 
    Duration, StartTime_t, EndTime_t      

// Remote Application usage by user, application name, 
// session host and duration of the session
WVDActivityV1_CL
| where ResourceType == "RAIL"
| extend Duration = EndTime_t - StartTime_t 
| project SessionHostName_s, UserName_s, Duration,  
    ResourceAlias_s, StartTime_t, EndTime_t   

Si tenéis algunas consultas ya creada que sean útiles, no dudéis en compartirlas. De esta manera, será más fácil reutilizar el conocimiento entre todos.

Photo by form PxHere