إعداد أداة التحجيم باستخدام Azure Automation وAzure Logic Apps لـ Azure Virtual Desktop

في هذه المقالة، ستتعرف على أداة القياس التي تستخدم دفتر تشغيل Azure Automation و Azure Logic Apps للتوسيع التلقائي لنطاق الأجهزة الظاهرية لمضيف الجلسة في بيئة Azure Virtual Desktop. لمعرفة المزيد حول أداة التحجيم، راجع توسيع نطاق مضيفي الجلسة باستخدام Azure Automation وAzure Logic Apps.

إشعار

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

  • لا يمكنك توسيع نطاق مضيفي الجلسة باستخدام Azure Automation وAzure Logic Apps جنبا إلى جنب مع التحجيم التلقائي على نفس تجمع المضيف. يجب عليك استخدام أحدهما أو الآخر.

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

قبل البدء في إعداد أداة التحجيم، تأكد من أن لديك الأشياء التالية جاهزة:

  • تجمع مضيف Azure Virtual Desktop.
  • الأجهزة الظاهرية لتجمع مضيف الجلسة المكونة والمسجلة مع خدمة Azure Virtual Desktop.
  • مستخدم لديه دور التحكم في الوصول المستند إلى دور المساهم (RBAC) المعين في اشتراك Azure لإنشاء الموارد. ستحتاج أيضا إلى دور مسؤول التطبيق و/أو المالك RBAC لإنشاء هوية مدارة.
  • مساحة عمل Log Analytics (اختياري).

يجب أن يحتوي الجهاز الذي تستخدمه لنشر الأداة على:

إذا كان لديك كل شيء جاهز، فلنبدأ.

إنشاء حساب Azure Automation أو تحديثه

إشعار

إذا كان لديك بالفعل حساب Azure Automation مع دفتر تشغيل يعمل بإصدار أقدم من البرنامج النصي للتحجيم، فكل ما عليك القيام به هو اتباع الإرشادات أدناه للتأكد من تحديثه.

