Partager via


Exemples de requêtes de diagnostic pour la mise à jour d’hôte de session dans Azure Virtual Desktop

Important

La mise à jour d’hôte de session pour Azure Virtual Desktop est actuellement en PRÉVERSION. Cette préversion est fournie en l’état, avec tous les défauts et selon les disponibilités, et est exclue des contrats de niveau de service (SLA) ou de toute garantie limitée que Microsoft fournit pour les services Azure en disponibilité générale. Pour vous inscrire à la préversion limitée, remplissez ce formulaire : https://forms.office.com/r/ZziQRGR1Lz.

Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

La mise à jour d’hôte de session utilise Log Analytics dans Azure Monitor pour stocker des informations sur les mises à jour. Cet article contient quelques exemples de requêtes que vous pouvez utiliser avec Log Analytics pour afficher des informations de diagnostic sur les mises à jour d’hôte de session.

Prérequis

Avant de pouvoir utiliser ces requêtes, vous avez besoin des éléments suivants :

  • Un pool d’hôtes existant avec une configuration d’hôte de session.

  • Les paramètres de diagnostic configurés sur chaque pool d’hôtes que vous utilisez avec la mise à jour d’hôte de session pour envoyer des journaux et des métriques à un espace de travail Log Analytics. Au minimum, les catégories Point de contrôle, Erreur et Journaux d’activité de la Gestion des hôtes de session doivent être activés.

  • Une mise à jour d’hôte de session déjà planifiée et exécutée sur les hôtes de session dans le pool d’hôtes.

Emplacement des données de diagnostic

Une fois que vous avez configuré les paramètres de diagnostic sur un pool d’hôtes, les données de diagnostic pour la mise à jour d’hôte de session sont stockées dans les tables WVDSessionHostManagement et WVDCheckpoints de votre espace de travail Log Analytics. Les entrées de journal utilisent le type d’activité Gestion existant, qui provient du fournisseur Azure Resource Manager (ARM).

La table WVDSessionHostManagement est spécifique à la mise à jour d’hôte de session et est créée une fois que vous avez activé la catégorie Journaux d’activité de la Gestion des hôtes de session sur les paramètres de diagnostic de chaque pool d’hôtes que vous utilisez avec la mise à jour d’hôte de session, et les exécutions de mise à jour d’hôte de session. Si vous avez déjà configuré les paramètres de diagnostic pour un pool d’hôtes, vous devez activer la catégorie Journaux d’activité de la Gestion des hôtes de session. Pour plus d’informations, consultez Configurer les paramètres de diagnostic pour capturer les journaux et les métriques de plateforme pour Azure Virtual Desktop.

Le reste de cet article présente des exemples de requêtes que vous pouvez exécuter. Vous pouvez les utiliser comme base pour créer vos propres requêtes. Vous devez exécuter chacune de ces requêtes dans Log Analytics. Pour plus d’informations sur l’exécution des requêtes, consultez Démarrer Log Analytics.

Mises à jour d’hôte de session terminées avec succès

Cette requête met en corrélation les tables WVDSessionHostManagement et WVDCheckpoints afin de fournir le temps écoulé pour effectuer une mise à jour et la durée moyenne pour mettre à jour un seul hôte de session en minutes au cours des 30 derniers jours :

