次の方法で共有


Azure Virtual Desktop におけるセッション ホストの更新の診断クエリの例

重要

Azure Virtual Desktop のセッション ホストの更新プログラムは現在プレビュー段階です。 ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

セッション ホストの更新では、Azure Monitor の Log Analytics を使用して更新に関する情報を保存しています。 この記事では、セッション ホストの更新に関する情報を表示するために、Log Analytics で使用できる Kusto クエリの例をいくつか紹介します。

前提条件

これらのクエリを使用するには、以下が必要です。

  • セッション ホスト構成を持つ既存のホスト プール。

  • セッション ホストの更新を使用する各ホスト プールで診断設定を構成し、ログとメトリックを Log Analytics ワークスペースに送信できるようにします。 少なくとも、[チェックポイント][エラー]、および [セッションホスト管理アクティビティ ログ] のカテゴリを有効にする必要があります。

  • ホスト プール内のセッション ホストで事前に実行してある、スケジュール済みのセッション ホスト更新

診断データの場所

ホスト プールで診断設定を構成すると、セッション ホストの更新の診断データが Log Analytics ワークスペースのテーブル WVDSessionHostManagementWVDCheckpoints に格納されます。 ログ エントリには、Azure Resource Manager (ARM) プロバイダーから取得した既存の "管理" アクティビティ タイプが使用されます。

テーブル WVDSessionHostManagement はセッション ホストの更新固有のものです。これは、セッション ホストの更新で使用する各ホスト プールの診断設定で [セッション ホスト管理アクティビティ ログ] カテゴリを有効にし、セッション ホスト更新を実行すると作成されます。 ホスト プールの診断設定を以前に構成したことがある場合は、[セッション ホスト管理アクティビティ ログ] カテゴリを有効にする必要があります。 詳細については、Azure Virtual Desktop のプラットフォーム ログとメトリックをキャプチャするための診断設定の構成に関する記事を参照してください。

この記事の残りの部分では、実行できるクエリの例をいくつか紹介します。 これらを基礎として使用して、独自のクエリを作成できます。 これらの各クエリは、Log Analytics で実行する必要があります。 クエリの実行方法の詳細については、「Log Analytics の起動」を参照してください。

正常に完了したセッション ホストの更新

このクエリはテーブル WVDSessionHostManagement および WVDCheckpoints を関連付け、過去 30 日間において、更新にかかった時間と、セッション ホストの更新 1 回にかかった時間の中央値を分単位で提供します。

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

返されるデータセットは次のとおりです。

Definition
TimeGenerated システム生成イベントのタイムスタンプ
_SubscriptionId ホスト プールのサブスクリプション ID
_ResourceId ホスト プールのリソース ID
CorrelationId ホスト プールで実行されるすべてのイメージ更新に割り当てられる一意の識別子
UpdateStartDateTime セッション ホストの更新開始のタイムスタンプ (UTC)
UpdateEndDateTime セッション ホストの更新完了のタイムスタンプ (UTC)
UpdateDuration ホスト プール内のすべてのセッション ホストのイメージを更新するのにかかった時間 (分単位)
SessionHostUpdateCount 更新されているセッション ホストの数
MedianSessionHostUpdateTime 1 つのセッション ホストのイメージを更新するのにかかった時間の中央値 (分単位)
UpdateBatchSize イメージの更新時に 1 つのバッチに含まれていたセッション ホストの数
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

返されるデータセットは次のとおりです。

Definition
TimeGenerated システム生成イベントのタイムスタンプ
_SubscriptionId ホスト プールのサブスクリプション ID
_ResourceId ホスト プールのリソース ID
CorrelationId ホスト プールで実行されるすべてのイメージ更新に割り当てられる一意の識別子
CodeSymbolic エラー コード
SessionHostResourceId セッション ホストのリソース ID (該当する場合)
メッセージ エラー情報
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

返されるデータセットは次のとおりです。

Definition
TimeGenerated システム生成イベントのタイムスタンプ
_SubscriptionId ホスト プールのサブスクリプション ID
_ResourceId ホスト プールのリソース ID
CorrelationId ホスト プールのイメージの更新ごとに割り当てられる一意の識別子
ScheduledDateTime スケジュールされたセッション ホストの更新時刻 (UTC)
CanceledDateTime イメージの更新が管理者によって取り消された時刻 (UTC)
UpdateBatchSize イメージの更新時に 1 つのバッチに含まれていたセッション ホストの数

進行中または失敗した後、管理者によって取り消されたセッション ホストの更新

このクエリは、テーブル 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

返されるデータセットは次のとおりです。

Definition
TimeGenerated システム生成イベントのタイムスタンプ
_SubscriptionId ホスト プールのサブスクリプション ID
_ResourceId ホスト プールのリソース ID
CorrelationId ホスト プールのセッション ホストのすべての更新に割り当てられる一意の識別子
ScheduledDateTime スケジュールされたセッション ホストの更新時刻 (UTC)
CanceledDateTime 管理者がセッション ホストの更新を取り消した時刻 (UTC)
TotalSessionHostsInHostPool ホスト プール内のセッション ホストの合計数
SessionHostUpdateCount セッション ホストの更新を取り消す前に更新されたセッション ホストの数
UpdateBatchSize セッション ホストの更新時に 1 つのバッチに含まれるセッション ホストの数

すべてのセッション ホストの更新の状態

このクエリは、テーブル 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)

返されるデータセットは次のとおりです。

Definition
TimeGenerated システム生成イベントのタイムスタンプ
_SubscriptionId ホスト プール用のサブスクリプション ID
_ResourceId ホスト プールのリソース ID
CorrelationId ホスト プールのイメージの更新ごとに割り当てられる一意の識別子
ProvisioningStatus ホスト プールのイメージの更新の現在の状態
ScheduledDateTime スケジュールされたセッション ホストの更新時刻 (UTC)
UpdateBatchSize イメージの更新時に 1 つのバッチに含まれるセッション ホストの数
SessionHostUpdateCount 更新されたセッション ホストの数

次のステップ

セッション ホストの更新に関するトラブルシューティング ガイダンスについては、セッション ホストの更新のトラブルシューティングに関する記事を参照してください。