Condividi tramite


Notifiche tramite posta elettronica per l'ottimizzazione automatica

Si applica a:Database SQL di AzureIstanza gestita di SQL di Azure

I suggerimenti di ottimizzazione per i database SQL di Azure vengono generati dall'opzione di ottimizzazione automatica per database SQL di Azure. Questa soluzione monitorizza e analizza costantemente i carichi di lavoro dei database e offre suggerimenti di ottimizzazione personalizzati per ogni database inerenti, ad esempio, alla creazione dell'indice, all'eliminazione dell'indice e all'ottimizzazione dei piani di esecuzione delle query.

I consigli di ottimizzazione automatica per database SQL di Azure possono essere visualizzati nel portale di Azure, recuperati con chiamate all'API REST oppure usando comandi di T-SQL e PowerShell. Questo articolo si basa sull'utilizzo di uno script di PowerShell per recuperare suggerimenti di ottimizzazione automatica.

Nota

Questo articolo usa il modulo di PowerShell Azure Az consigliato per l'interazione con Azure. Per iniziare a usare il modulo Az PowerShell, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo Az PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Importante

Il modulo Azure Resource Manager (AzureRM) di PowerShell è stato deprecato il 29 febbraio 2024. Tutto lo sviluppo futuro deve usare il modulo Az.Sql. È consigliabile eseguire la migrazione da AzureRM al modulo Az PowerShell per garantire il supporto e gli aggiornamenti continui. Il modulo AzureRM non è più gestito o supportato. Gli argomenti per i comandi nel modulo Az PowerShell e nei moduli AzureRM sono sostanzialmente identici. Per altre informazioni sulla compatibilità, vedere Introduzione al nuovo modulo Az PowerShell.

Automatizzare le notifiche tramite posta elettronica per i suggerimenti di ottimizzazione automatica

La soluzione seguente consente di automatizzare l'invio di notifiche tramite posta elettronica contenenti suggerimenti di ottimizzazione automatica. La soluzione descritta consiste nell'esecuzione automatica di uno script di PowerShell per recuperare i suggerimenti di ottimizzazione usando Automazione di Azure e automatizzare la pianificazione di un processo di recapito di posta elettronica usando Microsoft Power Automate.

Creare un account di Automazione di Azure

Per usare Automazione di Azure, il primo passaggio consiste nel creare un account di automazione e configurarlo con le risorse di Azure da usare per l'esecuzione dello script di PowerShell. Per altre informazioni su Automazione di Azure e sulle relative funzionalità, vedere Introduzione ad Automazione di Azure.

Seguire questa procedura per creare un account di Automazione di Azure tramite il metodo di selezione e configurazione dell'app di automazione dal Marketplace di Azure:

  1. Accedere al portale di Azure.

  2. Selezionare + Crea una risorsa nel menu delle risorse.

  3. Cerca Automazione.

  4. Selezionare l'app Automazione nei risultati della ricerca.

    Screenshot del portale di Azure con la ricerca di Automation.

  5. Una volta all'interno del riquadro "Crea un account di Automazione", selezionare Crea.

  6. Selezionare una sottoscrizione e un gruppo di risorse da usare per l'esecuzione dello script di PowerShell. Inserisci un nome per questo account di automazione.

  7. Seleziona Avanzate. Verificare che l'opzione Assegnata dal sistema sia selezionata, in modo che venga creata un'identità gestita assegnata dal sistema per l'autenticazione alle risorse di Azure.

  8. Selezionare Tag. Prendere in considerazione l'uso dei tag di Azure. Ad esempio, il tag "Owner" o "CreatedBy" per identificare chi ha creato la risorsa e il tag "Environment" per identificare se questa risorsa è in produzione, sviluppo e così via. Per altre informazioni, vedere Sviluppare la strategia di denominazione e assegnazione di tag per le risorse di Azure.

  9. Selezionare Rivedi+Crea.

  10. Completare la creazione dell'account di automazione selezionando Crea.

Assegnare ruoli di Azure all'account di identità gestita assegnato dal sistema