let timeRange                               = ago(30d);
let succeededStatus                         = "Succeeded";
let hostPoolUpdateCompletedCheckpoint       = "HostPoolUpdateCompleted";
let sessionHostUpdateCompletedCheckpoint    = "SessionHostUpdateCompleted";
let provisioningTypeUpdate                  = "Update";
WVDSessionHostManagement
| where ProvisioningStatus == succeededStatus and TimeGenerated >= timeRange and ProvisioningType == provisioningTypeUpdate
| join kind = inner (
      // Get number of session hosts updated
    WVDCheckpoints
    | where Name == hostPoolUpdateCompletedCheckpoint
    | extend ParametersParsed = parse_json(Parameters)
    | extend SessionHostUpdateCount = ParametersParsed["SessionHostsUpdateCompleted"], UpdateCompletionTime = todatetime(ParametersParsed["TimeCompleted"]), UpdateStartTime = todatetime(ParametersParsed["TimeStarted"])
    | project CorrelationId, SessionHostUpdateCount, UpdateStartTime, UpdateCompletionTime
) on CorrelationId
| join kind = inner
(
      // Get time to update individual session hosts
    WVDCheckpoints
    | where Name == sessionHostUpdateCompletedCheckpoint
    | extend ParametersParsed = parse_json(Parameters)
    | extend SessionHostUpdateTime = todecimal(ParametersParsed["TimeTakenToUpdateSessionHostInSeconds"])
    // Calculate median time to update session host
    | summarize SessionHostMedianUpdateTime = percentile(SessionHostUpdateTime, 50) by CorrelationId
) on CorrelationId
| project TimeGenerated, _SubscriptionId, _ResourceId, CorrelationId, UpdateStartDateTime = UpdateStartTime, UpdateEndDateTime = UpdateCompletionTime, ['UpdateDuration [InMinutes]'] = datetime_diff('minute', UpdateCompletionTime, UpdateStartTime), SessionHostUpdateCount, ['MedianSessionHostUpdateTime [InMinutes]'] = toint(SessionHostMedianUpdateTime/(60 * 1.0)), UpdateBatchSize = UpdateMaxVmsRemoved, FromSessionHostConfigVer, ToSessionHostConfigVer, UpdateDeleteOriginalVm

Le jeu de données retourné est le suivant :

Colonne Définition
TimeGenerated Horodatage de l’événement généré par le système
_SubscriptionId ID d’abonnement d’un pool d’hôtes
_ResourceId ID de ressource d’un pool d’hôtes
CorrelationId Identificateur unique affecté à chaque mise à jour d’image effectuée sur un pool d’hôtes
UpdateStartDateTime Horodatage du démarrage de la mise à jour d’hôte de session au format UTC
UpdateEndDateTime Horodatage de la fin de la mise à jour d’hôte de session au format UTC
UpdateDuration Temps écoulé pour mettre à jour l’image de tous les hôtes de session dans un pool d’hôtes en minutes
SessionHostUpdateCount Nombre d’hôtes de session mis à jour
MedianSessionHostUpdateTime Durée moyenne pour mettre à jour l’image d’un seul hôte de session en minutes
UpdateBatchSize Nombre d’hôtes de session qui se trouvaient dans un seul lot pendant une mise à jour de l’image
FromSessionHostConfigVer Configuration de l’hôte de session avant une mise à jour de l’image
ToSessionHostConfigVer Configuration de l’hôte de session après une mise à jour de l’image
UpdateDeleteOriginalVm Indique si la machine virtuelle d’origine a été conservée après la fin d’une mise à jour de l’image

Erreurs lors de la mise à jour d’un hôte de session

Cette requête met en corrélation les tables WVDSessionHostManagement et WVDErrors pour fournir des informations que vous pouvez utiliser pour résoudre les erreurs lors des mises à jour des hôtes de session au cours des 30 derniers jours :

let timeRange               = ago(30d);
let provisioningTypeUpdate  = "Update";
WVDSessionHostManagement
| where ProvisioningStatus  in ("Failed", "Error", "Canceled") and TimeGenerated >= timeRange and ProvisioningType == provisioningTypeUpdate
| summarize arg_max(TimeGenerated, _ResourceId, _SubscriptionId, FromSessionHostConfigVer, ToSessionHostConfigVer) by CorrelationId
| join kind = inner 
(
      // Get image update errors
    WVDErrors
    | where TimeGenerated >= timeRange
    | extend IsSessionHostResourceIdAvailable = iif(Message startswith "SessionHostResourceId", 1, 0)
    | extend startIndex = iif(IsSessionHostResourceIdAvailable == 1, indexof(Message, ":") + 1, 0)
    | extend length = iif(IsSessionHostResourceIdAvailable == 1, indexof(Message, ";") - startIndex, 0)
    // Get Session host ResourceId when available
    | extend SessionHostResourceId = iif(IsSessionHostResourceIdAvailable == 1, substring(Message, startIndex, length), "")
    | project TimeGenerated, CorrelationId, SessionHostResourceId, CodeSymbolic, Message
) on CorrelationId
| project TimeGenerated, _SubscriptionId, _ResourceId, CorrelationId, CodeSymbolic, SessionHostResourceId, Message, FromSessionHostConfigVer, ToSessionHostConfigVer

