Condividi tramite


Creare una sessione eventi con una destinazione event_file in Archiviazione di Azure

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

I passaggi generali di questa procedura dettagliata sono i seguenti:

  1. Creare un account Archiviazione di Azure oppure trovare un account appropriato da usare.
  2. Creare un contenitore in questo account di archiviazione.
  3. Concedere all'motore di database necessario l'accesso al contenitore usando un'assegnazione di ruolo controllo degli accessi in base al ruolo o un token di firma di accesso condiviso.
  4. Creare credenziali nel database o nell'istanza gestita in cui si crea la sessione eventi.
  5. Creare, avviare e usare una sessione eventi.

Creare un account di archiviazione e un contenitore

Per una descrizione dettagliata della creazione di un account di archiviazione in Archiviazione di Azure, vedere Creare un account di archiviazione. Si apprenderà come creare un account di archiviazione usando portale di Azure, PowerShell, Azure SQL, un modello di ARM o un modello Bicep.

Ti consigliamo di utilizzare un account utente denominato:

  • È un account Standard general-purpose v2.
  • Ha il tipo di ridondanza corrispondente alla ridondanza del database SQL di Azure, del pool elastico o dell'istanza gestita in cui vengono create sessioni di eventi.
  • Usa il Hot livello di accesso BLOB.
  • Si trova nella stessa area di Azure del database SQL di Azure, del pool elastico o dell'istanza gestita.

Quindi creare un contenitore in questo account di archiviazione usando il portale di Azure. È anche possibile creare questa configurazione tramite Azure PowerShell o tramite l'interfaccia della riga di comando di Azure.

Prendere nota dei nomi dell'account di archiviazione e del contenitore creati. Verranno usati nei passaggi seguenti.

Concedere l'accesso al contenitore

Per leggere e scrivere i dati degli eventi, il motore di database richiede un accesso specifico al contenitore. È possibile concedere questo accesso in due modi, a seconda del tipo di autenticazione scelto:

  • Se si usa l'identità gestita con l'autenticazione Microsoft Entra, si assegna il ruolo Controllo degli accessi in base al ruolo collaboratore ai dati dei BLOB di archiviazione per il contenitore all'identità gestita del server logico SQL di Azure o all'istanza gestita di SQL di Azure.

    Nota

    L'uso dell'identità gestita con sessioni di eventi estesi è disponibile in anteprima.

  • Se si usa l'autenticazione basata su segreto, si crea un token di firma di accesso condiviso per il contenitore.

    Per usare questo tipo di autenticazione, è necessario abilitare l'opzione Consenti l'accesso alla chiave dell'account di archiviazione. Per altre informazioni, vedere Impedire l'autorizzazione con chiave condivisa per un account di archiviazione di Azure.

Concedere l'accesso usando l'identità gestita

  1. Nella portale di Azure passare alla pagina Identità del server logico SQL di Azure o dell'istanza gestita di SQL di Azure e assicurarsi che sia assegnata un'identità gestita. Per altre informazioni, vedere Identità gestite in Microsoft Entra per Azure SQL.

  2. Nella portale di Azure passare al contenitore di archiviazione in cui archiviare i dati degli eventi. Nella pagina Controllo di accesso (IAM) selezionare Aggiungi per assegnare il ruolo Controllo degli accessi in base al ruolo Collaboratore ai dati dei BLOB di archiviazione all'identità gestita del server logico o dell'istanza gestita di SQL.

    Se al server logico o all'istanza gestita di SQL è abilitata l'identità gestita assegnata dal sistema, assegnare il ruolo a tale identità. Se l'identità assegnata dal sistema è disabilitata, ma esiste una o più identità assegnate dall'utente, assegnare il ruolo all'identità assegnata dall'utente designata come identità primaria.

    Per altre informazioni, vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB.

  3. Creare una credenziale per indicare al motore di database di eseguire l'autenticazione per Archiviazione di Azure usando l'identità gestita per un URL del contenitore specifico.

    Creare credenziali con ambito database. Usando uno strumento client, ad esempio SSMS o ADS, aprire un nuovo intervallo di query, connettersi al database in cui si crea la sessione eventi e incollare il batch T-SQL seguente. Assicurarsi di essere connessi al database utente e non al database master.

    Nota

    L'esecuzione del batch T-SQL seguente richiede l'autorizzazione CONTROL del database, che viene mantenuta dal proprietario del database (dbo), dai membri del ruolo del database db_owner e dall'amministratore del server logico.

    /*
    (Re-)create a database scoped credential.
    The name of the credential must match the URL of the blob container.
    */
    IF EXISTS (
              SELECT 1
              FROM sys.database_credentials
              WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
              )
        DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /*
    When using managed identity, the credential does not contain a secret
    */
    CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'MANAGED IDENTITY';
    

    Prima di eseguire questo batch, apportare le modifiche seguenti:

    • In tutte e tre le occorrenze di https://<storage-account-name>.blob.core.windows.net/<container-name>, sostituire <storage-account-name> con il nome dell'account di archiviazione e sostituire <container-name> con il nome del contenitore.

