Compartir a través de


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

Se aplica a: Azure SQL Database Azure SQL Managed Instance

Los pasos generales de este tutorial son:

  1. Cree una cuenta de Azure Storage o busque una cuenta adecuada existente para usarla.
  2. Cree un contenedor en esta cuenta de almacenamiento.
  3. Conceda al Motor de base de datos acceso necesario al contenedor mediante una asignación de roles de RBAC o un token de SAS.
  4. Cree una credencial en la base de datos o instancia administrada donde cree la sesión de eventos.
  5. Cree, inicie y use 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 nivel de acceso de blobs Hot.
  • 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.

Tenga en cuenta los nombres de la cuenta de almacenamiento y contenedor ha creado. Los usará en los pasos siguientes.

Concesión de acceso al contenedor

Para leer y escribir datos de eventos, el motor de base de datos requiere acceso específico al contenedor. Puede conceder este acceso de una de estas dos maneras, en función de su elección de tipo de autenticación:

  • Si usa una identidad administrada con autenticación de Microsoft Entra, asigne el rol RBAC de colaborador de datos de Storage Blob para el contenedor a la identidad administrada del servidor lógico de Azure SQL o la instancia administrada de Azure SQL.

    Nota:

    El uso de identidad administrada con sesiones de eventos extendidos está en versión preliminar.

  • Si usa la autenticación basada en secretos, cree un token de SAS de para el contenedor.

    Para usar este tipo de autenticación, se debe habilitar la opción Permitir el acceso a la clave de la cuenta de almacenamiento. Para obtener más información, consulte Impedir la autorización con clave compartida para una cuenta de Azure Storage.

Otorgar acceso mediante la identidad administrada

  1. En Azure Portal, vaya a la página Identity del servidor lógico de Azure SQL o instancia administrada de Azure SQL y asegúrese de que se asigna una identidad administrada. Para obtener más información, vea Identidades administradas en Microsoft Entra para Azure SQL.

  2. En Azure Portal, vaya al contenedor de almacenamiento donde desea almacenar los datos de eventos. En la Control de acceso (IAM), seleccione Agregar para asignar el rol RBAC de Colaborador de datos de Storage Blob a la identidad administrada del servidor lógico o de la instancia administrada de SQL.

    Si el servidor lógico o la instancia administrada de SQL tiene habilitada su identidad administrada asignada por el sistema, asigne el rol a esa identidad. Si la identidad asignada por el sistema está deshabilitada, pero hay una o varias identidades asignadas por el usuario, asigne el rol a la identidad asignada por el usuario designada como identidad principal.

    Para más información, vea Asignación de un rol de Azure para el acceso a datos de blob.

  3. Cree una credencial para indicar al motor de base de datos que se autentique en Azure Storage mediante la identidad administrada para una dirección URL de contenedor específica.

    Cree 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.

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

    Antes de ejecutar este lote, realice el siguiente cambio:

    • En las tres ocurrencias de https://<storage-account-name>.blob.core.windows.net/<container-name>, reemplace <storage-account-name> por el nombre de su cuenta de almacenamiento y <container-name> por el nombre de su contenedor.

Conceder acceso mediante un token de SAS

  1. En Azure Portal, vaya a la cuenta de almacenamiento y al contenedor que creó. Seleccione el contenedor y vaya a Configuración > Tokens de acceso compartido.

    El token de SAS debe cumplir los siguientes requisitos:

    • Permisos establecidos en Read, Write, Delete, List.
    • La hora de inicio y el tiempo de expiración debe abarcar la duración de la sesión de eventos. El token de SAS que cree solo funciona dentro de este intervalo de tiempo.
    • No tener restricciones de direcciones IP.

    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.

    Captura de pantalla de la pantalla Tokens de acceso compartido para un contenedor de Azure Storage, con un token de SAS generado para un contenedor de ejemplo.

  2. Cree una credencial para almacenar el token de SAS.

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

    Antes de ejecutar este lote, realice los cambios siguientes:

    • En las tres ocurrencias de https://<storage-account-name>.blob.core.windows.net/<container-name>, reemplace <storage-account-name> por el nombre de su cuenta de almacenamiento y <container-name> por el nombre de su contenedor.
    • En la cláusula SECRET, reemplace <sas-token> por el token de SAS que copió en el paso anterior.

Crear, iniciar y detener una sesión de evento

Una vez creada la credencial, puede crear la sesión de eventos. A diferencia de la creación de la credencial, la creación de una sesión de eventos no requiere el permiso CONTROL. Una vez creada la credencial, puede crear sesiones de eventos incluso si tiene permisos más restringidos. 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.

Captura de pantalla del cuadro de diálogo Nueva sesión de SSMS en la que se muestra la página de selección de eventos con el evento sql_batch_starting seleccionado.

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://<storage-account-name>.blob.core.windows.net/<container-name>/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.

Captura de pantalla del cuadro de diálogo Nueva sesión de SSMS en la que se muestra la página de selección de almacenamiento de datos con un destino de event_file seleccionado y una dirección URL de almacenamiento especificada.

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://<storage-account-name>.blob.core.windows.net/<container-name>/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 los lotes de T-SQL se ejecutan en esta base de datos o instancia administrada, la sesión escribe eventos en el blob example-session.xel en el contenedor de almacenamiento.

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, conceder acceso al motor de base de datos en el contenedor de almacenamiento con los blobs de datos del evento.

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