Partilhar via


Criar uma sessão de evento com um destino de arquivo de evento no Armazenamento do Azure

Aplica-se a:Banco de Dados SQL do AzureInstância Gerenciada SQL do Azurebanco de dados SQL no Fabric

As etapas de alto nível neste passo a passo são:

  1. Crie uma conta de Armazenamento do Azure ou encontre uma conta adequada existente para usar.
  2. Crie um contêiner nesta conta de armazenamento.
  3. Conceda ao Mecanismo de Banco de Dados o acesso necessário ao contêiner usando uma atribuição de função RBAC ou um token SAS.
  4. Crie uma credencial no banco de dados ou instância onde você cria a sessão de evento.
  5. Crie, inicie e use uma sessão de evento.

Criar uma conta de armazenamento e um contêiner

Para obter uma descrição detalhada de como criar uma conta de armazenamento no Armazenamento do Azure, consulte Criar uma conta de armazenamento. Você aprende a criar uma conta de armazenamento usando o portal do Azure, PowerShell, Azure SQL, um modelo ARM ou um modelo Bicep.

Use uma conta que:

  • É uma Standard general-purpose v2 conta.
  • Tem seu tipo de redundância correspondente à redundância do banco de dados SQL do Azure, pool elástico ou instância gerenciada onde as sessões de eventos são criadas.
  • Usa a Hotcamada de acesso blob.
  • Está na mesma região do Azure que o banco de dados SQL do Azure, pool elástico, capacidade do Fabric ou instância gerida SQL.
  • Não tem o namespace hierárquico habilitado.

Em seguida, crie um contêiner nessa conta de armazenamento usando o portal do Azure. Você também pode criar um contêiner usando o PowerShell ou usando a CLI do Azure.

Observe os nomes da conta de armazenamento e do contêiner que você criou. Você os usará nas etapas a seguir.

Primeiro, conceda acesso ao contêiner. Para ler e gravar dados de eventos, o Mecanismo de Banco de Dados requer acesso específico ao contêiner. Você pode conceder esse acesso de duas maneiras, dependendo da sua escolha de tipo de autenticação:

  • Se estiver usando a identidade gerenciada com a autenticação do Microsoft Entra, você atribuirá a função RBAC do Colaborador de Dados de Blob de Armazenamento para o contêiner à identidade gerenciada do servidor lógico SQL do Azure ou da instância gerenciada do SQL do Azure.

  • Se estiver usando a autenticação baseada em segredo, você criará um token SAS para o contêiner.

    Para usar esse tipo de autenticação, a opção Permitir acesso à chave da conta de armazenamento deve estar habilitada. Para obter mais informações, consulte Impedir autorização de chave compartilhada para uma conta de armazenamento do Azure.

Conceder acesso usando identidade gerenciada

  1. No portal do Azure, navegue até a página Identidade do seu servidor lógico SQL do Azure ou da instância gerenciada do SQL do Azure e verifique se uma identidade gerenciada foi atribuída. Para obter mais informações, consulte Identidades gerenciadas no Microsoft Entra para Azure SQL.

  2. No portal do Azure, navegue até o contêiner de armazenamento onde você deseja armazenar dados de eventos. Na página Controle de Acesso (IAM), selecione Adicionar para atribuir a função RBAC de Colaborador de Dados de Blob de Armazenamento à identidade gerenciada do servidor lógico ou da instância gerenciada pelo SQL.

    Se o servidor lógico ou a instância gerenciada SQL tiver sua identidade gerenciada atribuída ao sistema habilitada, atribua a função a essa identidade. Se a identidade atribuída ao sistema estiver desabilitada, mas houver uma ou mais identidades atribuídas ao usuário, atribua a função à identidade atribuída ao usuário designada como identidade principal.

    Para obter mais informações, veja Atribuir uma função do Azure para acesso aos dados de blobs.

  3. Crie uma credencial para instruir o Mecanismo de Banco de Dados a autenticar no Armazenamento do Azure usando a identidade gerenciada para uma URL de contêiner específica.

    No Banco de Dados SQL do Azure e no Banco de Dados SQL do Microsoft Fabric, crie uma credencial com escopo de banco de dados. Usando uma ferramenta de cliente como o SSMS, abra uma nova janela de consulta, conecte-se ao banco de dados onde você cria a sessão de eventos e cole o seguinte lote T-SQL. Verifique se você está conectado ao banco de dados de usuários e não ao master banco de dados.

    Note

    A execução do seguinte lote T-SQL requer a permissão do CONTROL banco de dados. Por padrão, a permissão é mantida pelo proprietário do banco de dados (dbo), pelos membros da db_owner função de banco de dados e pelo administrador do servidor lógico.

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

Antes de executar este lote, faça a seguinte alteração:

  • Em todas as três ocorrências do https://<storage-account-name>.blob.core.windows.net/<container-name>, substitua <storage-account-name> pelo nome da sua conta de armazenamento e substitua <container-name> pelo nome do seu contêiner.

