다음을 통해 공유


Azure Virtual Desktop의 세션 호스트 업데이트에 대한 진단 쿼리 예제

Important

Azure Virtual Desktop에 대한 세션 호스트 업데이트는 현재 미리 보기로 제공됩니다. 베타, 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.

세션 호스트 업데이트는 Azure Monitor의 Log Analytics를 사용하여 업데이트에 대한 정보를 저장합니다. 이 문서에는 Log Analytics와 함께 세션 호스트 업데이트에 대한 정보를 확인하는 데 사용할 수 있는 Kusto 쿼리 예제가 있습니다.

필수 조건

이러한 쿼리를 사용하려면 다음이 필요합니다.

  • 세션 호스트 구성이 있는 기존 호스트 풀입니다.

  • Log Analytics 작업 영역에 로그 및 메트릭을 보내기 위해 세션 호스트 업데이트와 함께 사용하는 각 호스트 풀에 대한 진단 설정을 구성했습니다. 범주 검사점, 오류세션 호스트 관리 활동 로그를 최소한으로 사용하도록 설정해야 합니다.

  • 호스트 풀의 세션 호스트에서 이전에 예약된 세션 호스트 업데이트를 실행합니다.

진단 데이터 위치

호스트 풀에서 진단 설정을 구성하면 세션 호스트 업데이트에 대한 진단 데이터가 테이블 WVDSessionHostManagementWVDCheckpoints Log Analytics 작업 영역에 저장됩니다. 로그 항목은 ARM(Azure Resource Manager) 공급자에서 제공하는 기존 관리 작업 유형을 사용합니다.

테이블 WVDSessionHostManagement 은 세션 호스트 업데이트와 관련이 있으며 세션 호스트 업데이트에 사용하는 각 호스트 풀의 진단 설정에서 세션 호스트 관리 활동 로그 범주를 사용하도록 설정하고 세션 호스트 업데이트가 실행되면 만들어집니다. 이전에 호스트 풀에 대한 진단 설정을 구성한 경우 세션 호스트 관리 활동 로그 범주 를 사용하도록 설정해야 합니다. 자세한 내용은 Azure Virtual Desktop에 대한 플랫폼 로그 및 메트릭을 캡처하도록 진단 설정을 구성합니다.

이 문서의 나머지 부분에는 실행할 수 있는 몇 가지 예제 쿼리가 있습니다. 사용자 고유의 쿼리를 만드는 기준으로 사용할 수 있습니다. 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

반환되는 데이터 세트는 다음과 같습니다.

Column 정의
TimeGenerated 시스템 생성 이벤트 타임스탬프
_SubscriptionId 호스트 풀의 구독 ID
_ResourceId 호스트 풀의 리소스 ID
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

반환되는 데이터 세트는 다음과 같습니다.

Column 정의
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

반환되는 데이터 세트는 다음과 같습니다.

Column 정의
TimeGenerated 시스템 생성 이벤트 타임스탬프
_SubscriptionId 호스트 풀의 구독 ID
_ResourceId 호스트 풀의 리소스 ID
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

반환되는 데이터 세트는 다음과 같습니다.

Column 정의
TimeGenerated 시스템 생성 이벤트 타임스탬프
_SubscriptionId 호스트 풀의 구독 ID
_ResourceId 호스트 풀의 리소스 ID
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)

반환되는 데이터 세트는 다음과 같습니다.

Column 정의
TimeGenerated 시스템 생성 이벤트 타임스탬프
_SubscriptionId 호스트 풀에 대한 구독 ID
_ResourceId 호스트 풀의 리소스 ID
CorrelationId 호스트 풀 이미지의 모든 업데이트에 할당된 고유 식별자
ProvisioningStatus 호스트 풀 이미지 업데이트의 현재 상태
ScheduledDateTime 세션 호스트 업데이트 예약된 시간(UTC)
UpdateBatchSize 이미지를 업데이트하는 동안 단일 일괄 처리의 세션 호스트 수
SessionHostUpdateCount 업데이트된 세션 호스트 수

다음 단계

세션 호스트 업데이트에 대한 문제 해결 지침은 세션 호스트 업데이트 문제 해결을 참조하세요.