Share via


Azure Otomasyonu ve Azure Sanal Masaüstü için Azure Logic Apps kullanarak ölçeklendirme aracını ayarlama

Bu makalede, Azure Sanal Masaüstü ortamınızdaki oturum konağı VM'lerini otomatik olarak ölçeklendirmek için Azure Otomasyonu runbook ve Azure Logic App kullanan ölçeklendirme aracı hakkında bilgi edineceksiniz. Ölçeklendirme aracı hakkında daha fazla bilgi edinmek için bkz. Azure Otomasyonu ve Azure Logic Apps kullanarak oturum konaklarını ölçeklendirme.

Not

  • Azure Sanal Masaüstü'ne ait yerel Otomatik Ölçeklendirme çözümü genellikle havuza alınan ve kişisel konak havuzlarında kullanılabilir ve ölçeklendirme zamanlamasına göre oturum ana bilgisayar VM'lerinin ölçeğini otomatik olarak daraltacak veya genişletecektir. Daha kolay yapılandırma için Otomatik Ölçeklendirme'nin kullanılmasını öneririz. Daha fazla bilgi için bkz . Ölçeklendirme planlarını otomatik ölçeklendirme.

  • Azure Otomasyonu ve Azure Logic Apps'i kullanarak oturum konaklarını aynı konak havuzunda otomatik ölçeklendirme ile birlikte ölçeklendiremezsiniz. Birini veya diğerini kullanmanız gerekir.

Önkoşullar

Ölçeklendirme aracını ayarlamaya başlamadan önce aşağıdakilerin hazır olduğundan emin olun:

  • Azure Sanal Masaüstü konak havuzu.
  • Azure Sanal Masaüstü hizmetinde yapılandırılan ve kaydedilen oturum konak havuzu VM'leri.
  • Kaynakları oluşturmak için Azure aboneliğinde Katkıda Bulunan rol tabanlı erişim denetimi (RBAC) rolü atanmış bir kullanıcı. Yönetilen kimlik oluşturmak için Uygulama yöneticisi ve/veya Sahip RBAC rolü de gerekir.
  • Log Analytics çalışma alanı (isteğe bağlı).

Aracı dağıtmak için kullandığınız makinede aşağıdakiler olmalıdır:

Her şey hazırsa başlayalım.

Azure Otomasyonu hesabı oluşturma veya güncelleştirme

Not

Ölçeklendirme betiğinin daha eski bir sürümünü çalıştıran bir runbook'a sahip bir Azure Otomasyonu hesabınız varsa, güncelleştirildiğinden emin olmak için aşağıdaki yönergeleri izlemeniz yeterlidir.

İlk olarak, PowerShell runbook'unu çalıştırmak için bir Azure Otomasyonu hesabınızın olması gerekir. Bu bölümde açıklanan işlem, PowerShell runbook'unu ayarlamak için kullanmak istediğiniz mevcut bir Azure Otomasyonu hesabınız olsa bile geçerlidir. Bunu şu şekilde ayarlayabilirsiniz:

  1. PowerShell’i açın.

  2. Azure hesabınızda oturum açmak için aşağıdaki cmdlet'i çalıştırın.

    Login-AzAccount
    

    Not

    Hesabınızın, ölçeklendirme aracını dağıtmak istediğiniz Azure aboneliğinde katkıda bulunan haklarına sahip olması gerekir.

  3. Azure Otomasyonu hesabı oluşturmaya yönelik betiği indirmek için aşağıdaki cmdlet'i çalıştırın:

    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. Betiği yürütmek ve Azure Otomasyonu hesabını oluşturmak için aşağıdaki cmdlet'i çalıştırın. Parametrelerin değerlerini doldurabilir veya varsayılanlarını kullanmak üzere açıklama ekleyebilirsiniz.

    $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
    

    Not

    İlkeniz belirli bir bölgede ölçeklendirme betiği kaynakları oluşturmanıza izin vermiyorsa, ilke atamasını güncelleştirin ve istediğiniz bölgeyi izin verilen bölgeler listesine ekleyin.

  5. Daha önce otomasyon hesabı oluşturmadıysanız, cmdlet'in çıkışı otomasyon hesabı değişkeninde şifrelenmiş bir web kancası URI'sini içerir. Azure Logic App için yürütme zamanlamasını ayarlarken parametre olarak kullanacağınızdan URI kaydını tuttuğunuzdan emin olun. Mevcut bir otomasyon hesabını güncelleştiriyorsanız, değişkenlere erişmek için PowerShell kullanarak web kancası URI'sini alabilirsiniz.

  6. Log Analytics için WorkspaceName parametresini belirttiyseniz, cmdlet'in çıktısı Log Analytics Çalışma Alanı Kimliğini ve Birincil Anahtarını da içerir. Daha sonra Azure Logic App için yürütme zamanlamasını ayarlarken bunları parametrelerle yeniden kullanmanız gerekmediğinden, Çalışma Alanı Kimliği ve Birincil Anahtarı not edin.

  7. Azure Otomasyonu hesabınızı ayarladıktan sonra Azure aboneliğinizde oturum açın ve aşağıdaki görüntüde gösterildiği gibi Azure Otomasyonu hesabınızın ve ilgili runbook'un belirtilen kaynak grubunuzda göründüğünden emin olun:

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

    Web kancanızın olması gereken yerde olup olmadığını denetlemek için runbook'unuzun adını seçin. Ardından runbook'unuzun Kaynaklar bölümüne gidin ve Web kancaları'na tıklayın.

