Share via


Skálázási eszköz beállítása az Azure Automation és az Azure Virtual Desktophoz készült Azure Logic Apps használatával

Ebben a cikkben megismerheti azt a skálázási eszközt, amely egy Azure Automation-runbookot és egy Azure Logic Appot használ a munkamenetgazda virtuális gépek automatikus skálázásához az Azure Virtual Desktop-környezetben. A skálázási eszközzel kapcsolatos további információkért lásd : Munkamenet-gazdagépek méretezése az Azure Automation és az Azure Logic Apps használatával.

Feljegyzés

  • Az Azure Virtual Desktop natív automatikus skálázási megoldása általánosan elérhető a készletezett és a személyes gazdagépkészlet(ek) számára, és a skálázási ütemezés alapján automatikusan skálázza vagy skálázza ki a munkamenetgazda virtuális gépeket. Javasoljuk, hogy az automatikus skálázást használja a könnyebb konfigurálás érdekében. További információ: Automatikus méretezési csomagok.

  • A munkamenet-gazdagépek nem skálázhatók az Azure Automation és az Azure Logic Apps használatával, valamint az automatikus skálázás ugyanazon a gazdagépkészleten. Az egyiket vagy a másikat kell használnia.

Előfeltételek

Mielőtt elkezdené beállítani a skálázási eszközt, győződjön meg arról, hogy készen áll a következő dolgokra:

  • Egy Azure Virtual Desktop-gazdagépkészlet.
  • Az Azure Virtual Desktop szolgáltatásban konfigurált és regisztrált munkamenet-gazdagépkészlet virtuális gépei.
  • Az erőforrások létrehozásához az Azure-előfizetéshez hozzárendelt közreműködői szerepköralapú hozzáférés-vezérlési (RBAC) szerepkörrel rendelkező felhasználó. A felügyelt identitás létrehozásához szükség lesz az alkalmazásadminisztrátori és/vagy tulajdonosI RBAC-szerepkörre is.
  • Log Analytics-munkaterület (nem kötelező).

Az eszköz üzembe helyezéséhez használt gépnek a következőket kell tartalmaznia:

Ha minden készen áll, kezdjük el.

Azure Automation-fiók létrehozása vagy frissítése

Feljegyzés

Ha már rendelkezik Azure Automation-fiókkal, és a skálázási szkript egy régebbi verzióját futtató runbookot használ, mindössze annyit kell tennie, hogy az alábbi utasításokat követve meggyőződik arról, hogy frissült.

Először szüksége lesz egy Azure Automation-fiókra a PowerShell-runbook futtatásához. Az ebben a szakaszban leírt folyamat akkor is érvényes, ha rendelkezik egy meglévő Azure Automation-fiókkal, amelyet a PowerShell-runbook beállításához szeretne használni. Az alábbiak szerint állíthatja be:

  1. Nyissa meg a PowerShellt.

  2. A következő parancsmag futtatásával jelentkezzen be az Azure-fiókjába.

    Login-AzAccount
    

    Feljegyzés

    A fiókjának közreműködői jogosultságokkal kell rendelkeznie azon az Azure-előfizetésen, ahol telepíteni szeretné a skálázási eszközt.

  3. Futtassa a következő parancsmagot az Azure Automation-fiók létrehozásához szükséges szkript letöltéséhez:

    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. Futtassa a következő parancsmagot a szkript végrehajtásához és az Azure Automation-fiók létrehozásához. Kitöltheti a paraméterek értékeit, vagy megjegyzést fűzhet hozzájuk az alapértelmezett értékek használatához.

    $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
    

    Feljegyzés

    Ha a szabályzat nem teszi lehetővé a skálázási szkript erőforrásainak létrehozását egy adott régióban, frissítse a szabályzat-hozzárendelést, és adja hozzá a kívánt régiót az engedélyezett régiók listájához.

  5. Ha még nem hozott létre automation-fiókot, a parancsmag kimenete egy titkosított webhook URI-t fog tartalmazni az automation-fiók változójában. Ügyeljen arra, hogy rögzítse az URI rekordját, mert paraméterként fogja használni az Azure Logic App végrehajtási ütemezésének beállításakor. Ha egy meglévő automation-fiókot frissít, a webhook URI-ját a PowerShell használatával lekérheti a változók eléréséhez.

  6. Ha megadta a Log Analytics WorkspaceName paraméterét, a parancsmag kimenete tartalmazza a Log Analytics-munkaterület azonosítóját és elsődleges kulcsát is. Jegyezze fel a munkaterület azonosítóját és elsődleges kulcsát, mert az Azure Logic App végrehajtási ütemezésének beállításakor később újra használnia kell őket paraméterekkel.

  7. Miután beállította az Azure Automation-fiókot, jelentkezzen be az Azure-előfizetésbe, és ellenőrizze, hogy az Azure Automation-fiókja és a kapcsolódó runbook megjelent-e a megadott erőforráscsoportban, ahogy az alábbi képen látható:

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

    Ha ellenőrizni szeretné, hogy a webhook hol legyen, válassza ki a runbook nevét. Ezután lépjen a runbook Erőforrások szakaszára, és válassza a Webhookok lehetőséget.

