Creación de una sesión de evento con un destino de event_file en Azure Storage

Se aplica a:Azure SQL DatabaseAzure SQL Managed Instance

Los pasos generales de este tutorial son:

  1. Cree una cuenta de Azure Storage o busque una cuenta existente apropiada para su uso
  2. Creación de un contenedor en esta cuenta de almacenamiento
  3. Creación de un token de SAS con el acceso necesario para este contenedor
  4. Creación de una credencial para almacenar el token de SAS en la base de datos o instancia administrada donde se crea la sesión de eventos
  5. Creación, inicio y uso de una sesión de eventos

Creación de una cuenta de almacenamiento y un contenedor

Para obtener una descripción detallada sobre cómo crear una cuenta de Azure Storage, consulte Crear una cuenta de almacenamiento. Aprenderá a crear una cuenta de almacenamiento mediante Azure Portal, PowerShell, Azure SQL, una plantilla de ARM o una plantilla de Bicep.

Recomendamos que use una cuenta que:

  • Es una cuenta Standard general-purpose v2.
  • Tiene su tipo de redundancia que coincide con la redundancia de la base de datos de Azure SQL, del grupo elástico o de instancia administrada donde se crean las sesiones de eventos.
  • Usa el Hotnivel de acceso deblobs.
  • Se encuentra en la misma región de Azure que la base de datos de Azure SQL, del grupo elástico o de la instancia administrada.

A continuación, cree un contenedor en esta cuenta de almacenamiento con Azure Portal. También puede crear un contenedor mediante PowerShell o la CLI de Azure.

Anote los nombres de la cuenta de almacenamiento y elcontenedor que use.

Creación de un token de SAS

El Motor de base de datos que ejecuta la sesión de eventos necesita acceso específico al contenedor de almacenamiento. Para conceder este acceso, cree un token de SAS para el contenedor. Este token debe cumplir los requisitos siguientes:

  • Tener los permisos rwl (Read, Write, List)
  • Tener la hora de inicio y expiración que abarcan la duración de la sesión de eventos
  • No tener restricciones de direcciones IP

En Azure Portal, encuentre el contenedor y la cuenta de almacenamiento que creó. Seleccione el contenedor y vaya a Configuración > Tokens de acceso compartido. Establezca Permisos en Read, Write, List y establezca la fecha y hora de inicio y expiración. El token de SAS que cree solo funciona dentro de este intervalo de tiempo.

Seleccione el botón Generar URL y token de SAS. El token de SAS está en el cuadro Token de SAS de blob. Puede copiarlo para usarlo en el paso siguiente.

Importante

El token de SAS proporciona acceso de lectura y escritura a este contenedor. Trátelo como trataría una contraseña o cualquier otro secreto.

Screenshot of the Shared Access Tokens screen for an Azure Storage container, with a generated SAS token for an example container.

Creación de una credencial para almacenar el token de SAS

En base de datos de Azure SQL, debe usar una credencial con ámbito de base de datos para restaurar el token de SAS. En Azure SQL Managed Instance, use una credencial con ámbito de servidor.

Almacene el token de SAS en una credencial con ámbito de base de datos. Con una herramienta de cliente como SSMS o ADS, abra una nueva ventana de consulta, conéctese a la base de datos donde cree la sesión de eventos y pegue el siguiente lote de T-SQL. Asegúrese de que está conectado a la base de datos de usuario y no a la base de datos master.

Nota:

La ejecución del siguiente lote de T-SQL requiere el permiso de base de datos CONTROL, que es mantenido por el propietario de la base de datos (dbo), los miembros del rol de base de datos db_owner y el administrador del servidor lógico.

