Partager via


Créer une session d’événement avec une cible event_file dans Stockage Azure

S’applique à :Base de données SQLAzure SQL Managed InstanceBase de données Azure SQL dans Fabric

Voici les étapes générales de cette procédure pas à pas :

  1. Créez un compte Stockage Azure ou recherchez un compte existant approprié à utiliser.
  2. Créer un conteneur dans ce compte de stockage.
  3. Accordez au moteur de base de données l’accès requis au conteneur à l’aide d’une affectation de rôle RBAC ou d’un jeton SAS.
  4. Créez des informations d’identification dans la base de données ou l’instance où vous créez la session d’événements.
  5. Créez, démarrez et utilisez une session d’événement.

Créer un compte de stockage et un conteneur

Pour en savoir plus sur la création d’un compte de stockage dans Stockage Azure, consultez Créer un compte de stockage. Vous allez découvrir comment créer un compte de stockage à l’aide du portail Azure, de PowerShell, d’Azure SQL, d’un modèle ARM ou d’un modèle Bicep.

Utilisez un compte qui :

Ensuite, créez un conteneur dans ce compte de stockage à l’aide du portail Azure. Vous pouvez également créer un conteneur à l’aide de PowerShell ou d’Azure CLI.

Notez les noms du compte de stockage et du conteneur que vous avez créés. Vous les utiliserez aux étapes suivantes.

Tout d’abord, accordez l’accès au conteneur. Pour lire et écrire des données d’événement, le moteur de base de données nécessite un accès spécifique au conteneur. Vous pouvez accorder cet accès de deux façons, en fonction de votre choix de type d’authentification :

  • Si vous utilisez l’identité managée avec l’authentification Microsoft Entra, affectez le rôle RBAC Contributeur aux données blob du stockage pour le conteneur à l’identité managée du serveur logique Azure SQL ou de l’instance managée d’Azure SQL.

  • Si vous utilisez l’authentification basée sur un secret, créez un jeton SAS pour le conteneur.

    Pour utiliser ce type d’authentification, l’option Autoriser l’accès à la clé de compte de stockage doit être activée. Pour en savoir plus, consultez Empêcher l’autorisation avec clé partagée pour un compte de stockage Azure.

Octroyer l’accès à l’aide de l’identité managée

  1. Dans le portail Azure, accédez à la page Identité de votre serveur logique Azure SQL ou de votre instance gérée d’Azure SQL, puis vérifiez qu’une identité managée est affectée. Pour en savoir plus, consultez Identités managées dans Microsoft Entra pour Azure SQL.

  2. Dans le portail Azure, accédez au conteneur de stockage dans lequel vous souhaitez stocker les données d’événement. Sur la page Contrôle d’accès (IAM), cliquez sur Ajouter pour affecter le rôle RBAC Contributeur aux données blob de stockage à l’identité managée du serveur logique ou de l’instance managée d’SQL.

    Si l’identité managée affectée par le système du serveur logique ou de l’instance managée d’SQL est activée, affectez le rôle à cette identité. Si l’identité affectée par le système est désactivée, mais qu’une ou plusieurs identités sont affectées par l’utilisateur, affectez le rôle à l’identité affectée par l’utilisateur désignée comme identité principale.

    Pour en savoir plus, consultez Attribuer un rôle Azure pour l’accès aux données d’objet blob.

  3. Créez des informations d’identification pour indiquer au moteur de base de données de s’authentifier auprès de Stockage Azure à l’aide de l’identité managée pour une URL de conteneur spécifique.

    Dans Azure SQL Database et SQL Database dans Microsoft Fabric, créez des informations d’identification au niveau de la base de données. À l’aide d’un outil client tel que SSMS, ouvrez une nouvelle fenêtre de requête, connectez-vous à la base de données où vous créez la session d’événements et collez le lot T-SQL suivant. Vérifiez que vous êtes connecté à votre base de données utilisateur et non à la base de données master.

    Note

    L’exécution du lot T-SQL suivant nécessite l’autorisation CONTROL de base de données. Par défaut, l’autorisation est détenue par le propriétaire de la base de données (dbo), par les membres du db_owner rôle de base de données et par l’administrateur du serveur logique.

    /*
    (Re-)create a database scoped credential if needed.
    */
    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 name of the credential must match the URL of the blob container.
    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';
    