Conceder acesso usando um token SAS

  1. No portal do Azure, navegue até a conta de armazenamento e o contêiner que você criou. Selecione o contêiner e navegue até Configurações > Tokens de acesso compartilhado.

    O token SAS deve satisfazer os seguintes requisitos:

    • Permissões definidas como Read, Write, , DeleteList.
    • A hora de início e a hora de expiração devem abranger o tempo de vida da sessão do evento. O token SAS criado só funciona dentro desse intervalo de tempo.
    • Não tem restrições de endereço IP.

    Selecione o botão Gerar token SAS e URL . O token SAS está na caixa de token SAS de Blob . Você pode copiá-lo para usar na próxima etapa.

    Important

    O token SAS fornece acesso de leitura e gravação a esse contêiner. Trate-o como trataria uma palavra-passe ou qualquer outro segredo.

    Captura de ecrã do ecrã Tokens de Acesso Partilhado para um contentor de Armazenamento do Azure, com um token SAS gerado para um contentor de exemplo.

  2. Crie uma credencial para armazenar o token SAS.

    Armazene o token SAS numa credencial com escopo de base de dados. Usando uma ferramenta de cliente como o SSMS, abra uma nova janela de consulta, conecte-se ao banco de dados onde você cria a sessão de eventos e cole o seguinte lote T-SQL. Verifique se você está conectado ao banco de dados de usuários e não ao master banco de dados.

    Note

    A execução do seguinte lote T-SQL requer a permissão do CONTROL banco de dados. Por padrão, a permissão é mantida pelo proprietário do banco de dados (dbo), pelos membros da db_owner função de banco de dados e pelo administrador do 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 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>';
    

    Antes de executar este lote, faça as seguintes alterações:

    • Em todas as três ocorrências do https://<storage-account-name>.blob.core.windows.net/<container-name>, substitua <storage-account-name> pelo nome da sua conta de armazenamento e substitua <container-name> pelo nome do seu contêiner.
    • Na cláusula SECRET, substitua <sas-token> pelo token SAS copiado na etapa anterior.

Criar, iniciar e parar uma sessão de evento

Depois que a credencial for criada, você poderá criar a sessão do evento. Ao contrário da criação da credencial, a criação de uma sessão de evento não requer a CONTROL permissão. Depois que a credencial for criada, você poderá criar sessões de eventos mesmo que tenha permissões mais restritas. Consulte Permissões para obter as permissões específicas necessárias.

  1. No SQL Server Management Studio (SSMS), conecte-se ao servidor lógico do Banco de Dados SQL do Azure.

  2. Expanda o nó Eventos Estendidos na pasta Gestão.

  3. Clique com o botão direito do mouse na pasta Sessões e selecione Nova sessão....

  4. Na página Geral , insira um nome para a sessão, que será example-session para o exemplo de código a seguir.

  5. Na página Eventos , selecione um ou mais eventos para adicionar à sessão. Neste exemplo, selecionamos o sql_batch_starting evento.

  6. Na página Armazenamento de Dados , selecione event_file como o tipo de destino.

    • Para um arquivo de evento local, selecione o destino do arquivo local.
    • Para um blob de arquivo de evento armazenado no Armazenamento do Azure, cole a URL do contêiner de armazenamento na caixa URL de Armazenamento . Digite uma barra para a frente (/) no final da URL, seguida pelo nome do ficheiro (blob). Por exemplo, https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Captura de ecrã da caixa de diálogo Nova Sessão do SSMS mostrando a página de seleção de eventos com o evento sql_batch_starting selecionado.

  7. Na página Armazenamento de Dados , selecione event_file como o tipo de destino e cole a URL do contêiner de armazenamento na caixa URL de Armazenamento . Digite uma barra para a frente (/) no final da URL, seguida pelo nome do ficheiro (blob). No nosso exemplo, o nome do blob é example-session.xel, e o URL inteiro é https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Note

    Para Instância Gerenciada SQL, em vez de colar a URL do contêiner de armazenamento na página Armazenamento de dados , use o botão Script para criar um script T-SQL da sessão. Especifique a URL do contêiner como o valor para o filename argumento, semelhante ao exemplo de Instância Gerenciada SQL abaixo, e execute o script para criar a sessão.

    Captura de ecrã da caixa de diálogo de Nova Sessão SSMS a mostrar a página de seleção de armazenamento de dados com um destino event_file selecionado e um URL de armazenamento inserido.

  8. Agora que a sessão está configurada, você pode selecionar o botão Script para criar um script T-SQL da sessão, para salvá-lo para mais tarde. Aqui está o script para nossa sessão de exemplo:

    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. Selecione OK para criar a sessão.

  2. No Pesquisador de Objetos, expanda a pasta Sessões para ver a sessão de evento que você criou. Por padrão, a sessão não é iniciada quando é criada. Para iniciar a sessão, clique com o botão direito do rato no nome da sessão e selecione Iniciar sessão. Mais tarde, você pode pará-lo selecionando de forma semelhante Parar sessão, uma vez que a sessão esteja em execução.

À medida que os lotes T-SQL são executados, a sessão grava eventos no example-session.xel blob no contêiner de armazenamento.

Para interromper a sessão, clique com o botão direito do mouse nela no Pesquisador de Objetos e selecione Parar Sessão.

