Azure Virtual Desktop におけるセッション ホストの更新の診断クエリの例
重要
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
返されるデータセットは次のとおりです。
列 | 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 | 更新されたセッション ホストの数 |
次のステップ
セッション ホストの更新に関するトラブルシューティング ガイダンスについては、セッション ホストの更新のトラブルシューティングに関する記事を参照してください。