Delen via


Een gebeurtenissessie maken met een event_file-doel in Azure Storage

van toepassing op:Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Fabric

De stappen op hoog niveau in deze handleiding zijn:

  1. Maak een Azure Storage-account of zoek een bestaand geschikt account dat u wilt gebruiken.
  2. Maak een container in dit opslagaccount.
  3. Verleen de vereiste toegang aan de database-engine tot de container met behulp van een RBAC-roltoewijzing of een SAS-token.
  4. Maak een identificatie in de database of database-instantie waar u de gebeurtenissessie maakt.
  5. Een gebeurtenissessie maken, starten en gebruiken.

Een opslagaccount en container maken

Zie Een opslagaccount maken voor een gedetailleerde beschrijving van het maken van een opslagaccount in Azure Storage. U leert hoe u een opslagaccount maakt met behulp van Azure Portal, PowerShell, Azure SQL, een ARM-sjabloon of een Bicep-sjabloon.

Gebruik een account dat:

Maak vervolgens een container in dit opslagaccount met behulp van Azure Portal. U kunt ook een container maken met Behulp van PowerShell of Azure CLI.

Noteer de namen van het opslagaccount en de container die u hebt gemaakt. U gebruikt deze in de volgende stappen.

Verleen eerst toegang tot de container. Voor het lezen en schrijven van gebeurtenisgegevens is voor de database-engine specifieke toegang tot de container vereist. U kunt deze toegang op twee manieren verlenen, afhankelijk van uw keuze van het verificatietype:

  • Als u beheerde identiteit gebruikt met Microsoft Entra-authenticatie, wijst u de rol Storage Blob Data Bijdrager voor de container toe aan de beheerde identiteit van de logische Azure SQL-server of het beheerde exemplaar van Azure SQL.

  • Als u verificatie op basis van geheim gebruikt, maakt u een SAS-token voor de container.

    Als u dit verificatietype wilt gebruiken, moet de optie Toegang tot opslagaccountsleutels toestaan zijn ingeschakeld. Zie Autorisatie van gedeelde sleutels voorkomen voor een Azure Storage-account voor meer informatie.

Toegang verlenen met beheerde identiteit

  1. Ga in Azure Portal naar de pagina Identiteit van uw logische Azure SQL-server of azure SQL Managed Instance en zorg ervoor dat er een beheerde identiteit is toegewezen. Zie Beheerde identiteiten in Microsoft Entra voor Azure SQL voor meer informatie.

  2. Navigeer in Azure Portal naar de opslagcontainer waar u gebeurtenisgegevens wilt opslaan. Op de pagina Toegangsbeheer (IAM) selecteert u Toevoegen om de RBAC-rol Inzender voor opslagblobgegevens toe te wijzen aan de beheerde identiteit van de logische server of het beheerde SQL-exemplaar.

    Als aan de logische server of het beheerde SQL-exemplaar de door het systeem toegewezen beheerde identiteit is ingeschakeld, wijst u de rol toe aan die identiteit. Als de door het systeem toegewezen identiteit is uitgeschakeld, maar er een of meer door de gebruiker toegewezen identiteiten zijn, wijst u de rol toe aan de door de gebruiker toegewezen identiteit die is aangewezen als de primaire identiteit.

    Zie Een Azure-rol toewijzen voor toegang tot blobgegevensvoor meer informatie.

  3. Maak een referentiesleutel om de Database Engine op te dragen authenticatie uit te voeren bij Azure Storage met behulp van een beheerde identiteit voor een specifieke container-URL.

    Maak in Azure SQL Database en SQL Database in Microsoft Fabric een referentie binnen het databasebereik. Open met behulp van een clienthulpprogramma, zoals SSMS, een nieuw queryvenster, maak verbinding met de database waar u de gebeurtenissessie maakt en plak de volgende T-SQL-batch. Zorg ervoor dat u bent verbonden met uw gebruikersdatabase en niet met de master database.

    Note

    Voor het uitvoeren van de volgende T-SQL-batch is de CONTROL databasemachtiging vereist. De machtiging wordt standaard bewaard door de eigenaar van de database (dbo), door de leden van de db_owner databaserol en door de beheerder van de logische server.

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