Un account di Automazione può usare l'identità gestita assegnata dal sistema per ottenere i token per accedere ad altre risorse protette da Microsoft Entra ID, ad esempio il database SQL di Azure. Questi token non rappresentano un utente specifico dell'applicazione. Al contrario, rappresentano l'applicazione che accede alla risorsa. In questo caso, ad esempio, il token rappresenta un account di Automazione.

Prima di creare un runbook di Automazione di Azure, è importante concedere il livello appropriato di autorizzazioni all'account di automazione, seguendo il principio dei privilegi minimi. Quando si usa un'identità gestita assegnata dal sistema, l'aggiunta dei ruoli Collaboratore database SQL e Collaboratore SQL Server all'istanza SAMI è sufficiente per automatizzare le attività del database SQL di Azure. Per la maggior parte degli scenari, se l'automazione è destinata solo a database specifici, usare l'ambito a livello di gruppo di risorse. Se deve operare in un'intera sottoscrizione, usare l'ambito a livello di sottoscrizione.

L'esempio seguente usa Azure PowerShell per assegnare il ruolo Collaboratore database SQL nella sottoscrizione corrente all'account di identità gestito assegnato dal sistema.

$roleAssignmentParams = @{
     ObjectId = "<automation-Identity-object-id>"
     Scope = "/subscriptions/<subscription-id>"
     RoleDefinitionName = "SQL DB Contributor"
}

New-AzRoleAssignment @roleAssignmentParams

Per aggiungere questi ruoli a un'identità gestita assegnata dal sistema dal portale di Azure, seguire questa procedura:

  1. Accedere al portale di Azure.
  2. Individuare l'account di Automazione di Azure appena creato.
  3. In Impostazioni account selezionare Identità.
  4. In Autorizzazioni selezionare la casella Assegnazioni di ruolo di Azure .
  5. Selezionare Aggiungi un'assegnazione di ruolo (anteprima) .
  6. Nell'elenco a discesa di Ambito, selezionare l'insieme di risorse a cui si applica l'assegnazione di ruolo: Sottoscrizione, Gruppo di risorse, Ruolo e Ambito.
  7. Nell'elenco a discesa Ruolo selezionare un ruolo come Collaboratore database SQL.
  8. Seleziona Salva.

Ripetere i passaggi del passaggio Aggiungi assegnazione di ruolo per aggiungere il ruolo Collaboratore SQL Server .

Suggerimento

Annotare il nome dell'account di Automazione di Azure, l'ID della sottoscrizione e le risorse (ad esempio, copiandoli e incollandoli in un blocco note), esattamente come sono stati immessi durante la creazione dell'app Automazione. Queste informazioni saranno necessarie più avanti.

Se si hanno più sottoscrizioni di Azure per le quali si vuole creare la stessa automazione, è necessario ripetere questo processo anche per le altre sottoscrizioni.

Aggiornare i moduli di Automazione di Azure

Lo script di PowerShell per riprendere il consiglio di ottimizzazione automatica usa i comandi Get-AzResource e Get-AzSqlDatabaseRecommendedAction per i quali è necessario il modulo di Azure versione 4 o una versione successiva.

Creare un runbook di Automazione di Azure

Il passaggio successivo consiste nella creazione di un runbook in Automazione di Azure all'interno del quale si trova lo script di PowerShell per il recupero dei suggerimenti di ottimizzazione.

Per creare un nuovo runbook di Automazione di Azure, seguire questa procedura:

  1. Accedere all'account di Automazione di Azure creato nel passaggio precedente.
  2. Una volta nel riquadro dell'account di automazione, selezionare la voce di menu Runbooks sul lato sinistro per creare un nuovo runbook di Azure Automation con lo script PowerShell. Per altre informazioni sulla creazione di runbook di automazione, vedere Creare un nuovo runbook.
  3. Per aggiungere un nuovo runbook, selezionare l'opzione di menu +Aggiungi un runbook e quindi selezionare Creazione rapida - Crea un nuovo runbook.
  4. Nel riquadro Runbook digitare il nome del runbook (in questo esempio viene usato AutomaticTuningEmailAutomation ), selezionare il tipo di runbook come PowerShell e scrivere una descrizione di questo runbook per descriverne lo scopo.
  5. Selezionare Crea per completare la creazione di un nuovo runbook.

