重要
Azure Virtual Desktop のセッション ホスト更新プログラムは現在プレビュー段階です。 ベータ版、プレビュー版、または一般公開されていない Azure 機能に適用される法的条件については、「 Microsoft Azure プレビューの補足使用条件 」を参照してください。
セッション ホストの更新では、 Azure Monitor の Log Analytics を使用して更新プログラムに関する情報を格納します。 この記事では、セッション ホストの更新に関する情報を表示するために Log Analytics で使用できる Kusto クエリの例をいくつか示します。
前提条件
これらのクエリを使用する前に、次のものが必要です。
セッション ホスト構成を持つ既存のホスト プール。
セッション ホストの更新で使用する各ホスト プールで構成された 診断設定 を使用して、ログとメトリックを Log Analytics ワークスペースに送信します。 チェックポイント、エラー、セッション ホスト管理アクティビティ ログのカテゴリは、最低限有効にする必要があります。
以前に スケジュールされ、ホスト プール内のセッション ホスト に対してセッション ホストの更新を実行します。
診断データの場所
ホスト プールで診断設定を構成すると、セッション ホスト更新の診断データが Log Analytics ワークスペースのテーブル WVDSessionHostManagement
と WVDCheckpoints
に格納されます。 ログ エントリでは、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
返されるデータセットは次のとおりです。
列 | 定義 |
---|---|
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
返されるデータセットは次のとおりです。
列 | 定義 |
---|---|
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
返されるデータセットは次のとおりです。
列 | 定義 |
---|---|
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
返されるデータセットは次のとおりです。
列 | 定義 |
---|---|
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)
返されるデータセットは次のとおりです。
列 | 定義 |
---|---|
TimeGenerated | システムによって生成されたイベント タイムスタンプ |
_SubscriptionId | ホスト プールのサブスクリプション ID |
_ResourceId | ホスト プールのリソース ID |
CorrelationId | ホスト プールのイメージの更新ごとに割り当てられた一意の識別子 |
ProvisioningStatus | ホスト プールのイメージの更新の現在の状態 |
ScheduledDateTime | セッション ホストの更新スケジュールされた時刻 (UTC) |
UpdateBatchSize | イメージの更新中に 1 つのバッチ内のセッション ホストの数 |
SessionHostUpdateCount | 更新されたセッション ホストの数 |
次の手順
セッション ホストの更新に関するトラブルシューティング ガイダンスについては、「 セッション ホストの更新のトラブルシューティング」を参照してください。