Azure Virtual Desktop의 세션 호스트 업데이트에 대한 진단 쿼리 예제
Important
Azure Virtual Desktop에 대한 세션 호스트 업데이트는 현재 미리 보기로 제공됩니다. 베타, 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.
세션 호스트 업데이트는 Azure Monitor의 Log Analytics를 사용하여 업데이트에 대한 정보를 저장합니다. 이 문서에는 Log Analytics와 함께 세션 호스트 업데이트에 대한 정보를 확인하는 데 사용할 수 있는 Kusto 쿼리 예제가 있습니다.
필수 조건
이러한 쿼리를 사용하려면 다음이 필요합니다.
세션 호스트 구성이 있는 기존 호스트 풀입니다.
Log Analytics 작업 영역에 로그 및 메트릭을 보내기 위해 세션 호스트 업데이트와 함께 사용하는 각 호스트 풀에 대한 진단 설정을 구성했습니다. 범주 검사점, 오류 및 세션 호스트 관리 활동 로그를 최소한으로 사용하도록 설정해야 합니다.
호스트 풀의 세션 호스트에서 이전에 예약된 세션 호스트 업데이트를 실행합니다.
진단 데이터 위치
호스트 풀에서 진단 설정을 구성하면 세션 호스트 업데이트에 대한 진단 데이터가 테이블 WVDSessionHostManagement
및 WVDCheckpoints
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 | 업데이트된 세션 호스트 수 |
다음 단계
세션 호스트 업데이트에 대한 문제 해결 지침은 세션 호스트 업데이트 문제 해결을 참조하세요.