Avant d’exécuter ce lot, apportez la modification suivante :

  • Dans les trois occurrences de https://<storage-account-name>.blob.core.windows.net/<container-name>, remplacez <storage-account-name> par le nom de votre compte de stockage, puis <container-name> par le nom de votre conteneur.

Accorder l’accès à l’aide d’un jeton SAS

  1. Dans le portail Azure, accédez au compte de stockage et au conteneur que vous avez créés. Sélectionnez le conteneur, puis accédez à Paramètres > Jetons d’accès partagé.

    Le jeton SAS doit répondre aux exigences suivantes :

    • Autorisations définies sur Read, Write, Delete, List.
    • L’heure de début et l’heure d’expiration doivent englober la durée de vie de la session d’événement. Le jeton SAS que vous créez fonctionne uniquement dans cet intervalle de temps.
    • N’avoir aucune restriction des adresses IP.

    Cliquez sur le bouton Générer une URL et un jeton SAS. Le jeton SAS se trouve dans la zone de Jeton SAS d’objet blob. Vous pouvez le copier pour l’utiliser à l’étape suivante.

    Important

    Le jeton SAS fournit un accès en lecture et en écriture à ce conteneur. Traitez-le comme vous traitez un mot de passe ou tout autre secret.

    Capture d’écran de l’écran Jetons d’accès partagé pour un conteneur stockage Azure, avec un jeton SAP généré pour un exemple de conteneur.

  2. Créez des informations d’identification pour stocker le jeton SAS.

    Stockez le jeton SAS dans des informations d’identification incluses dans l’étendue de la base de données. À l’aide d’un outil client tel que SSMS, ouvrez une nouvelle fenêtre de requête, connectez-vous à la base de données où vous créez la session d’événements et collez le lot T-SQL suivant. Vérifiez que vous êtes connecté à votre base de données utilisateur et non à la base de données master.

    Note

    L’exécution du lot T-SQL suivant nécessite l’autorisation CONTROL de base de données. Par défaut, l’autorisation est détenue par le propriétaire de la base de données (dbo), par les membres du db_owner rôle de base de données et par l’administrateur du serveur logique.

    /*
    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 if needed.
    */
    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 name of the credential must match the URL of the blob container.
    The secret is the SAS token for the container.
    */
    CREATE DATABASE SCOPED CREDENTIAL
        [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<sas-token>';
    

    Avant d’exécuter ce lot, apportez les modifications suivantes :

    • Dans les trois occurrences de https://<storage-account-name>.blob.core.windows.net/<container-name>, remplacez <storage-account-name> par le nom de votre compte de stockage, puis <container-name> par le nom de votre conteneur.
    • Dans la clause SECRET, remplacez <sas-token> par le jeton SAS que vous avez copié à l’étape précédente.

Créer, démarrer et arrêter une session d’événement

Une fois les informations d’identification créées, vous pouvez créer la session d’événement. Contrairement à la création des informations d’identification, la création d’une session d’événement ne nécessite pas l’autorisation CONTROL. Une fois les informations d’identification créées, vous pouvez créer des sessions d’événement même si vous disposez d’autorisations plus restreintes. Consultez Autorisations pour connaître les autorisations spécifiques nécessaires.

  1. Dans SQL Server Management Studio (SSMS), connectez-vous au serveur logique Azure SQL Database.

  2. Développez le nœud Événements étendus sous le dossier Gestion .

  3. Cliquez avec le bouton droit sur le dossier Sessions , puis sélectionnez Nouvelle session....

  4. Dans la page Général , entrez un nom pour la session, qui correspond example-session à l’exemple de code suivant.

  5. Sur la page Événements, sélectionnez un ou plusieurs événements à ajouter à la session. Dans cet exemple, nous avons sélectionné l’événement sql_batch_starting.

  6. Dans la page Stockage des données , sélectionnez event_file le type cible.

    • Pour un fichier d’événements local, sélectionnez la cible du fichier local.
    • Pour un fichier blob d'événements stocké dans Azure Storage, collez l'URL du conteneur de stockage dans la zone URL de stockage. Tapez une barre oblique (/) à la fin de cette URL, suivie du nom du fichier (de l’objet blob). Par exemple : https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Capture d’écran de la boîte de dialogue Nouvelle session SSMS montrant la page de sélection d’événements avec l’événement sql_batch_starting sélectionné.

  7. Sur la page Stockage de données, sélectionnez event_file comme type de cible, puis collez l’URL du conteneur de stockage dans la zone URL de stockage. Tapez une barre oblique (/) à la fin de cette URL, suivie du nom du fichier (de l’objet blob). Dans notre exemple, le nom de l’objet blob est example-session.xel et l’URL entière est https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Note

    Pour SQL Managed Instance, au lieu de coller l’URL du conteneur de stockage sur la page Stockage des données, cliquez sur le bouton Script pour créer un script T-SQL de la session. Spécifiez l’URL du conteneur comme valeur de l’argument filename, comme dans l’exemple SQL Managed Instance ci-dessous, puis exécutez le script pour créer la session.

    Capture d’écran de la boîte de dialogue Nouvelle session SSMS montrant la page de sélection de stockage de données avec une cible event_file sélectionnée et une URL de stockage entrée.

  8. Maintenant que la session est configurée, vous pouvez cliquer sur le bouton Script pour créer un script T-SQL de la session, afin de l’enregistrer pour une utilisation ultérieure. Voici le script de notre exemple de session :

    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
    

  1. Cliquez sur OK pour créer la session.

  2. Dans l’Explorateur d’objets, développez le dossier Sessions pour afficher la session d’événement que vous avez créée. Par défaut, la session n’est pas démarrée lors de sa création. Pour démarrer la session, cliquez avec le bouton droit sur le nom de la session, puis sélectionnez Démarrer la session. Vous pouvez l’arrêter ultérieurement en sélectionnant de la même façon Arrêter la session, une fois la session en cours d’exécution.

À mesure que les lots T-SQL sont exécutés, la session écrit des événements dans l’objet example-session.xel blob dans le conteneur de stockage.

Pour arrêter la session, cliquez dessus avec le bouton droit dans l’Explorateur d’objets, puis sélectionnez Arrêter la session.

Résoudre les problèmes de sessions d'événements avec une cible event_file dans Azure Storage

La liste suivante contient des erreurs que vous pouvez rencontrer lors du démarrage d’une session d’événements étendue qui utilise stockage Azure, avec les explications possibles de l’erreur.

  • Le système d’exploitation a retourné l’erreur 5 : « L’accès est refusé ».
    • Si vous utilisez l’authentification d’identité managée :
      • L’identité managée utilisée par le moteur de base de données n’a pas l’attribution de rôle RBAC requise. Pour en savoir plus, consultez Accorder l’accès à l’aide de l’identité managée.
      • Le pare-feu du compte de stockage est activé et une exception permettant d’autoriser les services Azure approuvés à accéder au compte de stockage est également activée, mais une Microsoft.Sql/servers instance de ressource pour le serveur logique n’a pas été ajoutée à la liste des instances de ressources auxquelles l’accès est accordé. Pour en savoir plus, consultez Accorder l’accès à partir d’instances de ressources Azure.
      • Si vous utilisez un périmètre de sécurité réseau en mode appliqué, la base de données et le compte de stockage ne se trouvent pas dans le même périmètre.
    • Si vous utilisez l’authentification par jeton SAS :
      • Le pare-feu du compte de stockage est activé. Cela n’est pas pris en charge pour les sessions d’événements qui utilisent l’authentification par jeton SAP.
      • Le jeton SAP n’a pas d’autorisations suffisantes ou a expiré. Pour en savoir plus, consultez Accorder l’accès à l’aide d’un jeton SAS.
      • Si vous utilisez un périmètre de sécurité réseau en mode appliqué, les règles d’accès pour autoriser les communications sortantes illimitées de la base de données et les communications entrantes illimitées vers le compte de stockage ne sont pas en place.
  • Le système d’exploitation a retourné l’erreur 86 : « Le mot de passe réseau spécifié n’est pas correct. »
    • Il n’existe pas d’informations d’identification délimitées à la base de données (pour Azure SQL Database) ou d’informations d’identification au niveau du serveur (pour Azure SQL Managed Instance ou SQL Server) avec le nom correspondant à l’URL du conteneur d’objets blob. Pour plus d’informations, consultez les exemples permettant d’accorder l’accès à l’aide d’une identité managée ou d’accorder l’accès à l’aide d’un jeton SAP.
    • Le nom des informations d’identification se termine par une barre oblique (/). Le nom des informations d’identification doit se terminer par le nom du conteneur, sans inclure la barre oblique finale.
  • Le système d’exploitation a retourné l’erreur 3 : « Le système ne trouve pas le chemin spécifié. »
    • Le conteneur spécifié dans l’URL du conteneur d’objets blob n’existe pas.
  • Le système d’exploitation a retourné l’erreur 13 : « Les données ne sont pas valides . »
    • Il existe une stratégie d’immuabilité sur le conteneur blob. Le stockage immuable n’est pas pris en charge pour les sessions d’événement.
    • Le compte de stockage a l’espace de noms hiérarchique activé. Les comptes de stockage avec espace de noms hiérarchique activé ne sont pas pris en charge pour les sessions d’événements.

Afficher les données d’événement

Vous pouvez afficher les données d’événement dans l’IU de la visionneuse d’événements SQL Server Management Studio (SSMS), où vous pouvez analyser les données que vous avez capturées à l’aide de filtres et d’agrégations. Pour plus d’informations sur l’utilisation de l’observateur d’événements dans SSMS, consultez Afficher les données d’événements dans SQL Server Management Studio.

Afficher les données d’événement à l’aide de T-SQL

La fonction sys.fn_xe_file_target_read_file() vous permet de lire les données de session d’événement à l’aide de T-SQL. Pour utiliser cette fonction dans une base de données ou une instance différente de celle où la session d'événements est créée, vous devez accorder l'accès au moteur de base de données dans le conteneur de stockage contenant les blobs de données d'événement. Consultez Accorder l’accès à l’aide d’une identité managée ou Accorder l’accès à l’aide d’un jeton SAS.

Pour obtenir une procédure pas à pas plus détaillée, consultez Créer une session d’événement dans SSMS.

Télécharger des fichiers xel depuis le stockage Azure

Tip

Si vous utilisez SSMS v19.2 ou version ultérieure, vous n’avez pas besoin de télécharger les fichiers xel comme décrit dans cette section. Dans ces versions, SSMS lit les xel fichiers de chaque session directement à partir du conteneur stockage Azure. Pour en savoir plus, consultez le blog Amélioration des événements étendus dans Azure SQL.

Téléchargez l’objet blob xel pour la session à partir du conteneur de stockage et enregistrez-le en tant que fichier local. Dans le portail Azure, recherchez le compte de stockage que vous avez utilisé, cliquez sur Conteneurs sous Stockage de données, puis sélectionnez le conteneur que vous avez créé pour votre session d’événement. L’objet blob de la session a le nom de session comme première partie de son nom, avec un suffixe numérique. Cliquez sur les points de suspension () pour afficher le menu contextuel de l’objet blob, puis sélectionnez Télécharger.

Vous pouvez installer Explorateur Stockage Azure pour télécharger plusieurs objets blob xel en une seule opération.

Une fois le fichier xel téléchargé, ouvrez-le dans SSMS. Dans le menu principal d’SSMS, accédez à Fichier et sélectionnez Ouvrir. Si vous disposez d’un seul fichier xel, sélectionnez Fichier… et accédez au fichier que vous avez téléchargé. Si vous disposez de plusieurs fichiers xel générés par la même session d’événement (appelés fichiers de substitution), vous pouvez les ouvrir dans la visionneuse d’événements à l’aide de la boîte de dialogue Fusionner les fichiers des événements étendus…