Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie mehr über das Skalierungstool, das ein Azure Automation Runbook und Azure Logic App verwendet, um Sitzungshost-VMs in Ihrer Azure Virtual Desktop-Umgebung automatisch zu skalieren. Weitere Informationen zum Skalierungstool finden Sie unter Skalieren von Sitzungshosts mithilfe von Azure Automation und Azure Logic Apps.
Hinweis
Die native Autoskalierungslösung von Azure Virtual Desktop ist allgemein für gepoolte und persönliche Hostpools verfügbar und skaliert sitzungshost-VMs automatisch basierend auf dem Skalierungszeitplan. Für eine einfachere Konfiguration wird die Verwendung von Autoskalierung empfohlen. Weitere Informationen finden Sie unter Skalierungspläne für die automatische Skalierung.
Sitzungshosts können nicht mit Azure Automation und Azure Logic Apps zusammen mit autoskalierter Skalierung im gleichen Hostpool skaliert werden. Sie müssen die eine oder die andere verwenden.
Voraussetzungen
Bevor Sie mit dem Einrichten des Skalierungstools beginnen, stellen Sie sicher, dass Folgendes bereit ist:
- Ein Azure Virtual Desktop-Hostpool.
- Sitzungshostpool-VMs, die beim Azure Virtual Desktop-Dienst konfiguriert und registriert sind.
- Ein Benutzer, dem die Rolle Rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) Mitwirkender zugewiesen ist, die dem Azure-Abonnement zugewiesen ist, um die Ressourcen zu erstellen. Außerdem benötigen Sie die Rolle Anwendungsadministrator und/oder RBAC-Besitzer , um eine verwaltete Identität zu erstellen.
- Ein Log Analytics-Arbeitsbereich (optional).
Der Computer, den Sie zum Bereitstellen des Tools verwenden, muss über Folgendes verfügen:
- PowerShell 5.1 oder höher
- Das Azure Az PowerShell-Modul
Wenn Sie alles bereit haben, beginnen wir.
Erstellen oder Aktualisieren eines Azure Automation-Kontos
Hinweis
Wenn Sie bereits über ein Azure Automation-Konto mit einem Runbook verfügen, das eine ältere Version des Skalierungsskripts ausführt, müssen Sie lediglich die folgenden Anweisungen befolgen, um sicherzustellen, dass es aktualisiert wird.
Zunächst benötigen Sie ein Azure Automation Konto, um das PowerShell-Runbook auszuführen. Der in diesem Abschnitt beschriebene Prozess ist auch dann gültig, wenn Sie über ein vorhandenes Azure Automation Konto verfügen, das Sie zum Einrichten des PowerShell-Runbooks verwenden möchten. So richten Sie es ein:
Öffnen Sie Windows PowerShell.
Führen Sie das folgende Cmdlet aus, um sich bei Ihrem Azure-Konto anzumelden.
Login-AzAccount
Hinweis
Ihr Konto muss über Mitwirkender Rechte für das Azure-Abonnement verfügen, in dem Sie das Skalierungstool bereitstellen möchten.
Führen Sie das folgende Cmdlet aus, um das Skript zum Erstellen des Azure Automation-Kontos herunterzuladen:
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"
Führen Sie das folgende Cmdlet aus, um das Skript auszuführen und das Azure Automation-Konto zu erstellen. Sie können entweder Werte für die Parameter eingeben oder sie kommentieren, um ihre Standardwerte zu verwenden.
$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
Hinweis
Wenn Sie mit Ihrer Richtlinie keine Skalierungsskriptressourcen in einer bestimmten Region erstellen können, aktualisieren Sie die Richtlinienzuweisung, und fügen Sie der Liste der zulässigen Regionen die gewünschte Region hinzu.
Wenn Sie noch kein Automation-Konto erstellt haben, enthält die Ausgabe des Cmdlets einen verschlüsselten Webhook-URI in der Automation-Kontovariablen. Achten Sie darauf, den URI aufzuzeichnen, da Sie ihn als Parameter verwenden, wenn Sie den Ausführungszeitplan für die Azure Logic App einrichten. Wenn Sie ein vorhandenes Automation-Konto aktualisieren, können Sie den Webhook-URI mithilfe von PowerShell abrufen, um auf Variablen zuzugreifen.
Wenn Sie den Parameter WorkspaceName für Log Analytics angegeben haben, enthält die Ausgabe des Cmdlets auch die Log Analytics-Arbeitsbereichs-ID und den zugehörigen Primärschlüssel. Notieren Sie sich die Arbeitsbereichs-ID und den Primärschlüssel, da Sie sie später erneut mit Parametern verwenden müssen, wenn Sie den Ausführungszeitplan für die Azure Logic App einrichten.
Nachdem Sie Ihr Azure Automation-Konto eingerichtet haben, melden Sie sich bei Ihrem Azure-Abonnement an, und überprüfen Sie, ob Ihr Azure Automation Konto und das relevante Runbook in Der angegebenen Ressourcengruppe angezeigt wurden, wie in der folgenden Abbildung dargestellt:
Wählen Sie den Namen Ihres Runbooks aus, um zu überprüfen, ob der Webhook dort sein soll. Wechseln Sie als Nächstes zum Abschnitt Ressourcen Ihres Runbooks, und wählen Sie Webhooks aus.
Erstellen einer verwalteten Identität
Nachdem Sie nun über ein Azure Automation-Konto verfügen, müssen Sie auch eine verwaltete Identität einrichten, sofern noch nicht geschehen. Verwaltete Identitäten helfen Ihrem Runbook, auf andere Microsoft Entra bezogene Ressourcen zuzugreifen und wichtige Automatisierungsprozesse zu authentifizieren.
Befolgen Sie zum Einrichten einer verwalteten Identität die Anweisungen unter Verwenden einer systemseitig zugewiesenen verwalteten Identität für ein Azure Automation-Konto. Nachdem Sie eine verwaltete Identität erstellt haben, weisen Sie sie mit den entsprechenden Mitwirkender Berechtigungen für Azure Virtual Desktop-Ressourcen wie Hostpools, VMs usw. zu. Wenn Sie fertig sind, kehren Sie zu diesem Artikel zurück, und erstellen Sie die Azure-Logik-App und den Ausführungszeitplan, um den anfänglichen Setupvorgang abzuschließen.
Erstellen der Azure-Logik-App und des Ausführungszeitplans
Schließlich müssen Sie die Azure Logic App erstellen und einen Ausführungszeitplan für Ihr neues Skalierungstool einrichten. Laden Sie zunächst das PowerShell-Modul Desktop Virtualization herunter, und importieren Sie es, falls noch nicht geschehen, für die Verwendung in Ihrer PowerShell-Sitzung.
Öffnen Sie Windows PowerShell.
Führen Sie das folgende Cmdlet aus, um sich bei Ihrem Azure-Konto anzumelden.
Login-AzAccount
Führen Sie das folgende Cmdlet aus, um das Skript zum Erstellen der Azure-Logik-App herunterzuladen.
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"
Führen Sie das folgende PowerShell-Skript aus, um die Azure-Logik-App und den Ausführungszeitplan für Ihren Hostpool zu erstellen.
Hinweis
Sie müssen dieses Skript für jeden Hostpool ausführen, den Sie automatisch skalieren möchten, aber Sie benötigen nur ein Azure Automation Konto.
$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
Nachdem Sie das Skript ausgeführt haben, sollte die Azure-Logik-App in einer Ressourcengruppe angezeigt werden, wie in der folgenden Abbildung dargestellt.
Wenn Sie Änderungen am Ausführungszeitplan vornehmen möchten, z. B. das Wiederholungsintervall oder die Zeitzone ändern möchten, wechseln Sie zum Azure Logic App-Planer für die automatische Skalierung, und wählen Sie Bearbeiten aus, um zum Azure Logic App-Designer zu wechseln.
Verwalten Ihres Skalierungstools
Nachdem Sie ihr Skalierungstool erstellt haben, können Sie auf dessen Ausgabe zugreifen. In diesem Abschnitt werden einige Features beschrieben, die Möglicherweise hilfreich sind.
Status anzeigen
Sie können eine zusammengefasste status aller Runbookaufträge oder eine ausführlichere status eines bestimmten Runbookauftrags im Azure-Portal anzeigen.
Rechts neben dem ausgewählten Azure Automation Konto können Sie unter "Auftragsstatistik" eine Liste mit Zusammenfassungen aller Runbookaufträge anzeigen. Wenn Sie die Seite Aufträge auf der linken Seite des Fensters öffnen, werden aktuelle Auftragsstatus, Startzeiten und Abschlusszeiten angezeigt.
Anzeigen der Ausgabe von Protokollen und Skalierungstools
Sie können die Protokolle von Horizontal- und Horizontalskalierungsvorgängen anzeigen, indem Sie Ihr Runbook öffnen und den Auftrag auswählen.
Navigieren Sie zum Runbook in Ihrer Ressourcengruppe, in der das Azure Automation-Konto gehostet wird, und wählen Sie Übersicht aus. Wählen Sie auf der Übersichtsseite unter Zuletzt verwendete Aufträge einen Auftrag aus, um die Ausgabe des Skalierungstools anzuzeigen, wie in der folgenden Abbildung dargestellt.
Überprüfen der Versionsnummer des Runbooksskripts
Sie können überprüfen, welche Version des Runbookskripts Sie verwenden, indem Sie die Runbookdatei in Ihrem Azure Automation Konto öffnen und Anzeigen auswählen. Auf der rechten Seite des Bildschirms wird ein Skript für das Runbook angezeigt. Im Skript wird die Versionsnummer im Format v#.#.#
unter dem SYNOPSIS
Abschnitt angezeigt. Die neueste Versionsnummer finden Sie hier. Wenn in Ihrem Runbookskript keine Versionsnummer angezeigt wird, bedeutet dies, dass Sie eine frühere Version des Skripts ausführen und sie sofort aktualisieren sollten. Wenn Sie Ihr Runbookskript aktualisieren müssen, befolgen Sie die Anweisungen unter Erstellen oder Aktualisieren eines Azure Automation Kontos.
Probleme melden
Wenn Sie ein Problem melden, müssen Sie die folgenden Informationen angeben, um uns bei der Problembehandlung zu helfen:
Ein vollständiges Protokoll auf der Registerkarte Alle Protokolle in dem Auftrag, der das Problem verursacht hat. Befolgen Sie die Anweisungen unter Anzeigen von Protokollen und Skalierungstoolausgabe, um zu erfahren, wie Sie das Protokoll abrufen. Wenn das Protokoll vertrauliche oder private Informationen enthält, können Sie diese entfernen, bevor Sie das Problem an uns übermitteln.
Die Version des verwendeten Runbookskripts. Informationen zum Abrufen der Versionsnummer finden Sie unter Überprüfen der Versionsnummer des Runbookskripts.
Die Versionsnummer der folgenden PowerShell-Module, die in Ihrem Azure Automation-Konto installiert sind. Um diese Module zu finden, öffnen Sie Azure Automation Konto, wählen Sie im Bereich auf der linken Seite des Fensters im Abschnitt Freigegebene Ressourcen die Option Module aus, und suchen Sie dann nach dem Namen des Moduls.
- Az.Accounts
- Az.Compute
- Az.Resources
- Az.Automation
- OMSIngestionAPI
- Az.DesktopVirtualization
Log Analytics
Wenn Sie sich für die Verwendung von Log Analytics entschieden haben, können Sie alle Protokolldaten in einem benutzerdefinierten Protokoll namens WVDTenantScale_CL unter Benutzerdefinierte Protokolle in der Protokollansicht Ihres Log Analytics-Arbeitsbereichs anzeigen. Wir haben einige Beispielabfragen aufgelistet, die Sie möglicherweise hilfreich finden.
Geben Sie die folgende Abfrage ein, um alle Protokolle für einen Hostpool anzuzeigen:
WVDTenantScale_CL | where hostpoolName_s == "<host_pool_name>" | project TimeStampUTC = TimeGenerated, TimeStampLocal = TimeStamp_s, HostPool = hostpoolName_s, LineNumAndMessage = logmessage_s, AADTenantId = TenantId
Geben Sie die folgende Abfrage ein, um die Gesamtzahl der derzeit ausgeführten Sitzungshost-VMs und aktiven Benutzersitzungen in Ihrem Hostpool anzuzeigen:
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
Geben Sie die folgende Abfrage ein, um die status aller Sitzungshost-VMs in einem Hostpool anzuzeigen:
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
Geben Sie die folgende Abfrage ein, um Fehler und Warnungen anzuzeigen:
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
Begrenzungen
Hier sind einige Einschränkungen beim Skalieren von Sitzungshost-VMs mit diesem Skalierungsskript:
- Das Skalierungsskript berücksichtigt keine Zeitänderungen zwischen Standard und Sommerzeit.