Voordat u deze batch uitvoert, moet u de volgende wijziging aanbrengen:

  • Vervang in alle drie gevallen https://<storage-account-name>.blob.core.windows.net/<container-name> door de naam van uw opslagaccount en <storage-account-name> door de naam van uw container.

Toegang verlenen met behulp van een SAS-token

  1. Navigeer in Azure Portal naar het opslagaccount en de container die u hebt gemaakt. Selecteer de container en navigeer naar Instellingen voor gedeelde toegangstokens>.

    Het SAS-token moet voldoen aan de volgende vereisten:

    • Machtigingen ingesteld op Read, Write, Delete, . List
    • De begin - en verlooptijd moeten de levensduur van de gebeurtenissessie omvatten. Het SAS-token dat u maakt, werkt alleen binnen dit tijdsinterval.
    • Geen IP-adresbeperkingen.

    Selecteer de knop SAS-token en URL genereren. Het SAS-token bevindt zich in het vak Blob SAS-token . U kunt deze kopiëren voor gebruik in de volgende stap.

    Important

    Het SAS-token biedt lees- en schrijftoegang tot deze container. Behandel het zoals u een wachtwoord of een ander geheim zou behandelen.

    Schermopname van het scherm Gedeelde toegangstokens voor een Azure Storage-container, met een gegenereerd SAS-token voor een voorbeeldcontainer.

  2. Maak een referentie om het SAS-token op te slaan.

    Sla het SAS-token op in een databasereferentie. Open met behulp van een clienthulpprogramma, zoals SSMS, een nieuw queryvenster, maak verbinding met de database waar u de gebeurtenissessie maakt en plak de volgende T-SQL-batch. Zorg ervoor dat u bent verbonden met uw gebruikersdatabase en niet met de master database.

    Note

    Voor het uitvoeren van de volgende T-SQL-batch is de CONTROL databasemachtiging vereist. De machtiging wordt standaard bewaard door de eigenaar van de database (dbo), door de leden van de db_owner databaserol en door de beheerder van de logische server.

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

    Voordat u deze batch uitvoert, moet u de volgende wijzigingen aanbrengen:

    • Vervang in alle drie gevallen https://<storage-account-name>.blob.core.windows.net/<container-name> door de naam van uw opslagaccount en <storage-account-name> door de naam van uw container.
    • Vervang in de SECRET clausule <sas-token> door het SAS-token dat u in de vorige stap hebt gekopieerd.

Een gebeurtenissessie maken, starten en stoppen

