مشاركة عبر


مثال على الاستعلامات التشخيصية لتحديث مضيف الجلسة في Azure Virtual Desktop

هام

تحديث مضيف جلسة العمل ل Azure Virtual Desktop قيد المعاينة حاليا. للحصول على الشروط القانونية التي تنطبق على ميزات Azure الموجودة في الإصدار التجريبي، أو المعاينة، أو التي لم يتم إصدارها بعد في التوفر العام، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.

يستخدم تحديث مضيف جلسة العمل Log Analytics في Azure Monitor لتخزين معلومات حول التحديثات. تحتوي هذه المقالة على بعض أمثلة استعلامات Kusto التي يمكنك استخدامها مع Log Analytics للاطلاع على معلومات حول تحديثات مضيف جلسة العمل.

المتطلبات الأساسية

قبل أن تتمكن من استخدام هذه الاستعلامات، تحتاج إلى:

  • تجمع مضيف موجود مع تكوين مضيف جلسة عمل.

  • إعدادات التشخيص المكونة على كل تجمع مضيف تستخدمه مع تحديث مضيف جلسة العمل لإرسال السجلات والمقاييس إلى مساحة عمل Log Analytics. يجب تمكين سجلات نشاط إدارة مضيف الجلسة ونقطة التحقق والخطأ والفئات كحد أدنى.

  • تحديث مضيف جلسة عمل مجدول مسبقا وتشغيله على مضيفي الجلسة في تجمع المضيف.

موقع البيانات التشخيصية

بمجرد تكوين إعدادات التشخيص على تجمع مضيف، يتم تخزين البيانات التشخيصية لتحديث مضيف الجلسة في الجداول WVDSessionHostManagement ومساحة WVDCheckpoints عمل Log Analytics. تستخدم إدخالات السجل نوع نشاط الإدارة الموجود، والذي يأتي من موفر Azure Resource Manager (ARM).

الجدول WVDSessionHostManagement خاص بتحديث مضيف جلسة العمل ويتم إنشاؤه بمجرد تمكين الفئة سجلات نشاط إدارة مضيف الجلسة على إعدادات التشخيص لكل تجمع مضيف تستخدمه مع تحديث مضيف جلسة العمل، ويتم تشغيل تحديث مضيف الجلسة. إذا قمت مسبقا بتكوين إعدادات التشخيص لتجمع مضيف، فستحتاج إلى تمكين الفئة Session Host Management Activity Logs. لمزيد من المعلومات قم بتكوين إعدادات التشخيص لالتقاط سجلات النظام الأساسي والمقاييس ل 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 معرف الاشتراك لتجمع مضيف
_ResourceId معرف المورد لتجمع مضيف
CorrelationId معرف فريد تم تعيينه لكل تحديث صورة يتم إجراؤه على تجمع مضيف
UpdateStartDateTime الطابع الزمني لبدء تحديث مضيف الجلسة بالتوقيت العالمي المتفق عليه
UpdateEndDateTime الطابع الزمني لإكمال تحديث مضيف الجلسة بالتوقيت العالمي المتفق عليه
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 معرف الاشتراك لتجمع مضيف
_ResourceId معرف المورد لتجمع مضيف
CorrelationId معرف فريد تم تعيينه لكل تحديث صورة يتم إجراؤه على تجمع مضيف
CodeSymbolic رمز الخطأ
SessionHostResourceId معرف المورد لمضيف جلسة العمل، إن أمكن
رسالة معلومات الخطأ
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 معرف الاشتراك لتجمع مضيف
_ResourceId معرف المورد لتجمع مضيف
CorrelationId معرف فريد مخصص لكل تحديث لصورة تجمع مضيف
ScheduledDateTime الوقت المجدول لتحديث مضيف الجلسة بالتوقيت العالمي المتفق عليه
تاريخ الإلغاء الوقت في التوقيت العالمي المتفق عليه عندما تم إلغاء تحديث الصورة من قبل مسؤول
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 معرف الاشتراك لتجمع مضيف
_ResourceId معرف المورد لتجمع مضيف
CorrelationId معرف فريد تم تعيينه لكل تحديث لمضيف جلسة العمل لتجمع مضيف
ScheduledDateTime الوقت المجدول لتحديث مضيف الجلسة بالتوقيت العالمي المتفق عليه
تاريخ الإلغاء الوقت في التوقيت العالمي المتفق عليه عندما قام مسؤول بإلغاء تحديث لمضيف الجلسة
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 معرف الاشتراك لتجمع مضيف
_ResourceId معرف المورد لتجمع مضيف
CorrelationId معرف فريد مخصص لكل تحديث لصورة تجمع مضيف
حالة التزويد الحالة الحالية لتحديث صورة تجمع مضيف
ScheduledDateTime الوقت المجدول لتحديث مضيف الجلسة بالتوقيت العالمي المتفق عليه
UpdateBatchSize عدد مضيفي الجلسة في دفعة واحدة أثناء تحديث الصورة
SessionHostUpdateCount عدد مضيفي الجلسة الذين تم تحديثهم

الخطوات التالية

للحصول على إرشادات استكشاف الأخطاء وإصلاحها لتحديث مضيف جلسة العمل، راجع استكشاف أخطاء تحديث مضيف جلسة العمل وإصلاحها.