Yönetilen kimlik oluşturma

Artık bir Azure Otomasyonu hesabınız olduğuna göre, henüz yapmadıysanız yönetilen bir kimlik de ayarlamanız gerekir. Yönetilen kimlikler runbook'unuzun Microsoft Entra ile ilgili diğer kaynaklara erişmesini ve önemli otomasyon işlemlerinin kimliğini doğrulamasını sağlar.

Yönetilen kimlik ayarlamak için, Azure Otomasyonu hesabı için sistem tarafından atanan yönetilen kimliği kullanma bölümünde verilen yönergeleri izleyin. Yönetilen kimlik oluşturduktan sonra, bunu konak havuzları, VM'ler gibi Azure Sanal Masaüstü kaynaklarına uygun katkıda bulunan izinleriyle atayın. İşiniz bittiğinde, ilk kurulum işlemini tamamlamak için bu makaleye geri dönün ve Azure Logic App ve yürütme zamanlaması oluşturun.

Azure Logic App'i ve yürütme zamanlamasını oluşturma

Son olarak Azure Logic App'i oluşturmanız ve yeni ölçeklendirme aracınız için bir yürütme zamanlaması ayarlamanız gerekir. İlk olarak, henüz yapmadıysanız PowerShell oturumunuzda kullanmak üzere Masaüstü Sanallaştırma PowerShell modülünü indirin ve içeri aktarın.

  1. PowerShell’i açın.

  2. Azure hesabınızda oturum açmak için aşağıdaki cmdlet'i çalıştırın.

    Login-AzAccount
    
  3. Azure Logic App'i oluşturmaya yönelik betiği indirmek için aşağıdaki cmdlet'i çalıştırın.

    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. Konak havuzunuz için Azure Logic App ve yürütme zamanlaması oluşturmak için aşağıdaki PowerShell betiğini çalıştırın

    Not

    Otomatik ölçeklendirmek istediğiniz her konak havuzu için bu betiği çalıştırmanız gerekir, ancak yalnızca bir Azure Otomasyonu hesabınız olmalıdır.

    $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
    

    Betiği çalıştırdıktan sonra Azure Logic App aşağıdaki görüntüde gösterildiği gibi bir kaynak grubunda görünmelidir.

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

    Yineleme aralığını veya saat dilimini değiştirme gibi yürütme zaman çizelgesinde değişiklik yapmak için Azure Logic App otomatik ölçeklendirme zamanlayıcısına gidin ve Düzenle'yi seçerek Azure Logic App Tasarım Aracı gidin.

    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.

Ölçeklendirme aracınızı yönetme

Ölçeklendirme aracınızı oluşturduğunuza göre artık çıktısına erişebilirsiniz. Bu bölümde yararlı bulabileceğiniz birkaç özellik açıklanmaktadır.

İş durumunu görüntüleme

Azure portalında tüm runbook işlerinin özetlenmiş durumunu görüntüleyebilir veya belirli bir runbook işinin daha ayrıntılı durumunu görüntüleyebilirsiniz.