Zodra de referentiegegevens zijn gemaakt, kunt u de evenementensessie maken. In tegenstelling tot het aanmaken van de referentie, is voor het aanmaken van een gebeurtenissessie niet de CONTROL machtiging vereist. Zodra de referentiegegevens zijn aangemaakt, kunt u gebeurtenissessies maken, zelfs als u beperktere machtigingen hebt. Zie Machtigingen voor de specifieke machtigingen die nodig zijn.

  1. Maak in SQL Server Management Studio (SSMS) verbinding met de logische Server van Azure SQL Database.

  2. Vouw het knooppunt Uitgebreide gebeurtenissen uit onder de map Beheer .

  3. Klik met de rechtermuisknop op de map Sessies en selecteer Nieuwe sessie....

  4. Voer op de pagina Algemeen een naam in voor de sessie. Dit is example-session voor het volgende codevoorbeeld.

  5. Selecteer op de pagina Gebeurtenissen een of meer gebeurtenissen die u aan de sessie wilt toevoegen. In dit voorbeeld hebben we de sql_batch_starting gebeurtenis geselecteerd.

  6. Selecteer op de pagina Gegevensopslag de optie event_file als het doeltype.

    • Selecteer het lokale bestandsdoel voor een lokaal gebeurtenisbestand.
    • Plak de URL van de opslagcontainer in het vak Storage-URL voor een gebeurtenisbestand dat is opgeslagen in Azure Storage. Typ een voorwaartse slash (/) aan het einde van de URL, gevolgd door de bestandsnaam (blob). Bijvoorbeeld: https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Schermopname van het SSMS dialoogvenster Nieuwe sessie dat de gebeurtenisselectiepagina toont met de sql_batch_starting gebeurtenis die is geselecteerd.

  7. Selecteer op de pagina Gegevensopslag de optie event_file als doeltype en plak de URL van de opslagcontainer in het vak Opslag-URL . Typ een voorwaartse slash (/) aan het einde van de URL, gevolgd door de bestandsnaam (blob). In ons voorbeeld is example-session.xelde blobnaam en de volledige URL https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Note

    Gebruik voor een SQL Managed Instance in plaats van de URL van de opslagcontainer te plakken op de Gegevensopslag-pagina, de Script-knop om een T-SQL-script van de sessie te maken. Geef de container-URL op als de waarde voor het filename argument, vergelijkbaar met het onderstaande SQL Managed Instance-voorbeeld en voer het script uit om de sessie te maken.

    Schermopname van het dialoogvenster Nieuwe sessie-SSMS met de pagina voor het selecteren van gegevensopslag met een event_file doel geselecteerd en een ingevoerde opslag-URL.

  8. Nu de sessie is geconfigureerd, kunt u de knop Script selecteren om een T-SQL-script van de sessie te maken, om deze later op te slaan. Dit is het script voor onze voorbeeldsessie:

    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. Selecteer OK om de sessie te maken.

  2. Vouw in Objectverkenner de map Sessies uit om de gebeurtenissessie te zien die u hebt gemaakt. De sessie wordt standaard niet gestart wanneer deze wordt gemaakt. Als u de sessie wilt starten, klikt u met de rechtermuisknop op de sessienaam en selecteert u Sessie starten. U kunt deze later stoppen door op dezelfde manier stopsessie te selecteren zodra de sessie wordt uitgevoerd.

Wanneer T-SQL-batches worden uitgevoerd, schrijft de sessie gebeurtenissen naar de example-session.xel blob in de opslagcontainer.

Als u de sessie wilt stoppen, klikt u er met de rechtermuisknop op in Objectverkenner en selecteert u Sessie stoppen.

Problemen met gebeurtenissessies oplossen met een 'event_file' target in Azure Storage

De volgende lijst bevat fouten die kunnen optreden bij het starten van een uitgebreide gebeurtenissessie die gebruikmaakt van Azure Storage, met de mogelijke verklaringen voor de fout.

  • Het besturingssysteem heeft fout 5 geretourneerd: 'Toegang is geweigerd.'
    • Als u beheerde identiteitverificatie gebruikt:
      • De beheerde identiteit die door de database-engine wordt gebruikt, beschikt niet over de vereiste RBAC-roltoewijzing. Zie Toegang verlenen met behulp van een beheerde identiteit voor meer informatie.
      • De firewall van het opslagaccount is ingeschakeld en er is een uitzondering opgetreden om vertrouwde Azure-services toegang te geven tot het opslagaccount, maar er Microsoft.Sql/servers is geen resource-exemplaar voor de logische server toegevoegd aan de lijst met resource-exemplaren die toegang krijgen. Voor meer informatie, zie Toegang verlenen vanuit Azure-resource-exemplaren.
      • Als u een netwerkbeveiligingsperimeter gebruikt met de afgedwongen modus, bevinden de database en het opslagaccount zich niet in dezelfde perimeter.
    • Als u SAS-tokenverificatie gebruikt:
      • De firewall van het opslagaccount is ingeschakeld. Dit wordt niet ondersteund voor gebeurtenissessies die gebruikmaken van SAS-tokenverificatie.
      • Het SAS-token beschikt niet over voldoende machtigingen of is verlopen. Zie Toegang verlenen met behulp van een SAS-token voor meer informatie.
      • Als u een netwerkbeveiligingsperimeter gebruikt met de afgedwongen modus, zijn er geen toegangsregels voor onbeperkte uitgaande communicatie vanuit de database en onbeperkte binnenkomende communicatie naar het opslagaccount.
  • Het besturingssysteem heeft fout 86 geretourneerd: 'Het opgegeven netwerkwachtwoord is niet juist.'
  • Het besturingssysteem heeft fout 3 geretourneerd: 'Het systeem kan het opgegeven pad niet vinden.'
    • De container die is opgegeven in de URL van de blobcontainer bestaat niet.
  • Het besturingssysteem heeft fout 13 geretourneerd: 'De gegevens zijn ongeldig.'
    • Er is een onveranderbaarheidsbeleid voor de blobcontainer. Onveranderbare opslag wordt niet ondersteund voor gebeurtenissessies.
    • Voor het opslagaccount is de hiërarchische naamruimte ingeschakeld. Opslagaccounts waarvoor hiërarchische naamruimte is ingeschakeld, worden niet ondersteund voor gebeurtenissessies.

