Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Важно!
Обновление узла сеансов для Виртуального рабочего стола 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 | Число обновленных узлов сеансов |
Дальнейшие действия
Инструкции по устранению неполадок при обновлении узла сеанса см. в статье Устранение неполадок с обновлением узла сеансов.