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

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

I passaggi generali di questa procedura dettagliata sono i seguenti:

  1. Creare un account di archiviazione di Azure o trovare un account esistente da utilizzare
  2. Creare un contenitore nell'account di archiviazione
  3. Creare un token di firma di accesso condiviso con l'accesso necessario per questo contenitore
  4. Creare credenziali per archiviare il token di firma di accesso condiviso 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 Hotlivello 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 usati.

Creare un token di firma di accesso condiviso

Il motore di database che esegue la sessione eventi richiede un accesso specifico al contenitore di archiviazione. Per concedere questo accesso, creare un token di firma di accesso condiviso per il contenitore. Lo token deve soddisfare i requisiti seguenti:

  • Disporre delle autorizzazioni rwl (Read, Write, List)
  • Avere l'ora di inizio e l'ora di scadenza che includono la durata della sessione eventi
  • Non aver restrizioni degli indirizzi IP

Trovare l'account di archiviazione e il container creati nel portale di Azure. Selezionare il contenitore e passare a Impostazioni > Token di accesso condiviso. Impostare Autorizzazioni su Read, Write, List, e impostare data e ora di inizio e scadenza. Il token di firma di accesso condiviso creato funziona solo entro questo intervallo di tempo.

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 of the Shared Access Tokens screen for an Azure Storage container, with a generated SAS token for an example container.

Creare credenziali per archiviare il token di firma di accesso condiviso

In database SQL di Azure si usa una credenziale con ambito database per archiviare il token di firma di accesso condiviso. In Istanza gestita di SQL di Azure si usa una credenziale con ambito server.

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://exampleaccount4xe.blob.core.windows.net/xe-example-container'
          )
    DROP DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container];

/*
The secret is the SAS token for the container. The Read, Write, and List permissions are set.
*/
CREATE DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = 'sp=rwl&st=2023-10-17T23:28:32Z&se=2023-10-18T07:28:32Z&spr=https&sv=2022-11-02&sr=c&sig=REDACTED';

Prima di eseguire questo batch, apportare le modifiche seguenti:

  • In tutte e tre le occorrenze di https://exampleaccount4xe.blob.core.windows.net/xe-example-container, sostituire exampleaccount4xe con il nome dell'account di archiviazione e sostituire xe-example-container con il nome del contenitore.
  • Sostituire l'intera stringa tra le virgolette singole nella clausola SECRET con il token di firma di accesso condiviso copiato nel passaggio precedente.

Creare, avviare e arrestare una sessione di eventi

Dopo aver creato le credenziali con il token di firma di accesso condiviso, è possibile creare la sessione eventi. La creazione di una sessione eventi non richiede l'autorizzazione CONTROL. Se le credenziali con il token di firma di accesso condiviso corretto esistono già, è possibile creare sessioni eventi anche se si dispone di un set di autorizzazioni più limitato. 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 of the New Session SSMS dialog showing the event selection page with the sql_batch_starting event selected.

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://exampleaccount4xe.blob.core.windows.net/xe-example-container/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 of the New Session SSMS dialog showing the data storage selection page with an event_file target selected and an entered storage URL.

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://exampleaccount4xe.blob.core.windows.net/xe-example-container/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 xe-example-container.

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, creare una credenziale per concedere al motore di database l'accesso al contenitore di archiviazione con i BLOB di eventi.

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