Concedere l'accesso usando un token di firma di accesso condiviso

  1. Nella portale di Azure passare all'account di archiviazione e al contenitore creato. Selezionare il contenitore e passare a Impostazioni > Token di accesso condiviso.

    Il token di firma di accesso condiviso deve soddisfare i requisiti seguenti:

    • Autorizzazioni impostate su Read, Write, Delete, List.
    • L'ora di inizio e l'ora di scadenza devono includere la durata della sessione eventi. Il token di firma di accesso condiviso creato funziona solo entro questo intervallo di tempo.
    • Non aver restrizioni degli indirizzi IP.

    Selezionare il pulsante Genera URL e token SAS. Il token di firma di accesso condiviso si trova nella casella Token di firma di accesso condiviso BLOB. Sarà possibile copiarlo nel passaggio successivo.

    Importante

    Il token di firma di accesso condiviso fornisce l'accesso in lettura e scrittura a questo contenitore. Considerarlo come se fosse una password o qualsiasi altro segreto.

    Screenshot della schermata Token di accesso condiviso per un contenitore Archiviazione di Azure con un token di firma di accesso condiviso generato per un contenitore di esempio.

  2. Creare una credenziale per archiviare il token di firma di accesso condiviso.

    Archiviare il token di firma di accesso condiviso in una credenziale con ambito database. Usando uno strumento client, ad esempio SSMS o ADS, aprire un nuovo intervallo di query, connettersi al database in cui si crea la sessione eventi e incollare il batch T-SQL seguente. Assicurarsi di essere connessi al database utente e non al database master.

    Nota

    L'esecuzione del batch T-SQL seguente richiede l'autorizzazione CONTROL del database, che viene mantenuta dal proprietario del database (dbo), dai membri del ruolo del database db_owner e dall'amministratore del server logico.

    /*
    Create a master key to protect the secret of the credential
    */
    IF NOT EXISTS (
                  SELECT 1
                  FROM sys.symmetric_keys
                  WHERE name = '##MS_DatabaseMasterKey##'
                  )
    CREATE MASTER KEY;
    
    /*
    (Re-)create a database scoped credential.
    The name of the credential must match the URL of the blob container.
    */
    IF EXISTS (
              SELECT 1
              FROM sys.database_credentials
              WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
              )
        DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /*
    The secret is the SAS token for the container. The Read, Write, and List permissions are set.
    */
    CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<sas-token>';
    

    Prima di eseguire questo batch, apportare le modifiche seguenti:

    • In tutte e tre le occorrenze di https://<storage-account-name>.blob.core.windows.net/<container-name>, sostituire <storage-account-name> con il nome dell'account di archiviazione e sostituire <container-name> con il nome del contenitore.
    • SECRET Nella clausola sostituire <sas-token> con il token di firma di accesso condiviso copiato nel passaggio precedente.

Creare, avviare e arrestare una sessione eventi

Dopo aver creato le credenziali, è possibile creare la sessione eventi. A differenza della creazione delle credenziali, la creazione di una sessione eventi non richiede l'autorizzazione CONTROL . Dopo aver creato le credenziali, è possibile creare sessioni di eventi anche se si dispone di autorizzazioni più limitate. Vedere autorizzazioni per le autorizzazioni specifiche necessarie.

Per creare una nuova sessione eventi in SSMS, espandere il nodo Eventi estesi. Questo nodo si trova nella cartella del database in database SQL di Azure e nella cartella Gestione nell’Istanza gestita di SQL di Azure. Fare clic con il pulsante destro del mouse sulla cartella Sessioni e scegliere Nuova sessione. Nella pagina Generale immettere un nome per la sessione, example-session in questo esempio. Nella pagina Eventi selezionare uno o più eventi da aggiungere alla sessione. In questo esempio, è stato selezionato l’evento sql_batch_starting.