Seguire questa procedura per caricare uno script di PowerShell nel runbook creato:

  1. Nel riquadro Modifica runbook di PowerShell, selezionare RUNBOOKS nel menu ad albero ed espandere la visualizzazione fino a vedere il nome del runbook (in questo esempio AutomaticTuningEmailAutomation). Selezionare questo runbook.
  2. Nella prima riga del "Edit PowerShell Runbook" (a partire dal numero 1) copiare il codice di script di PowerShell seguente. Questo script di PowerShell viene fornito così com'è per iniziare. Modificare lo script in base alle esigenze.

Nell'intestazione dello script di PowerShell fornito è necessario sostituire <SUBSCRIPTION_ID_WITH_DATABASES> con l'ID della sottoscrizione di Azure. Per informazioni su come recuperare l'ID della sottoscrizione di Azure, vedere Getting your Azure Subscription GUID (Recupero del codice GUID della sottoscrizione).

In caso di più sottoscrizioni, è possibile aggiungerle delimitate da virgole alla proprietà "$subscriptions" nell'intestazione dello script.

# PowerShell script to retrieve Azure SQL Database automatic tuning recommendations.
#
# Provided "as-is" with no implied warranties or support.
# The script is released to the public domain.
#
# Replace <SUBSCRIPTION_ID_WITH_DATABASES> in the header with your Azure subscription ID.
#
# Microsoft Azure SQL Database team, 2018-01-22.

# Set subscriptions : IMPORTANT – REPLACE <SUBSCRIPTION_ID_WITH_DATABASES> WITH YOUR SUBSCRIPTION ID
$subscriptions = ("<SUBSCRIPTION_ID_WITH_DATABASES>", "<SECOND_SUBSCRIPTION_ID_WITH_DATABASES>", "<THIRD_SUBSCRIPTION_ID_WITH_DATABASES>")

# Get credentials
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# Define the resource types
$resourceTypes = ("Microsoft.Sql/servers/databases")
$advisors = ("CreateIndex", "DropIndex");
$results = @()

# Loop through all subscriptions
foreach ($subscriptionId in $subscriptions) {
    Select-AzSubscription -SubscriptionId $subscriptionId
    $rgs = Get-AzResourceGroup

    # Loop through all resource groups
    foreach ($rg in $rgs) {
        $rgname = $rg.ResourceGroupName;

        # Loop through all resource types
        foreach ($resourceType in $resourceTypes) {
            $resources = Get-AzResource -ResourceGroupName $rgname -ResourceType $resourceType

            # Loop through all databases
            # Extract resource groups, servers and databases
            foreach ($resource in $resources) {
                $resourceId = $resource.ResourceId
                if ($resourceId -match ".*RESOURCEGROUPS/(?<content>.*)/PROVIDERS.*") {
                    $ResourceGroupName = $matches['content']
                }
                else {
                    continue
                }
                if ($resourceId -match ".*SERVERS/(?<content>.*)/DATABASES.*") {
                    $ServerName = $matches['content']
                }
                else {
                    continue
                }
                if ($resourceId -match ".*/DATABASES/(?<content>.*)") {
                    $DatabaseName = $matches['content']
                }
                else {
                    continue
                }

                # Skip if master
                if ($DatabaseName -eq "master") {
                    continue
                }

                # Loop through all automatic tuning recommendation types
                foreach ($advisor in $advisors) {
                    $recs = Get-AzSqlDatabaseRecommendedAction -ResourceGroupName $ResourceGroupName -ServerName $ServerName  -DatabaseName $DatabaseName -AdvisorName $advisor
                    foreach ($r in $recs) {
                        if ($r.State.CurrentValue -eq "Active") {
                            $object = New-Object -TypeName PSObject
                            $object | Add-Member -Name 'SubscriptionId' -MemberType Noteproperty -Value $subscriptionId
                            $object | Add-Member -Name 'ResourceGroupName' -MemberType Noteproperty -Value $r.ResourceGroupName
                            $object | Add-Member -Name 'ServerName' -MemberType Noteproperty -Value $r.ServerName
                            $object | Add-Member -Name 'DatabaseName' -MemberType Noteproperty -Value $r.DatabaseName
                            $object | Add-Member -Name 'Script' -MemberType Noteproperty -Value $r.ImplementationDetails.Script
                            $results += $object
                        }
                    }
                }
            }
        }
    }
}

