Примеры диагностических запросов для обновления узла сеанса в Виртуальном рабочем столе 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 | Количество обновленных узлов сеансов |
Следующие шаги
Рекомендации по устранению неполадок обновления узла сеанса см. в разделе "Устранение неполадок с обновлением узла сеанса".