Seçtiğiniz Azure Otomasyonu hesabının sağ tarafındaki "İş İstatistikleri" bölümünde tüm runbook işlerinin özetlerinin listesini görüntüleyebilirsiniz. Pencerenin sol tarafındaki İşler sayfasının açılması geçerli iş durumlarını, başlangıç saatlerini ve tamamlanma sürelerini gösterir.

A screenshot of the job status page.

Günlükleri ve ölçeklendirme aracı çıkışını görüntüleme

Runbook'unuzu açıp işi seçerek ölçeği genişletme ve ölçeklendirme işlemlerinin günlüklerini görüntüleyebilirsiniz.

Azure Otomasyonu hesabını barındıran kaynak grubunuzda runbook'a gidin ve Genel Bakış'ı seçin. Genel bakış sayfasında, aşağıdaki görüntüde gösterildiği gibi ölçeklendirme aracı çıkışını görüntülemek için Son İşler'in altında bir iş seçin.

An image of the output window for the scaling tool.

Runbook betiği sürüm numarasını denetleme

runbook dosyasını Azure Otomasyonu hesabınızda açıp Görünüm'ü seçerek runbook betiğinin hangi sürümünü kullandığınızı kontrol edebilirsiniz. Ekranın sağ tarafında runbook için bir betik görüntülenir. Betikte, sürüm numarasını bölümün altında SYNOPSIS biçiminde v#.#.# görürsünüz. En son sürüm numarasını burada bulabilirsiniz. Runbook betiğinizde sürüm numarası görmüyorsanız bu, betiğin önceki bir sürümünü çalıştırdığınız ve hemen güncelleştirmeniz gerektiği anlamına gelir. Runbook betiğinizi güncelleştirmeniz gerekiyorsa, Azure Otomasyonu hesabı oluşturma veya güncelleştirme başlığındaki yönergeleri izleyin.

Raporlama sorunları

Bir sorun bildirdiğinizde, sorun gidermemize yardımcı olması için aşağıdaki bilgileri sağlamanız gerekir:

  • Soruna neden olan işin Tüm Günlükler sekmesinden tam günlük. Günlüğü nasıl alacağınızı öğrenmek için Günlükleri görüntüleme ve ölçeklendirme aracı çıktısı başlığındaki yönergeleri izleyin. Günlükte hassas veya özel bilgiler varsa, sorunu bize göndermeden önce bu bilgileri kaldırabilirsiniz.

  • Kullandığınız runbook betiğinin sürümü. Sürüm numarasını almayı öğrenmek için bkz . Runbook betiği sürüm numarasını denetleme

  • Azure Otomasyonu hesabınızda yüklü aşağıdaki PowerShell modüllerinin her birinin sürüm numarası. Bu modülleri bulmak için Azure Otomasyonu hesabı açın, pencerenin sol tarafındaki bölmedeki Paylaşılan Kaynaklar bölümünde Modüller'i seçin ve modülün adını arayın.

    • Az.Accounts
    • Az.Compute
    • Az.Resources
    • Az.Automation
    • OMSIngestionAPI
    • Az.DesktopVirtualization

Log Analytics

Log Analytics'i kullanmaya karar verdiyseniz tüm günlük verilerini Log Analytics Çalışma Alanınızın Günlükler görünümündeki Özel Günlükler altında WVDTenantScale_CL adlı özel bir günlükte görüntüleyebilirsiniz. Yararlı bulabileceğiniz bazı örnek sorguları listeledik.

  • Konak havuzunun tüm günlüklerini görmek için aşağıdaki sorguyu girin:

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • Konak havuzunuzda çalışmakta olan oturum ana bilgisayar VM'lerinin ve etkin kullanıcı oturumlarının toplam sayısını görüntülemek için aşağıdaki sorguyu girin:

    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
    
  • Bir konak havuzundaki tüm oturum ana bilgisayar VM'lerinin durumunu görüntülemek için aşağıdaki sorguyu girin:

    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
    
  • Hataları ve uyarıları görüntülemek için aşağıdaki sorguyu girin:

    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
    

Sınırlamalar

Bu ölçeklendirme betiğiyle oturum konağı VM'lerini ölçeklendirmeyle ilgili bazı sınırlamalar şunlardır:

  • Ölçeklendirme betiği, standart ve gün ışığından yararlanma arasındaki zaman değişikliklerini dikkate almaz.