Felügyelt identitás létrehozása

Most, hogy már rendelkezik Azure Automation-fiókkal, egy felügyelt identitást is be kell állítania, ha még nem tette meg. A felügyelt identitások segítenek a runbooknak más Microsoft Entra-erőforrásokhoz való hozzáférésben, valamint a fontos automatizálási folyamatok hitelesítésében.

Felügyelt identitás beállításához kövesse a Rendszer által hozzárendelt felügyelt identitás használata Azure Automation-fiókhoz című útmutatót. Miután létrehozott egy felügyelt identitást, rendelje hozzá a megfelelő közreműködői engedélyekkel az Azure Virtual Desktop-erőforrásokhoz, például gazdagépkészletekhez, virtuális gépekhez stb. Ha végzett, térjen vissza ehhez a cikkhez, és hozza létre az Azure Logic Appot és a végrehajtási ütemezést a kezdeti beállítási folyamat befejezéséhez.

Az Azure Logic App és a végrehajtási ütemezés létrehozása

Végül létre kell hoznia az Azure Logic App alkalmazást, és be kell állítania egy végrehajtási ütemezést az új skálázási eszközhöz. Először töltse le és importálja az asztali virtualizálási PowerShell-modult a PowerShell-munkamenetben való használathoz, ha még nem tette meg.

  1. Nyissa meg a PowerShellt.

  2. A következő parancsmag futtatásával jelentkezzen be az Azure-fiókjába.

    Login-AzAccount
    
  3. Futtassa a következő parancsmagot az Azure Logic App létrehozásához szükséges szkript letöltéséhez.

    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. Futtassa a következő PowerShell-szkriptet az Azure Logic App és a gazdakészlet végrehajtási ütemezésének létrehozásához

    Feljegyzés

    Ezt a szkriptet minden automatikusan skálázni kívánt gazdagépkészlethez futtatnia kell, de csak egy Azure Automation-fiókra van szüksége.

    $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
    

    A szkript futtatása után az Azure Logic Appnak egy erőforráscsoportban kell megjelennie, ahogyan az az alábbi képen is látható.

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

    Ha módosítani szeretné a végrehajtási ütemezést, például módosítani szeretné az ismétlődési időközt vagy az időzónát, lépjen az Azure Logic App automatikus méretezési ütemezőjéhez, és válassza a Szerkesztés lehetőséget az Azure Logic App Tervező megnyitásához.

    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.

A skálázási eszköz kezelése

Most, hogy létrehozta a skálázási eszközt, hozzáférhet a kimenetéhez. Ez a szakasz néhány hasznos funkciót ismertet.

A feladat állapotának megjelenítése

Megtekintheti az összes runbook-feladat összesített állapotát, vagy megtekintheti egy adott runbook-feladat részletesebb állapotát az Azure Portalon.