Le jeu de données retourné est le suivant :

Colonne Définition
TimeGenerated Horodatage de l’événement généré par le système
_SubscriptionId ID d’abonnement d’un pool d’hôtes
_ResourceId ID de ressource d’un pool d’hôtes
CorrelationId Identificateur unique affecté à chaque mise à jour d’image effectuée sur un pool d’hôtes
CodeSymbolic Code d’erreur
SessionHostResourceId ID de ressource d’un hôte de session, le cas échéant
Message Informations sur l'erreur
FromSessionHostConfigVer Version de la configuration de l’hôte de session avant une mise à jour d’image
ToSessionHostConfigVer Version de la configuration de l’hôte de session vers laquelle les hôtes de session ont été mis à jour où le processus de mise à jour a échoué

Mises à jour de l’hôte de session annulées par un administrateur avant l’heure planifiée

Cette requête met en corrélation les tables WVDSessionHostManagement et WVDCheckpoints pour fournir les mises à jour d’hôte de session qui étaient planifiées, mais qui ont été annulées par un administrateur avant qu’elles ne démarrent, au cours des 30 derniers jours :

let timeRange                           = ago(30d);
let canceledStatus                      = "Canceled";
let scheduledStatus                     = "Scheduled";
let hostPoolUpdateCanceledCheckpoint    = "HostPoolUpdateCanceled";
let provisioningTypeUpdate              = "Update";
WVDSessionHostManagement
| where ProvisioningStatus == canceledStatus and TimeGenerated >= timeRange and ProvisioningType == provisioningTypeUpdate
| join kind = inner
(
    WVDCheckpoints
    | where Name == "HostPoolUpdateCanceled"
    | project TimeGenerated, CorrelationId, Name, Parameters
    | extend ParametersParsed = parse_json(Parameters)
    | extend StateFrom = tostring(ParametersParsed["StateFrom"]), StateTo = tostring(ParametersParsed["StateTo"]), CanceledTime = todatetime(ParametersParsed["TimeCanceled"])
    | where StateFrom == scheduledStatus and StateTo == canceledStatus
) on CorrelationId
| project TimeGenerated, _SubscriptionId, _ResourceId, CorrelationId, ScheduledDateTime = todatetime(ScheduledDateTime), CanceledDateTime = CanceledTime, UpdateBatchSize = UpdateMaxVmsRemoved

Le jeu de données retourné est le suivant :

Colonne Définition
TimeGenerated Horodatage de l’événement généré par le système
_SubscriptionId ID d’abonnement d’un pool d’hôtes
_ResourceId ID de ressource d’un pool d’hôtes
CorrelationId Identificateur unique affecté à chaque mise à jour de l’image d’un pool d’hôtes
ScheduledDateTime Heure planifiée de la mise à jour d’hôte de session au format UTC
CanceledDateTime Heure UTC de l’annulation d’une mise à jour de l’image par un administrateur
UpdateBatchSize Nombre d’hôtes de session qui se trouvaient dans un seul lot pendant une mise à jour de l’image

Mises à jour d’hôte de session qui étaient en cours ou en échec, puis annulées ultérieurement par un administrateur

Cette requête met en corrélation les tables WVDSessionHostManagement et WVDCheckpoints pour fournir les mises à jour d’hôte de session qui étaient en cours ou en échec, puis qui ont été annulées par un administrateur au cours des 30 derniers jours :