# Format and output results for the email
$table = $results | Format-List
Write-Output $table

Selezionare Salva per salvare lo script. Quando sei soddisfatto dello script, seleziona Pubblica per pubblicare questo runbook.

Nel riquadro del runbook principale è possibile scegliere di selezionare Avvia per testare lo script. Selezionare Output per visualizzare i risultati dello script eseguito. Questo output diventerà il contenuto del messaggio di posta elettronica.

Modificare il contenuto personalizzando lo script di PowerShell in base alle esigenze.

Con la procedura descritta sopra viene caricato in Automazione di Azure lo script di PowerShell che consente di riprendere i consigli di ottimizzazione automatica. Il passaggio successivo consiste nell'automatizzazione e nella pianificazione del processo di recapito della posta elettronica.

Automatizzare i processi di posta elettronica con Microsoft Power Automate

Per completare la soluzione, come ultimo passaggio, creare un flusso di automazione in Microsoft Power Automate composto da tre azioni (processi):

  • Automazione di Azure - Crea un processo : usato per eseguire lo script di PowerShell per recuperare le raccomandazioni di ottimizzazione automatica nel runbook di Azure Automation.
  • Automazione di Azure - Ottenere l'output del job utilizzato per ottenere l'output dallo script PowerShell eseguito.
  • Office 365 Outlook - Invia un messaggio di posta elettronica usato per inviare posta elettronica. I messaggi di posta elettronica vengono inviati usando l'account aziendale o dell’istituto di istruzione dell'utente che ha creato il flusso.

Per saperne di più sulle funzionalità di Microsoft Power Automate, vedere Introduzione di Microsoft Power Automate.

Il prerequisito per questo passaggio consiste nell'iscriversi a un account Microsoft Power Automate e accedere. Dopo aver eseguito l'accesso alla soluzione, seguire questa procedura per configurare un nuovo flusso:

  1. Accedere alla voce di menu Flussi personali .
  2. In I miei flussi selezionare il collegamento +Crea da vuoto nella parte superiore della pagina.
  3. Selezionare il link Cerca centinaia di connettori e trigger.
  4. Nel campo di ricerca digitare ricorrenza e selezionare Pianifica - Ricorrenza nei risultati della ricerca per pianificare l'esecuzione del processo di recapito della posta elettronica.
  5. Nel campo Frequenza del riquadro Ricorrenza selezionare la frequenza di pianificazione per l'esecuzione del flusso, ad esempio per inviare messaggi di posta elettronica automatici ogni minuto, ora, giorno, settimana e così via.