A kiválasztott Azure Automation-fiók jobb oldalán, a "Feladatstatisztikák" területen megtekintheti az összes runbook-feladat összegzéseinek listáját. A Feladatok lap megnyitása az ablak bal oldalán az aktuális feladatállapotokat, kezdési időpontokat és befejezési időpontokat jeleníti meg.

A screenshot of the job status page.

Naplók és skálázási eszköz kimenetének megtekintése

A kiskálázási és a vertikális felskálázási műveletek naplóit a runbook megnyitásával és a feladat kiválasztásával tekintheti meg.

Lépjen az Azure Automation-fiókot üzemeltető erőforráscsoport runbookjára, és válassza az Áttekintés lehetőséget. Az áttekintési lapon válasszon ki egy feladatot a Legutóbbi feladatok területen a skálázási eszköz kimenetének megtekintéséhez, ahogyan az az alábbi képen látható.

An image of the output window for the scaling tool.

A runbook-szkript verziószámának ellenőrzése

A runbook-szkript melyik verzióját ellenőrizheti, ha megnyitja a runbookfájlt az Azure Automation-fiókjában, és kiválasztja a Nézet lehetőséget. A forgatókönyv szkriptje a képernyő jobb oldalán jelenik meg. A szkriptben a verziószám a szakasz alatti SYNOPSIS formátumban v#.#.# jelenik meg. A legújabb verziószámot itt találja. Ha nem lát verziószámot a runbook-szkriptben, az azt jelenti, hogy a szkript egy korábbi verzióját futtatja, és azonnal frissítenie kell. Ha frissítenie kell a runbook-szkriptet, kövesse az Azure Automation-fiók létrehozása vagy frissítése című témakör utasításait.

Jelentéskészítési problémák

A probléma bejelentésekor a következő információkat kell megadnia a hibaelhárításhoz:

  • A hibát okozó feladat Minden napló lapjának teljes naplója. A napló beszerzésének módjáról a Naplók megtekintése és a skálázási eszköz kimenetének megtekintése című témakörben található útmutatást követve tájékozódhat. Ha bizalmas vagy személyes adatok találhatók a naplóban, eltávolíthatja azokat, mielőtt elküldené nekünk a problémát.

  • A használt runbook-szkript verziója. A verziószám lekéréséről a runbook-szkript verziószámának ellenőrzése című témakörben tájékozódhat .

  • Az Azure Automation-fiókban telepített alábbi PowerShell-modulok verziószáma. Ezeknek a moduloknak a megkereséséhez nyissa meg az Azure Automation-fiókot, válassza a Modulok lehetőséget az ablak bal oldalán található panel Megosztott erőforrások szakaszában, majd keresse meg a modul nevét.

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

Naplóelemzés

Ha a Log Analytics használata mellett döntött, a Log Analytics-munkaterület Naplók nézetében megtekintheti az egyéni naplók WVDTenantScale_CL nevű egyéni naplók összes naplóadatait. Felsoroltunk néhány hasznosnak talált mintalekérdezéseket.

  • A gazdagépkészlet összes naplójának megtekintéséhez írja be a következő lekérdezést:

    WVDTenantScale_CL
    | where hostpoolName_s == "<host_pool_name>"
    | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
    
  • A jelenleg futó munkamenetgazda virtuális gépek és aktív felhasználói munkamenetek teljes számának megtekintéséhez írja be a következő lekérdezést:

    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
    
  • A gazdagépkészlet összes munkamenetgazda virtuális gépének állapotának megtekintéséhez írja be a következő lekérdezést:

    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
    
  • A hibák és figyelmeztetések megtekintéséhez írja be a következő lekérdezést:

    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
    

Korlátozások

Az alábbiakban néhány korlátozást talál a munkamenet-gazdagép virtuális gépeinek skálázására ezzel a skálázási szkripttel:

  • A skálázási szkript nem veszi figyelembe a standard és a nyári időszámítás közötti időváltozásokat.