Поделиться через


Примеры диагностических запросов для обновления узла сеанса в Виртуальном рабочем столе Azure

Внимание

Обновление узла сеанса для виртуального рабочего стола Azure в настоящее время находится в предварительной версии. Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.

Обновление узла сеансов использует Log Analytics в Azure Monitor для хранения сведений об обновлениях. В этой статье приведены примеры запросов Kusto, которые можно использовать с Log Analytics для просмотра сведений об обновлениях узла сеанса.

Необходимые компоненты

Прежде чем использовать эти запросы, вам потребуется:

  • Существующий пул узлов с конфигурацией узла сеанса.

  • Настроенные параметры диагностики для каждого пула узлов, используемого с обновлением узла сеанса для отправки журналов и метрик в рабочую область Log Analytics. Журналы действий управления узлами узла сеансов, контрольные точки, ошибки и сеансы должны быть включены как минимум.

  • Ранее запланированное обновление узла сеанса и обновление узла сеансов на узлах сеансов в пуле узлов.

Расположение диагностических данных

После настройки параметров диагностики в пуле узлов диагностические данные для обновления узла сеанса хранятся в таблицах WVDSessionHostManagement и WVDCheckpoints рабочей области Log Analytics. Записи журнала используют существующий тип действия управления , поступающий от поставщика Azure Resource Manager (ARM).

Таблица WVDSessionHostManagement относится к обновлению узла сеанса и создается после включения журналов действий управления узлами сеансов категории в параметрах диагностики для каждого пула узлов, используемого при обновлении узла сеанса, и запусках обновлений узла сеансов. Если вы ранее настроили параметры диагностики для пула узлов, необходимо включить журналы действий управления узлами сеансов категории. Дополнительные сведения о настройке параметров диагностики для записи журналов и метрик платформы для виртуального рабочего стола Azure.

В остальной части этой статьи есть некоторые примеры запросов, которые можно выполнить. Их можно использовать в качестве основы для создания собственных запросов. Необходимо выполнить каждый из этих запросов в Log Analytics. Дополнительные сведения о том, как выполнять запросы, см. в разделе "Запуск Log Analytics".

Обновления узла сеанса, успешно завершенные

Этот запрос сопоставляет таблицы WVDSessionHostManagement и предоставляет время, затраченное на завершение обновления, WVDCheckpoints и время медиана для обновления одного узла сеанса в минутах за последние 30 дней:

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

Возвращаемый набор данных выглядит следующим образом:

Столбец Определение
TimeGenerated Метка времени создания системного события
_SubscriptionId Идентификатор подписки пула узлов
_ResourceId Идентификатор ресурса пула узлов
CorrelationId Уникальный идентификатор, назначенный каждому обновлению образа, выполняемого в пуле узлов
UpdateStartDateTime Метка времени начала обновления узла сеанса в формате UTC
UpdateEndDateTime Метка времени завершения обновления узла сеанса в формате UTC
UpdateDuration Время, затраченное на обновление образа всех узлов сеансов в пуле узлов в минутах
SessionHostUpdateCount Количество обновленных узлов сеансов
MedianSessionHostUpdateTime Время медиана для обновления образа одного узла сеанса в минутах
UpdateBatchSize Количество узлов сеансов, которые находились в одном пакете во время обновления образа
FromSessionHostConfigVer Настройка узла сеанса перед обновлением образа
ToSessionHostConfigVer Конфигурация узла сеанса после обновления образа
UpdateDeleteOriginalVm Сохраняется ли исходная виртуальная машина после завершения обновления образа.

Ошибки во время обновления узла сеанса

Этот запрос сопоставляет таблицы WVDSessionHostManagement и WVDErrors предоставляет сведения, которые можно использовать для устранения ошибок во время обновлений узла сеанса за последние 30 дней:

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

Возвращаемый набор данных выглядит следующим образом:

Столбец Определение
TimeGenerated Метка времени создания системного события
_SubscriptionId Идентификатор подписки пула узлов
_ResourceId Идентификатор ресурса пула узлов
CorrelationId Уникальный идентификатор, назначенный каждому обновлению образа, выполняемого в пуле узлов
CodeSymbolic Код ошибки
SessionHostResourceId Идентификатор ресурса узла сеанса, если применимо
Сообщение Сведения об ошибках.
FromSessionHostConfigVer Версия конфигурации узла сеанса перед обновлением образа
ToSessionHostConfigVer Версия конфигурации узла сеанса, на которую были обновлены узлы сеансов, в которых произошел сбой процесса обновления.

Обновления узла сеанса, отмененные администратором до запланированного времени

Этот запрос сопоставляет таблицы WVDSessionHostManagement и WVDCheckpoints предоставляет обновления узла сеанса, которые были запланированы, но затем отменены администратором до начала работы за последние 30 дней:

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

Возвращаемый набор данных выглядит следующим образом:

Столбец Определение
TimeGenerated Метка времени создания системного события
_SubscriptionId Идентификатор подписки пула узлов
_ResourceId Идентификатор ресурса пула узлов
CorrelationId Уникальный идентификатор, назначенный каждому обновлению образа пула узлов
ScheduledDateTime Запланированное время обновления узла сеанса в формате UTC
CanceledDateTime Время в формате UTC, когда обновление образа было отменено администратором
UpdateBatchSize Количество узлов сеансов, которые находились в одном пакете во время обновления образа

Обновления узла сеанса, которые выполнялись или завершились сбоем, а затем отменены администратором

Этот запрос сопоставляет таблицы WVDSessionHostManagement и WVDCheckpoints предоставляет обновления узла сеанса, которые выполнялись или завершились сбоем, а затем позже отменены администратором за последние 30 дней:

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

Возвращаемый набор данных выглядит следующим образом:

Столбец Определение
TimeGenerated Метка времени создания системного события
_SubscriptionId Идентификатор подписки пула узлов
_ResourceId Идентификатор ресурса пула узлов
CorrelationId Уникальный идентификатор, назначенный каждому обновлению узла сеанса пула узлов
ScheduledDateTime Запланированное время обновления узла сеанса в формате UTC
CanceledDateTime Время в формате UTC, когда администратор отменил обновление узла сеанса
TotalSessionHostsInHostPool Общее количество узлов сеансов в пуле узлов
SessionHostUpdateCount Количество узлов сеансов, которые были обновлены перед отменой обновления узла сеанса
UpdateBatchSize Количество узлов сеансов в одном пакете во время обновления узла сеанса

Состояние каждого обновления узла сеанса

Этот запрос сопоставляет таблицы WVDSessionHostManagement и WVDCheckpoints обеспечивает последнее состояние каждого обновления узла сеанса за последние 30 дней:

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)

Возвращаемый набор данных выглядит следующим образом:

Столбец Определение
TimeGenerated Метка времени создания системного события
_SubscriptionId Идентификатор подписки для пула узлов
_ResourceId Идентификатор ресурса пула узлов
CorrelationId Уникальный идентификатор, назначенный каждому обновлению образа пула узлов
ProvisioningStatus Текущее состояние обновления образа пула узлов
ScheduledDateTime Запланированное время обновления узла сеанса в формате UTC
UpdateBatchSize Количество узлов сеансов в одном пакете во время обновления образа
SessionHostUpdateCount Количество обновленных узлов сеансов

Следующие шаги

Рекомендации по устранению неполадок обновления узла сеанса см. в разделе "Устранение неполадок с обновлением узла сеанса".