Gebeurtenisgegevens weergeven

U kunt gebeurtenisgegevens bekijken in de gebruikersinterface van sql Server Management Studio (SSMS), waar u filters en aggregaties kunt gebruiken om de gegevens te analyseren die u hebt vastgelegd. Zie Gebeurtenisgegevens weergeven in SQL Server Management Studio voor meer informatie over het gebruik van de gebeurtenisviewer in SSMS.

Gebeurtenisgegevens weergeven met T-SQL

Als u gebeurtenissessiegegevens wilt lezen met behulp van T-SQL, gebruikt u de functie sys.fn_xe_file_target_read_file(). Als u deze functie wilt gebruiken in een database of exemplaar dat verschilt van die waarin de gebeurtenissessie wordt gemaakt, moet u toegang verlenen aan de container aan de database-engine in de opslagcontainer met de gebeurtenisgegevens-blobs. Zie Toegang verlenen met beheerde identiteit of toegang verlenen met behulp van een SAS-token.

Zie Een gebeurtenissessie maken in SSMS voor een gedetailleerdere procedure.

Xel-bestanden downloaden uit Azure Storage

Tip

Als u SSMS v19.2 of hoger gebruikt, hoeft u geen bestanden te downloaden xel zoals beschreven in deze sectie. In deze versies leest SSMS de xel bestanden voor elke sessie rechtstreeks vanuit de Azure Storage-container. Zie de blog Uitgebreide gebeurtenissen verbeteren in Azure SQL voor meer informatie.

Download de xel blob voor de sessie uit de opslagcontainer en sla deze op als een lokaal bestand. Zoek in Azure Portal het opslagaccount dat u hebt gebruikt, selecteer Containers onder Gegevensopslag en selecteer de container die u hebt gemaakt voor uw gebeurtenissessie. De blob voor de sessie heeft de sessienaam als het eerste deel van de naam, met een numeriek achtervoegsel. Selecteer het beletselteken (...) om het contextmenu voor de blob weer te geven en selecteer Downloaden.

U kunt Azure Storage Explorer installeren om meerdere xel blobs in één bewerking te downloaden.

Zodra het xel bestand is gedownload, opent u het in SSMS. Ga in het hoofdmenu van SSMS naar Bestand en selecteer Openen. Als u één xel bestand hebt, selecteert u Bestand... en bladert u naar het bestand dat u hebt gedownload. Als u meerdere xel bestanden hebt gegenereerd door dezelfde gebeurtenissessie (ook wel rollover-bestanden genoemd), kunt u het dialoogvenster Uitgebreide gebeurtenisbestanden samenvoegen gebruiken om ze allemaal in de logboeken te openen.