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.