أولاً ستحتاج إلى حساب Azure Automation لتشغيل دفتر تشغيل PowerShell. العملية التي يصفها هذا القسم صالحة حتى إذا كان لديك حساب Azure Automation موجود تريد استخدامه لإعداد دفتر تشغيل PowerShell. فيما يلي كيفية إعداده:

  1. افتح PowerShell.

  2. شغَّل الأمر cmdlet التالي لتسجيل الدخول إلى حساب Azure خاصتك.

    Login-AzAccount
    

    إشعار

    يجب أن يكون لحسابك حقوق المساهم في اشتراك Azure حيث تريد توزيع أداة التحجيم.

  3. شغَّل الأمر cmdlet التالي لتحميل البرنامج النصي لإنشاء حساب Azure Automation:

    New-Item -ItemType Directory -Path "C:\Temp" -Force
    Set-Location -Path "C:\Temp"
    $Uri = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/wvd-templates/wvd-scaling-script/CreateOrUpdateAzAutoAccount.ps1"
    # Download the script
    Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzAutoAccount.ps1"
    
  4. شغَّل الأمر cmdlet التالي لتنفيذ البرنامج النصي وإنشاء حساب Azure Automation. يمكنك إما تعبئة قيم المعلمات أو التعليق عليها لاستخدام إعداداتها الافتراضية.

    $Params = @{
         "AADTenantId"           = "<Azure_Active_Directory_tenant_ID>"   # Optional. If not specified, it will use the current Azure context
         "SubscriptionId"        = "<Azure_subscription_ID>"              # Optional. If not specified, it will use the current Azure context
         "UseARMAPI"             = $true
         "ResourceGroupName"     = "<Resource_group_name>"                # Optional. Default: "WVDAutoScaleResourceGroup"
         "AutomationAccountName" = "<Automation_account_name>"            # Optional. Default: "WVDAutoScaleAutomationAccount"
         "Location"              = "<Azure_region_for_deployment>"
         "WorkspaceName"         = "<Log_analytics_workspace_name>"       # Optional. If specified, Log Analytics will be used to configure the custom log table that the runbook PowerShell script can send logs to
    }
    
    .\CreateOrUpdateAzAutoAccount.ps1 @Params
    

    إشعار

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

  5. إذا لم تكن قد أنشأت حساب أتمتة من قبل، فسيتضمن إخراج cmdlet عنوان URI للإخطار على الويب مشفرا في متغير حساب الأتمتة. تأكد من الاحتفاظ بسجل لمعرف URI لأنك ستستخدمه بوصفه معلمة عندما تعد جدول التنفيذ الخاص بـ Azure Logic App. إذا كنت تقوم بتحديث حساب أتمتة موجود، يمكنك استرداد webhook URI باستخدام PowerShell للوصول إلى المتغيرات.

  6. إذا حددت المعلمة WorkspaceName لـ Log Analytics، سيتضمن الإخراج cmdlet أيضاً معرف مساحة عمل Log Analytics ومفتاحه الأساسي. دون "معرف مساحة العمل" و"المفتاح الأساسي" لأنك ستحتاج إلى استخدامهما مرة أخرى لاحقًا مع المعلمات عند إعداد جدول التنفيذ لـ Azure Logic App.

  7. بعد إعداد حساب Azure Automation، سجل الدخول إلى اشتراك Azure وتحقق للتأكد من ظهور حساب Azure Automation ودفتر التشغيل ذي الصلة في مجموعة الموارد المحددة، كما هو موضح في الصورة التالية:

    An image of the Azure overview page showing the newly created Azure Automation account and runbook.

    للتحقق مما إذا كان خطاف الويب خاصتك في المكان الذي يجب أن يكون فيه، حدد اسم دفتر التشغيل خاصتك. بعد ذلك، انتقل إلى قسم الموارد في دفتر التشغيل خاصتك وحدد Webhooks.

إنشاء هوية مدارة

الآن بعد أن أصبح لديك حساب Azure Automation، ستحتاج أيضا إلى إعداد هوية مدارة إذا لم تكن قد قمت بذلك بالفعل. ستساعد الهويات المدارة دفتر التشغيل الخاص بك على الوصول إلى الموارد الأخرى ذات الصلة ب Microsoft Entra بالإضافة إلى مصادقة عمليات التنفيذ التلقائي الهامة.

لإعداد هوية مدارة، اتبع الإرشادات الواردة في استخدام هوية مدارة معينة من قبل النظام لحساب Azure Automation. بمجرد إنشاء هوية مدارة، قم بتعيينها بأذونات المساهم المناسبة لموارد Azure Virtual Desktop مثل تجمعات المضيفين والأجهزة الظاهرية وما إلى ذلك. بمجرد الانتهاء، ارجع إلى هذه المقالة وأنشئ Azure Logic App وجدول التنفيذ لإنهاء عملية الإعداد الأولية.

إنشاء Azure Logic App وجدول التنفيذ