let timeRange                           = ago(30d);
let canceledStatus                      = "Canceled";
let scheduledStatus                     = "Scheduled";
let hostPoolUpdateCanceledCheckpoint    = "HostPoolUpdateCanceled";
let provisioningTypeUpdate              = "Update";
WVDSessionHostManagement
| where ProvisioningStatus == canceledStatus and TimeGenerated >= timeRange and ProvisioningType == provisioningTypeUpdate
| join kind = inner
(
    WVDCheckpoints
    | where Name == hostPoolUpdateCanceledCheckpoint
    | project TimeGenerated, CorrelationId, Name, Parameters
    | extend ParametersParsed = parse_json(Parameters)
    | extend StateFrom = tostring(ParametersParsed["StateFrom"]), StateTo = tostring(ParametersParsed["StateTo"]), CanceledTime = todatetime(ParametersParsed["TimeCanceled"]), TotalSessionHostsInHostPool = toint(ParametersParsed["TotalSessionHostsInHostPool"]), SessionHostUpdateCount = ParametersParsed["SessionHostsUpdateCompleted"]
    | where StateFrom != scheduledStatus and StateTo == canceledStatus
) on CorrelationId
| project TimeGenerated, _SubscriptionId, _ResourceId, CorrelationId, ScheduledDateTime = todatetime(ScheduledDateTime), CanceledDateTime = CanceledTime, TotalSessionHostsInHostPool, SessionHostUpdateCount, UpdateBatchSize = UpdateMaxVmsRemoved

Le jeu de données retourné est le suivant :

Colonne Définition
TimeGenerated Horodatage de l’événement généré par le système
_SubscriptionId ID d’abonnement d’un pool d’hôtes
_ResourceId ID de ressource d’un pool d’hôtes
CorrelationId Identificateur unique affecté à chaque mise à jour de l’hôte de session d’un pool d’hôtes
ScheduledDateTime Heure planifiée de la mise à jour d’hôte de session au format UTC
CanceledDateTime Heure UTC de l’annulation d’une mise à jour de l’hôte de session par un administrateur
TotalSessionHostsInHostPool Nombre total d’hôtes de session dans un pool d’hôtes
SessionHostUpdateCount Nombre d’hôtes de session qui ont été mis à jour avant l’annulation d’une mise à jour d’hôte de session
UpdateBatchSize Nombre d’hôtes de session dans un seul lot pendant une mise à jour de l’hôte de session

État de chaque mise à jour d’hôte de session

Cette requête met en corrélation les tables WVDSessionHostManagement et WVDCheckpoints pour fournir l’état le plus récent de chaque mise à jour d’hôte de session au cours des 30 derniers jours :

let timeRange                               = ago(30d);
let sessionHostUpdateCompletedCheckpoint    = "SessionHostUpdateCompleted";
let provisioningTypeUpdate                  = "Update";
WVDSessionHostManagement
| where TimeGenerated >= timeRange and ProvisioningType == provisioningTypeUpdate
| join kind = leftouter (
      // Get number of session hosts updated if available
    WVDCheckpoints
    | where Name == sessionHostUpdateCompletedCheckpoint
    | summarize SessionHostUpdateCount = count() by CorrelationId
) on CorrelationId
| summarize arg_max(TimeGenerated, _SubscriptionId, _ResourceId, ScheduledDateTime, UpdateMaxVmsRemoved, SessionHostUpdateCount, ProvisioningStatus) by CorrelationId
| project TimeGenerated, _SubscriptionId, _ResourceId, CorrelationId, ProvisioningStatus, ScheduledDateTime = todatetime(ScheduledDateTime), UpdateBatchSize = UpdateMaxVmsRemoved, SessionHostUpdateCount = iif(isempty(SessionHostUpdateCount), 0, SessionHostUpdateCount)

Le jeu de données retourné est le suivant :

Colonne Définition
TimeGenerated Horodatage de l’événement généré par le système
_SubscriptionId ID d’abonnement pour un pool d’hôtes
_ResourceId ID de ressource d’un pool d’hôtes
CorrelationId Identificateur unique affecté à chaque mise à jour de l’image d’un pool d’hôtes
ProvisioningStatus État actuel d’une mise à jour de l’image d’un pool d’hôtes
ScheduledDateTime Heure planifiée de la mise à jour d’hôte de session au format UTC
UpdateBatchSize Nombre d’hôtes de session dans un seul lot pendant une mise à jour de l’image
SessionHostUpdateCount Nombre d’hôtes de session qui ont été mis à jour

Étapes suivantes

Pour obtenir des conseils de dépannage pour la mise à jour d’hôte de session, consultez Résoudre les problèmes de mise à jour d’hôte de session.