Il passaggio successivo consiste nell'aggiungere tre processi (creare, ottenere l'output e inviare un messaggio di posta elettronica) al flusso ricorrente appena creato. Per aggiungere al flusso i tre processi richiesti, seguire questa procedura:

  1. Creare l'azione per eseguire lo script di PowerShell per recuperare i suggerimenti di ottimizzazione

    1. Selezionare +Nuovo passaggio, seguito da Aggiungi un'azione all'interno del riquadro Flusso ricorrenza.
    2. Nel campo di ricerca digitare automazione e selezionare Automazione di Azure - Crea processo nei risultati della ricerca.
    3. Nel riquadro di creazione del processo configurare le proprietà del processo. Per questa configurazione sono necessari i dettagli dell'ID sottoscrizione di Azure, del gruppo di risorse e dell'account di Automazione registrati in precedenza nel riquadro Account di Automazione. Per altre informazioni sulle opzioni disponibili in questa sezione, vedere Azure Automation - Create Job (Automazione di Azure - Creare il processo).
    4. Selezionare Salva flusso.
  2. Creare un'azione per recuperare l'output dallo script di PowerShell eseguito.

    1. Selezionare +Nuovo passaggio, seguito da Aggiungi un'azione all'interno del riquadro Flusso ricorrenza
    2. Nel campo di ricerca digitare automazione e selezionare Automazione di Azure - Ottenere l'output del processo dai risultati della ricerca. Per altre informazioni sulle opzioni disponibili in questa sezione, vedere Azure Automation – Get job output (Automazione di Azure - Ottenere l'output del processo).
    3. Compilare i campi richiesti (simile alla creazione del processo precedente): inserire l'ID della sottoscrizione Azure, il gruppo di risorse e un account di automazione (come specificati nel riquadro dell'account di automazione).
    4. Selezionare il campo ID processo affinché il menu Contenuto dinamico venga visualizzato. Dal menu, selezionare l'opzione ID processo.
    5. Selezionare Salva flusso.
  3. Creare un’azione per inviare messaggi di posta elettronica mediante l'integrazione di Office 365

    1. Selezionare +Nuovo passaggio, seguito da Aggiungi un'azione all'interno del riquadro Flusso ricorrenza.
    2. Nel campo di ricerca digitare invia un messaggio di posta elettronica e selezionare Office 365 Outlook - Invia un messaggio di posta elettronica dai risultati della ricerca.
    3. Nel campo A digitare l'indirizzo di posta elettronica a cui è necessario inviare il messaggio di posta elettronica di notifica.
    4. Nel campo Oggetto digitare l'oggetto del messaggio di posta elettronica, ad esempio "Notifica tramite posta elettronica per l'ottimizzazione automatica delle raccomandazioni".
    5. Selezionare il campo Corpo per far apparire il menu Contenuto dinamico. Da questo menu, è possibile selezionare Ottieni output del processo sotto Contenuto.
    6. Selezionare Salva flusso.

Suggerimento

Per inviare messaggi di posta elettronica automatizzati a destinatari diversi, creare flussi separati. In questi flussi aggiuntivi modificare l'indirizzo di posta elettronica del destinatario nel campo A e l'oggetto del messaggio di posta elettronica nel campo Oggetto . La creazione di nuovi runbook in Automazione di Azure con script di PowerShell personalizzati(ad esempio con modifica dell'ID sottoscrizione di Azure) consente di personalizzare ulteriormente gli scenari automatizzati, ad esempio l'invio di messaggi di posta elettronica a destinatari separati in Raccomandazioni di ottimizzazione automatica per sottoscrizioni separate.

I passaggi precedenti configurano il flusso di lavoro del processo di recapito della posta elettronica. Nell'immagine seguente è illustrato il flusso intero costituito dalle tre azioni create.

Per testare il flusso, selezionare Esegui adesso. Le statistiche di esecuzione dei processi automatizzati, con esito positivo delle notifiche di posta elettronica inviate, possono essere visualizzate nel riquadro Analisi di flusso.

Il riquadro Analisi dei flussi è utile per monitorare l'esito positivo delle esecuzioni dei processi e, se necessario, per la risoluzione dei problemi. Qualora sia necessario risolvere un problema, è anche possibile esaminare il log di esecuzione dello script di PowerShell accessibile tramite l'app Automazione di Azure.

L'output finale del messaggio di posta elettronica automatizzato è simile al seguente messaggio di posta elettronica ricevuto dopo aver compilato ed eseguito questa soluzione:

Screenshot di un'email di esempio da Microsoft Outlook relativo alle notifiche email di ottimizzazione automatica.

Modificando lo script di PowerShell è possibile modificare l'output e la formattazione del messaggio di posta elettronica automatizzato in base alle proprie esigenze.

In base agli scenari personalizzati, è possibile anche personalizzare ulteriormente la soluzione in modo da creare notifiche tramite posta elettronica basate su uno specifico evento di ottimizzazione.