أخيراً، ستحتاج إلى إنشاء Azure Logic App وإعداد جدول تنفيذ لأداة التحجيم الجديدة. أولاً، قم بتنزيل واستيراد الوحدة النمطية Desktop Virtualization PowerShell لاستخدامها في جلسة PowerShell إذا لم تكن قد قمت بذلك بالفعل.

  1. افتح PowerShell.

  2. شغَّل الأمر cmdlet التالي لتسجيل الدخول إلى حساب Azure خاصتك.

    Login-AzAccount
    
  3. تشغيل الأمر cmdlet التالي لتحميل البرنامج النصي لإنشاء Azure Logic App.

    New-Item -ItemType Directory -Path "C:\Temp" -Force
    Set-Location -Path "C:\Temp"
    $Uri = "https://raw.githubusercontent.com/Azure/RDS-Templates/master/wvd-templates/wvd-scaling-script/CreateOrUpdateAzLogicApp.ps1"
    # Download the script
    Invoke-WebRequest -Uri $Uri -OutFile ".\CreateOrUpdateAzLogicApp.ps1"
    
  4. تشغيل البرنامج النصي PowerShell التالي لإنشاء Azure Logic App وجدول التنفيذ لتجمع المضيف خاصتك

    إشعار

    ستحتاج إلى تشغيل هذا البرنامج النصي لكل تجمع مضيف تريد تحجيمه تلقائياً، ولكنك تحتاج إلى حساب Azure Automation واحد فقط.

    $AADTenantId = (Get-AzContext).Tenant.Id
    
    $AzSubscription = Get-AzSubscription | Out-GridView -OutputMode:Single -Title "Select your Azure Subscription"
    Select-AzSubscription -Subscription $AzSubscription.Id
    
    $ResourceGroup = Get-AzResourceGroup | Out-GridView -OutputMode:Single -Title "Select the resource group for the new Azure Logic App"
    
    $WVDHostPool = Get-AzResource -ResourceType "Microsoft.DesktopVirtualization/hostpools" | Out-GridView -OutputMode:Single -Title "Select the host pool you'd like to scale"
    
    $LogAnalyticsWorkspaceId = Read-Host -Prompt "If you want to use Log Analytics, enter the Log Analytics Workspace ID returned by when you created the Azure Automation account, otherwise leave it blank"
    $LogAnalyticsPrimaryKey = Read-Host -Prompt "If you want to use Log Analytics, enter the Log Analytics Primary Key returned by when you created the Azure Automation account, otherwise leave it blank"
    $RecurrenceInterval = Read-Host -Prompt "Enter how often you'd like the job to run in minutes, e.g. '15'"
    $BeginPeakTime = Read-Host -Prompt "Enter the start time for peak hours in local time, e.g. 9:00"
    $EndPeakTime = Read-Host -Prompt "Enter the end time for peak hours in local time, e.g. 18:00"
    $TimeDifference = Read-Host -Prompt "Enter the time difference between local time and UTC in hours, e.g. +5:30"
    $SessionThresholdPerCPU = Read-Host -Prompt "Enter the maximum number of sessions per CPU that will be used as a threshold to determine when new session host VMs need to be started during peak hours"
    $MinimumNumberOfRDSH = Read-Host -Prompt "Enter the minimum number of session host VMs to keep running during off-peak hours"
    $MaintenanceTagName = Read-Host -Prompt "Enter the name of the Tag associated with VMs you don't want to be managed by this scaling tool"
    $LimitSecondsToForceLogOffUser = Read-Host -Prompt "Enter the number of seconds to wait before automatically signing out users. If set to 0, any session host VM that has user sessions, will be left untouched"
    $LogOffMessageTitle = Read-Host -Prompt "Enter the title of the message sent to the user before they are forced to sign out"
    $LogOffMessageBody = Read-Host -Prompt "Enter the body of the message sent to the user before they are forced to sign out"
    
    $WebhookURI = Read-Host -Prompt "Enter the webhook URI that has already been generated for this Azure Automation account. The URI is stored as encrypted in the above Automation Account variable. To retrieve the value, see https://learn.microsoft.com/azure/automation/shared-resources/variables?tabs=azure-powershell#powershell-cmdlets-to-access-variables"
    
    $Params = @{
         "AADTenantId"                   = $AADTenantId                             # Optional. If not specified, it will use the current Azure context
         "SubscriptionID"                = $AzSubscription.Id                       # Optional. If not specified, it will use the current Azure context
         "ResourceGroupName"             = $ResourceGroup.ResourceGroupName         # Optional. Default: "WVDAutoScaleResourceGroup"
         "Location"                      = $ResourceGroup.Location                  # Optional. Default: "West US2"
         "UseARMAPI"                     = $true
         "HostPoolName"                  = $WVDHostPool.Name
         "HostPoolResourceGroupName"     = $WVDHostPool.ResourceGroupName           # Optional. Default: same as ResourceGroupName param value
         "LogAnalyticsWorkspaceId"       = $LogAnalyticsWorkspaceId                 # Optional. If not specified, script will not log to the Log Analytics
         "LogAnalyticsPrimaryKey"        = $LogAnalyticsPrimaryKey                  # Optional. If not specified, script will not log to the Log Analytics
         "RecurrenceInterval"            = $RecurrenceInterval                      # Optional. Default: 15
         "BeginPeakTime"                 = $BeginPeakTime                           # Optional. Default: "09:00"
         "EndPeakTime"                   = $EndPeakTime                             # Optional. Default: "17:00"
         "TimeDifference"                = $TimeDifference                          # Optional. Default: "-7:00"
         "SessionThresholdPerCPU"        = $SessionThresholdPerCPU                  # Optional. Default: 1
         "MinimumNumberOfRDSH"           = $MinimumNumberOfRDSH                     # Optional. Default: 1
         "MaintenanceTagName"            = $MaintenanceTagName                      # Optional.
         "LimitSecondsToForceLogOffUser" = $LimitSecondsToForceLogOffUser           # Optional. Default: 1
         "LogOffMessageTitle"            = $LogOffMessageTitle                      # Optional. Default: "Machine is about to shutdown."
         "LogOffMessageBody"             = $LogOffMessageBody                       # Optional. Default: "Your session will be logged off. Please save and close everything."
         "WebhookURI"                    = $WebhookURI
    }
    
    .\CreateOrUpdateAzLogicApp.ps1 @Params
    

    بعد تشغيل البرنامج النصي، يجب أن يظهر Azure Logic App في إحدى مجموعات الموارد، كما هو موضح في الصورة التالية.

    An image of the overview page for an example Azure Logic App.

    لإجراء تغييرات على جدول التنفيذ، مثل تغيير الفاصل الزمني للتكرار أو المنطقة الزمنية، انتقل إلى مجدوِل التحجيم التلقائي لـ Azure Logic App وحدد Edit للانتقال إلى Azure Logic App Designer.

    An image of the Azure Logic App Designer. The Recurrence and webhook menus that let the user edit recurrence times and the webhook file are open.

