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:
- Creare un account Archiviazione di Azure oppure trovare un account appropriato da usare.
- Creare un contenitore in questo account di archiviazione.
- 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.
- Creare credenziali nel database o nell'istanza gestita in cui si crea la sessione eventi.
- 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.
- Per le risorse SQL di Azure con ridondanza locale, usare l’archiviazione con ridondanza locale, l'archiviazione con ridondanza geografica o RA-GRS. Per le risorse SQL di Azure con ridondanza della zona, usare ZRS, archiviazione con ridondanza geografica della zona o RA-GZRS. Per altre informazioni, vedere Ridondanza di Archiviazione di Azure.
- 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
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.
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.
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 databasedb_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.
- In tutte e tre le occorrenze di
Concedere l'accesso usando un token di firma di accesso condiviso
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.
- Autorizzazioni impostate su
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 databasedb_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.
- In tutte e tre le occorrenze di
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
.
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.
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.