/*
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';

Antes de ejecutar este lote, realice los cambios siguientes:

  • En las tres ocurrencias de https://exampleaccount4xe.blob.core.windows.net/xe-example-container, reemplace exampleaccount4xe por el nombre de su cuenta de almacenamiento y xe-example-container por el nombre de su contenedor.
  • Reemplace toda la cadena entre las comillas simples de la cláusula SECRET por el token de SAS que copió en el paso anterior.

Creación, inicio y detención de una sesión de eventos

Una vez creada la credencial con el token de SAS, puede crear la sesión de eventos. La creación de una sesión de eventos no requiere el permiso CONTROL. Si la credencial con el token de SAS correcto ya existe, puede crear sesiones de eventos incluso si tiene un conjunto de permisos más restringido. Consulte permisos para obtener los permisos específicos necesarios.

Para crear una nueva sesión de eventos en SSMS, expanda el nodo Eventos extendidos. Este nodo se encuentra en la carpeta de base de datos de Azure SQL y, en la carpeta Administración de Azure SQL Managed Instance. Haga clic con el botón derecho en la carpeta Sesiones y seleccione Nueva sesión.... En la página General, escriba un nombre para la sesión, que es example-session en este ejemplo. En la página Eventos, seleccione uno o varios eventos para agregar a la sesión. En este ejemplo, se selecciona el evento sql_batch_starting.

Screenshot of the New Session SSMS dialog showing the event selection page with the sql_batch_starting event selected.

En lapágina Almacenamiento de datos, seleccione event_file como el tipo de destino y pegue la dirección URL del contenedor de almacenamiento en el cuadro Dirección URL de almacenamiento. Escriba una barra diagonal (/) al final de esta dirección URL, seguida del nombre del archivo (blob). En nuestro ejemplo, el nombre del blob es example-session.xel y la dirección URL completa es https://exampleaccount4xe.blob.core.windows.net/xe-example-container/example-session.xel.

Nota:

Para SQL Managed Instance, en lugar de pegar la dirección URL del contenedor de almacenamiento en la página Almacenamiento de datos, use el botón Script para crear un script de T-SQL de la sesión. Especifique la dirección URL del contenedor como el valor del argumento filename, similar al ejemplo de SQL Managed Instance siguiente y ejecute el script para crear la sesión.

Screenshot of the New Session SSMS dialog showing the data storage selection page with an event_file target selected and an entered storage URL.

Ahora que la sesión está configurada, puede seleccionar el botón Script para crear un script de T-SQL de la sesión para guardarla más adelante. Este es el script de nuestra sesión de ejemplo:

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

Seleccione Aceptar para crear la sesión.

En Explorador de objetos, expanda la carpeta Sesiones para ver la sesión de eventos que creó. De forma predeterminada, la sesión no se inicia cuando se crea. Para iniciar la sesión, haga clic con el botón derecho en el nombre de la sesión y seleccione Iniciar sesión. Puede detenerla más adelante seleccionando de forma similar Detener sesión una vez que se esté ejecutando la sesión.

A medida que se ejecutan lotes de T-SQL en esta base de datos o instancia administrada, la sesión escribe eventos en el blob example-session.xel del contenedor de almacenamiento xe-example-container.

Para detener la sesión, haga clic con el botón derecho en ella en Explorador de objetos y seleccione Detener sesión.

Ver datos de eventos

Puede ver los datos de eventos en la interfaz de usuario del visor de eventos de SQL Server Management Studio (SSMS), donde puede usar filtros y agregaciones para analizar los datos capturados. Para obtener más información sobre el uso del visor de eventos en SSMS, consulte Visualización de datos de eventos en SSMS.

Descargar archivos xel desde Azure Storage

Sugerencia

Si usa SSMS v19.2 o posterior, no es necesario descargar archivos xel como se describe en esta sección. En estas versiones, SSMS lee los archivos xel de cada sesión directamente desde Azure Storage. Para más información, consulte el blog Mejorar eventos extendidos en Azure SQL.

Descargue el blob xel de la sesión desde el contenedor de almacenamiento y guárdelo como un archivo local. En Azure Portal, busque la cuenta de almacenamiento que usó, seleccione Contenedores en Almacenamiento de datos y seleccione el contenedor que creó para la sesión de eventos. El blob de la sesión tiene el nombre de la sesión como la primera parte de su nombre, con un sufijo numérico. Seleccione los puntos suspensivos (...) para mostrar el menú contextual del blob y seleccione Descargar.

Puede instalar Explorador de Azure Storage para descargar varios blobs xel en una sola operación.

Una vez descargado el archivo xel, ábralo en SSMS. En el menú principal de SSMS, vaya a Archivo y seleccione Abrir. Si tiene un solo archivo xel, seleccione Archivo... y examine el archivo que descargó. Si tiene varios archivos xel generados por la misma sesión de eventos (conocidos como archivos de sustitución incremental), puede usar el cuadro de diálogo Combinar archivos de eventos extendidos... para abrir todos ellos en el visor de eventos.

Visualización de datos de eventos mediante T-SQL

Para leer datos de sesión de eventos mediante T-SQL, use la función sys.fn_xe_file_target_read_file(). Para usar esta función en una base de datos o instancia administrada diferente de la que se crea la sesión de eventos, cree una credencial para conceder al Motor de base de datos acceso al contenedor de almacenamiento con los blobs de eventos.

Para obtener un tutorial más detallado, consulte Creación de una sesión de eventos en SSMS.