إدارة أداة التحجيم الخاصة بك

الآن بعد أن قمت بإنشاء أداة التحجيم الخاصة بك، يمكنك الوصول إلى مخرجاتها. يصف هذا القسم بعض الميزات التي قد تجدها مفيدة.

عرض حالة الوظيفة

يمكنك عرض حالة ملخصة لكافة وظائف دفتر التشغيل أو عرض حالة أكثر تعمقًا لوظيفة دفتر تشغيل معينة في مدخل Microsoft Azure.

على يمين حساب Azure Automation المحدد، ضمن «Job Statistics»، يمكنك عرض قائمة بالملخصات لجميع وظائف دفتر التشغيل. يؤدي فتح صفحة Jobs على الجانب الأيسر من النافذة إلى إظهار حالات الوظيفة الحالية وأوقات البدء وأوقات الإكمال.

A screenshot of the job status page.

عرض السجلات ومخرجات أداة التحجيم

يمكنك عرض سجلات عمليات زيادة الحجم وتقليله عن طريق فتح دفتر التشغيل وتحديد الوظيفة.

انتقل إلى دفتر التشغيل في مجموعة الموارد التي تستضيف حساب Azure Automation وحدد Overview. في صفحة النظرة العامة، حدد وظيفة ضمن Recent Jobs لعرض مخرجات أداة التحجيم الخاصة بها، كما هو موضح في الصورة التالية.

An image of the output window for the scaling tool.

تحقق من رقم إصدار البرنامج النصي لدفتر التشغيل