Solucionar problemas de sessões de eventos com um destino event_file no Armazenamento do Azure

A lista a seguir contém erros que você pode encontrar ao iniciar uma sessão de evento estendida que usa o Armazenamento do Azure, com as possíveis explicações para o erro.

  • O sistema operacional retornou o erro 5: 'Acesso negado'.
    • Se estiver usando a autenticação de identidade gerenciada:
      • A identidade gerenciada usada pelo mecanismo de banco de dados não tem a atribuição de função RBAC necessária. Para obter mais informações, consulte Conceder acesso usando identidade gerenciada.
      • O firewall da conta de armazenamento está habilitado e uma exceção para permitir que serviços confiáveis do Azure acessem a conta de armazenamento também está habilitada, mas uma Microsoft.Sql/servers instância de recurso para o servidor lógico não foi adicionada à lista de instâncias de recursos às quais é concedido acesso. Para obter mais informações, consulte Conceder acesso a partir de instâncias de recursos do Azure.
      • Se estiver usando um perímetro de segurança de rede com modo imposto, o banco de dados e a conta de armazenamento não estarão no mesmo perímetro.
    • Se estiver usando a autenticação de token SAS:
      • O firewall da conta de armazenamento está habilitado. Isso não é suportado para sessões de eventos que usam autenticação de token SAS.
      • O token SAS não tem permissões suficientes ou expirou. Para obter mais informações, consulte Conceder acesso usando um token SAS.
      • Se estiver usando um perímetro de segurança de rede com modo imposto, as regras de acesso para permitir a comunicação de saída irrestrita do banco de dados e a comunicação de entrada irrestrita para a conta de armazenamento não estarão em vigor.
  • O sistema operacional retornou o erro 86: 'A senha de rede especificada não está correta'.
    • Não há nenhuma credencial com escopo de banco de dados (para o Banco de Dados SQL do Azure) ou credencial com escopo de servidor (para Instância Gerenciada SQL do Azure ou SQL Server) com o nome correspondente à URL do contêiner de blob. Para obter mais informações, consulte os exemplos de Conceder acesso usando identidade gerenciada ou Conceder acesso usando um token SAS.
    • O nome da credencial termina com uma barra (/). O nome da credencial deve terminar com o nome do contentor, sem incluir a barra final.
  • O sistema operacional retornou o erro 3: "O sistema não consegue encontrar o caminho especificado."
    • O contêiner especificado na URL do contêiner de blob não existe.
  • O sistema operacional retornou o erro 13: 'Os dados são inválidos'.
    • Há uma política de imutabilidade no contêiner de blob. O armazenamento imutável não é suportado para sessões de eventos.
    • A conta de armazenamento tem o namespace hierárquico habilitado. Contas de armazenamento com namespace hierárquico habilitado não são suportadas para sessões de eventos.

Ver dados do evento

Você pode exibir dados de eventos na interface do usuário do visualizador de eventos do SQL Server Management Studio (SSMS), onde pode usar filtros e agregações para analisar os dados capturados. Para obter mais informações sobre como usar o visualizador de eventos no SSMS, consulte Exibir dados de eventos no SQL Server Management Studio.

Exibir dados de eventos usando T-SQL

Para ler dados de sessão de eventos usando T-SQL, use a função sys.fn_xe_file_target_read_file( ). Para usar essa função em um banco de dados ou instância diferente daquele em que a sessão de evento é criada, você precisa conceder acesso no contêiner ao Mecanismo de Banco de Dados no contêiner de armazenamento com os blobs de dados de evento. Consulte Conceder acesso usando identidade gerenciada ou Conceder acesso usando um token SAS.

Para obter um passo a passo mais detalhado, consulte Criar uma sessão de evento no SSMS.

Baixar arquivos xel do armazenamento do Azure

Tip

Se você usar o SSMS v19.2 ou posterior, não precisará baixar xel arquivos conforme descrito nesta seção. Nessas versões, o SSMS lê os xel arquivos de cada sessão diretamente do contêiner de Armazenamento do Azure. Para obter mais informações, consulte o blog Improving Extended Events in Azure SQL .

Baixe o xel blob da sessão do contêiner de armazenamento e salve-o como um arquivo local. No portal do Azure, localize a conta de armazenamento que você usou, selecione Contêineres em Armazenamento de dados e selecione o contêiner que você criou para sua sessão de evento. O blob da sessão tem o nome da sessão como a primeira parte de seu nome, com um sufixo numérico. Selecione as reticências (...) para mostrar o menu de contexto do blob e selecione Download.

Você pode instalar o Gerenciador de Armazenamento do Azure para baixar vários xel blobs em uma operação.

Depois que o xel arquivo for baixado, abra-o no SSMS. No menu principal do SSMS, vá para Arquivo e selecione Abrir. Se tiveres um único xel arquivo, seleciona Arquivo... e navega até ao arquivo que descarregaste. Se você tiver vários xel arquivos gerados pela mesma sessão de evento (conhecidos como arquivos de sobreposição), poderá usar a caixa de diálogo Mesclar arquivos de eventos estendidos... para abrir todos eles no visualizador de eventos.