Przykładowe zapytania diagnostyczne dotyczące aktualizacji hosta sesji w usłudze Azure Virtual Desktop
Ważne
Aktualizacja hosta sesji dla usługi Azure Virtual Desktop jest obecnie dostępna w wersji zapoznawczej. Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.
Aktualizacja hosta sesji używa usługi Log Analytics w usłudze Azure Monitor do przechowywania informacji o aktualizacjach. Ten artykuł zawiera przykładowe zapytania Kusto, których można używać z usługą Log Analytics, aby wyświetlić informacje o aktualizacjach hosta sesji.
Wymagania wstępne
Przed rozpoczęciem korzystania z tych zapytań potrzebne są następujące elementy:
Istniejąca pula hostów z konfiguracją hosta sesji.
Skonfigurowane ustawienia diagnostyczne w każdej puli hostów używanej z aktualizacją hosta sesji do wysyłania dzienników i metryk do obszaru roboczego usługi Log Analytics. Kategorie Punkty kontrolne, Błędy i Dzienniki aktywności zarządzania hostami sesji muszą być włączone co najmniej.
Wcześniej zaplanowana i uruchomiona aktualizacja hosta sesji na hostach sesji w puli hostów.
Lokalizacja danych diagnostycznych
Po skonfigurowaniu ustawień diagnostycznych w puli hostów dane diagnostyczne aktualizacji hosta sesji są przechowywane w tabelach WVDSessionHostManagement
i WVDCheckpoints
w obszarze roboczym usługi Log Analytics. Wpisy dziennika używają istniejącego typu działania Zarządzanie pochodzącego z dostawcy usługi Azure Resource Manager (ARM).
Tabela WVDSessionHostManagement
jest specyficzna dla aktualizacji hosta sesji i jest tworzona po włączeniu kategorii Dzienniki aktywności zarządzania hostem sesji w ustawieniach diagnostycznych dla każdej puli hostów używanej z aktualizacją hosta sesji i przebiegami aktualizacji hosta sesji. Jeśli wcześniej skonfigurowano ustawienia diagnostyczne dla puli hostów, należy włączyć kategorię Dzienniki aktywności zarządzania hostami sesji. Aby uzyskać więcej informacji Konfigurowanie ustawień diagnostycznych w celu przechwytywania dzienników platformy i metryk dla usługi Azure Virtual Desktop.
W pozostałej części tego artykułu przedstawiono przykładowe zapytania, które można uruchomić. Można ich używać jako podstawy do tworzenia własnych zapytań. Każde z tych zapytań należy uruchomić w usłudze Log Analytics. Aby uzyskać więcej informacji na temat uruchamiania zapytań, zobacz Uruchamianie usługi Log Analytics.
Aktualizacje hosta sesji zakończone pomyślnie
To zapytanie koreluje tabele WVDSessionHostManagement
i WVDCheckpoints
zapewnia czas potrzebny na ukończenie aktualizacji oraz medianę czasu aktualizacji hosta pojedynczej sesji w minutach w ciągu ostatnich 30 dni:
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
Zwrócony zestaw danych jest następujący:
Kolumna | Definicja |
---|---|
TimeGenerated | Sygnatura czasowa zdarzenia wygenerowanego przez system |
_SubscriptionId | Identyfikator subskrypcji puli hostów |
_ResourceId | Identyfikator zasobu puli hostów |
CorrelationId | Unikatowy identyfikator przypisany do każdej aktualizacji obrazu wykonanej w puli hostów |
UpdateStartDateTime | Sygnatura czasowa rozpoczęcia aktualizacji hosta sesji w formacie UTC |
UpdateEndDateTime | Sygnatura czasowa ukończenia aktualizacji hosta sesji w formacie UTC |
UpdateDuration | Czas potrzebny na zaktualizowanie obrazu wszystkich hostów sesji w puli hostów w ciągu kilku minut |
SessionHostUpdateCount | Liczba zaktualizowanych hostów sesji |
MedianSessionHostUpdateTime | Mediana czasu aktualizowania obrazu pojedynczego hosta sesji w minutach |
UpdateBatchSize | Liczba hostów sesji, które znajdowały się w jednej partii podczas aktualizacji obrazu |
FromSessionHostConfigVer | Konfiguracja hosta sesji przed aktualizacją obrazu |
ToSessionHostConfigVer | Konfiguracja hosta sesji po aktualizacji obrazu |
UpdateDeleteOriginalVm | Czy oryginalna maszyna wirtualna została zachowana po zakończeniu aktualizacji obrazu |
Błędy podczas aktualizacji hosta sesji
To zapytanie koreluje tabele WVDSessionHostManagement
i WVDErrors
dostarcza informacje, których można użyć do rozwiązywania problemów z błędami podczas aktualizacji hosta sesji w ciągu ostatnich 30 dni:
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
Zwrócony zestaw danych jest następujący:
Kolumna | Definicja |
---|---|
TimeGenerated | Sygnatura czasowa zdarzenia wygenerowanego przez system |
_SubscriptionId | Identyfikator subskrypcji puli hostów |
_ResourceId | Identyfikator zasobu puli hostów |
CorrelationId | Unikatowy identyfikator przypisany do każdej aktualizacji obrazu wykonanej w puli hostów |
CodeSymbolic | Kod błędu |
SessionHostResourceId | Identyfikator zasobu hosta sesji, jeśli ma to zastosowanie |
Komunikat | Informacje o błędzie |
FromSessionHostConfigVer | Wersja konfiguracji hosta sesji przed aktualizacją obrazu |
ToSessionHostConfigVer | Wersja konfiguracji hosta sesji, do której hosty sesji zostały zaktualizowane, gdzie proces aktualizacji zakończył się niepowodzeniem |
Aktualizacje hosta sesji anulowane przez administratora przed zaplanowanym czasem
To zapytanie koreluje tabele WVDSessionHostManagement
i WVDCheckpoints
dostarcza aktualizacje hosta sesji, które zostały zaplanowane, ale następnie anulowane przez administratora przed ich rozpoczęciem w ciągu ostatnich 30 dni:
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
Zwrócony zestaw danych jest następujący:
Kolumna | Definicja |
---|---|
TimeGenerated | Sygnatura czasowa zdarzenia wygenerowanego przez system |
_SubscriptionId | Identyfikator subskrypcji puli hostów |
_ResourceId | Identyfikator zasobu puli hostów |
CorrelationId | Unikatowy identyfikator przypisany do każdej aktualizacji obrazu puli hostów |
ScheduledDateTime | Zaplanowany czas aktualizacji hosta sesji w formacie UTC |
CanceledDateTime | Czas w formacie UTC, kiedy aktualizacja obrazu została anulowana przez administratora |
UpdateBatchSize | Liczba hostów sesji, które znajdowały się w jednej partii podczas aktualizacji obrazu |
Aktualizacje hosta sesji, które były w toku lub zakończyły się niepowodzeniem, a następnie anulowane przez administratora
To zapytanie koreluje tabele WVDSessionHostManagement
i WVDCheckpoints
udostępnia aktualizacje hosta sesji, które były w toku lub nie powiodły się, a następnie później anulowane przez administratora w ciągu ostatnich 30 dni:
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
Zwrócony zestaw danych jest następujący:
Kolumna | Definicja |
---|---|
TimeGenerated | Sygnatura czasowa zdarzenia wygenerowanego przez system |
_SubscriptionId | Identyfikator subskrypcji puli hostów |
_ResourceId | Identyfikator zasobu puli hostów |
CorrelationId | Unikatowy identyfikator przypisany do każdej aktualizacji hosta sesji puli hostów |
ScheduledDateTime | Zaplanowany czas aktualizacji hosta sesji w formacie UTC |
CanceledDateTime | Godzina w formacie UTC, gdy administrator anulował aktualizację hosta sesji |
TotalSessionHostsInHostPool | Łączna liczba hostów sesji w puli hostów |
SessionHostUpdateCount | Liczba hostów sesji, które zostały zaktualizowane przed anulowaniem aktualizacji hosta sesji |
UpdateBatchSize | Liczba hostów sesji w jednej partii podczas aktualizacji hosta sesji |
Stan każdej aktualizacji hosta sesji
To zapytanie koreluje tabele WVDSessionHostManagement
i WVDCheckpoints
zapewnia najnowszy stan każdej aktualizacji hosta sesji w ciągu ostatnich 30 dni:
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)
Zwrócony zestaw danych jest następujący:
Kolumna | Definicja |
---|---|
TimeGenerated | Sygnatura czasowa zdarzenia wygenerowanego przez system |
_SubscriptionId | Identyfikator subskrypcji dla puli hostów |
_ResourceId | Identyfikator zasobu puli hostów |
CorrelationId | Unikatowy identyfikator przypisany do każdej aktualizacji obrazu puli hostów |
ProvisioningStatus | Bieżący stan aktualizacji obrazu puli hostów |
ScheduledDateTime | Zaplanowany czas aktualizacji hosta sesji w formacie UTC |
UpdateBatchSize | Liczba hostów sesji w jednej partii podczas aktualizacji obrazu |
SessionHostUpdateCount | Liczba hostów sesji, które zostały zaktualizowane |
Następne kroki
Aby uzyskać wskazówki dotyczące rozwiązywania problemów z aktualizacją hosta sesji, zobacz Rozwiązywanie problemów z aktualizacją hosta sesji.