共用方式為


Azure 虛擬桌面中會話主機更新的範例診斷查詢

重要

Azure 虛擬桌面的會話主機更新目前為預覽狀態。 請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。

會話主機更新會使用 Azure 監視器 中的 Log Analytics 來儲存更新的相關信息。 本文有一些您可以搭配Log Analytics使用的 Kusto 查詢範例,以查看會話主機更新的相關信息。

必要條件

您必須先執行下列動作,才能使用這些查詢:

診斷數據位置

在主機集區上設定診斷設定之後,會話主機更新的診斷數據會儲存在Log Analytics工作區的數據表 WVDSessionHostManagementWVDCheckpoints 數據表中。 記錄專案會使用來自 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 已更新的會話主機數目

下一步

如需會話主機更新的疑難解答指引,請參閱 針對會話主機更新進行疑難解答。