يمكنك التحقق من إصدار البرنامج النصي لدفتر التشغيل الذي تستخدمه عن طريق فتح ملف دفتر التشغيل في حساب Azure Automation وتحديد View. سيظهر برنامج نصي لدفتر التشغيل على الجانب الأيمن من الشاشة. في البرنامج النصي، سترى رقم الإصدار بالتنسيق v#.#.# ضمن القسم SYNOPSIS. يمكنك العثور على أحدث رقم إصدار هنا. إذا كنت لا ترى رقم إصدار في البرنامج النصي لدفتر التشغيل، فهذا يعني أنك تقوم بتشغيل إصدار سابق من البرنامج النصي ويجب عليك تحديثه على الفور. إذا كنت بحاجة إلى تحديث البرنامج النصي لدفتر التشغيل، فاتبع الإرشادات الواردة في إنشاء حساب Azure Automation أو تحديثه.

الإبلاغ عن المشكلات

عند الإبلاغ عن مشكلة، ستحتاج إلى توفير المعلومات التالية لمساعدتنا في استكشاف الأخطاء وإصلاحها:

  • سجل كامل من علامة التبويب All Logs في الوظيفة التي تسببت في المشكلة. لمعرفة كيفية الحصول على السجل، اتبع الإرشادات الواردة في عرض السجلات ومخرجات أداة التحجيم. إذا كان هناك أي معلومات حساسة أو خاصة في السجل، يمكنك إزالتها قبل إرسال المشكلة إلينا.

  • إصدار البرنامج النصي لدفتر التشغيل الذي تستخدمه. لمعرفة كيفية الحصول على رقم الإصدار، راجع التحقق من رقم إصدار البرنامج النصي لدفتر التشغيل

  • رقم الإصدار لكل من وحدات PowerShell النمطية التالية المثبتة في حساب Azure Automation الخاص بك. للعثور على هذه الوحدات النمطية، افتح حساب Azure Automation، وحدد Modules ضمن قسم Shared Resources في الجزء الموجود على الجانب الأيسر من النافذة، ثم ابحث عن اسم الوحدة النمطية.

    • الحسابات
    • Az.Compute
    • أ. الموارد
    • Az.Automation
    • OMSIngestionAPI
    • Az.DesktopVirtualization

Log Analytics

إذا قررت استخدام Log Analytics، يمكنك عرض جميع بيانات السجل في سجل مخصص يسمى WVDTenantScale_CL ضمن Custom Logs في طريقة عرض Logs لمساحة عمل Log Analytics. لقد أدرجنا بعض نماذج الاستعلامات التي قد تجدها مفيدة.

  • لمشاهدة جميع السجلات لتجمع مضيف، أدخل الاستعلام التالي:

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • لعرض العدد الإجمالي للأجهزة الظاهرية لمضيف الجلسة قيد التشغيل حاليا وجلسات المستخدم النشطة في تجمع المضيف، أدخل الاستعلام التالي:

    WVDTenantScale_CL
    | where logmessage_s contains "Number of running session hosts:"
         or logmessage_s contains "Number of user sessions:"
         or logmessage_s contains "Number of user sessions per Core:"
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • لعرض حالة جميع الأجهزة الظاهرية لمضيف جلسة العمل في تجمع مضيف، أدخل الاستعلام التالي:

    WVDTenantScale_CL
    | where logmessage_s contains "Session host:"
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • لعرض أي أخطاء وتحذيرات، أدخل الاستعلام التالي:

    WVDTenantScale_CL
    | where logmessage_s contains "ERROR:" or logmessage_s contains "WARN:"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    

القيود

فيما يلي بعض القيود المتعلقة بتحجيم الأجهزة الظاهرية لمضيف جلسة العمل باستخدام هذا البرنامج النصي للتحجيم:

  • لا يأخذ البرنامج النصي للتحجيم في الاعتبار التغييرات الزمنية بين التوقيت الصيفي والقياسي.