Screenshot della finestra di dialogo Nuova Sessione SSMS che mostra la pagina di selezione dell'evento con l'evento sql_batch_starting selezionato.

Nella pagina Data Archiviazione selezionare event_file come tipo di destinazione e incollare l'URL del contenitore di archiviazione nella casella URL Archiviazione. Digitare una barra (/) alla fine di questo URL, seguita dal nome del file (BLOB). In questo esempio il nome del BLOB è example-session.xel e l'intero URL è https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

Nota

Per Istanza gestita di SQL, invece di incollare l'URL del contenitore di archiviazione nella pagina Archiviazione dati, usare il pulsante Script per creare uno script T-SQL della sessione. Specificare l'URL del contenitore come valore per l'argomento filename, simile all'esempio di Istanza gestita di SQL riportato di seguito ed eseguire lo script per creare la sessione.

Screenshot della finestra di dialogo Nuova Sessione SSMS che mostra la pagina di selezione dell'archiviazione dei dati con una destinazione event_file selezionata e un URL di archiviazione immesso.

Dopo aver configurato la sessione, è possibile selezionare il pulsante Script per creare uno script T-SQL della sessione per salvarlo per un secondo momento. Ecco lo script per la sessione di esempio:

CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file(SET filename=N'https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel')
GO

Selezionare OK per creare la sessione.

In Esplora oggetti espandere la cartella Sessioni per visualizzare la sessione eventi creata. Per impostazione predefinita, la sessione non viene avviata al momento della creazione. Per avviare la sessione, fare clic con il pulsante destro del mouse sul nome della sessione e scegliere Avvia sessione. In modo analogo, mentre la sessione è in esecuzione, è possibile arrestarla in un secondo momento selezionando Arresta sessione.

Poiché i batch T-SQL vengono eseguiti in questo database o in un'istanza gestita, la sessione scrive gli eventi example-session.xel nel BLOB nel contenitore di archiviazione.

Per arrestare la sessione, fare clic con il pulsante destro del mouse in Esplora oggetti e scegliere Arresta sessione.

Visualizzare i dati degli eventi

È possibile visualizzare i dati degli eventi nell'interfaccia utente del Visualizzatore eventi di SQL Server Management Studio (SSMS), in cui è possibile usare filtri e aggregazioni per analizzare i dati acquisiti. Per altre informazioni sull'uso del visualizzatore eventi in SSMS, vedere Visualizzare i dati degli eventi in SSMS.

Scaricare i file xel da Archiviazione di Azure

Suggerimento

Se si usa SSMS v19.2 o versione successiva, non è necessario scaricare i file xel come descritto in questa sezione. In queste versioni SSMS legge i file xel per ogni sessione direttamente dall'archiviazione di Azure. Per altre informazioni, vedere il blog Miglioramento degli eventi estesi in SQL di Azure.

Scaricare il BLOB xel per la sessione dal contenitore di archiviazione e salvarlo come file locale. In portale di Azure trovare l'account di archiviazione usato, selezionare Contenitori in Archiviazione dati e selezionare il contenitore creato per la sessione eventi. Il BLOB per la sessione ha il nome della sessione come prima parte del nome, con un suffisso numerico. Selezionare i puntini di sospensione (...) per visualizzare il menu di scelta rapida per il BLOB e selezionare Scarica.

È possibile installare Azure Storage Explorer per scaricare più BLOB xel in un'unica operazione.

Dopo aver scaricato il file xel, aprirlo in SSMS. Nel menu principale di SSMS passare a File e selezionare Apri. Se si dispone di un singolo file xel, selezionare File... e passare al file scaricato. Se sono presenti più file xel generati dalla stessa sessione eventi (noti come file di rollover), è possibile usare la finestra di dialogo Unisci file eventi estesi… per aprirli tutti nel visualizzatore eventi.

Visualizzare i dati degli eventi con T-SQL

Per leggere i dati della sessione eventi tramite T-SQL, usare la funzione sys.fn_xe_file_target_read_file(). Per usare questa funzione in un database o in un'istanza gestita diversa da quella in cui viene creata la sessione eventi, concedere l'accesso al motore di database nel contenitore di archiviazione con i BLOB di dati dell'evento.

Per una procedura dettagliata, vedere Creare una sessione eventi in SSMS.