Compartilhar via


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

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

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

  1. Criar uma conta de Armazenamento do Azure ou localizar uma existente que seja adequada para usar.
  2. Criar um contêiner nessa conta de armazenamento.
  3. Conceder ao Mecanismo de Banco de Dados o acesso necessário ao contêiner usando uma atribuição de função RBAC (função de controle de acesso baseado em função) ou um token SAS.
  4. Crie uma credencial no banco de dados ou na instância em que você cria a sessão de evento.
  5. Criar, iniciar e usar uma sessão de evento.

Criar uma conta e um contêiner de armazenamento

Para obter uma descrição mais detalhada sobre a criação de uma conta de armazenamento do Azure, veja Criar uma conta de armazenamento. Você aprenderá a criar uma conta de armazenamento usando o portal do Azure, PowerShell, SQL do Azure, um modelo do ARM ou um modelo Bicep.

Use uma conta que:

Depois, 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 a CLI do Azure.

Anote 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 escolha do tipo de autenticação:

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

  • Se estiver usando a autenticação baseada em segredo, crie 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, veja Impedir a autorização de chave compartilhada para uma conta do Armazenamento do Microsoft Azure.

Conceder acesso usando a identidade gerenciada

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

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

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

    Para saber mais, consulte Atribuir uma função do Azure para acesso a dados de blob.

  3. Crie uma credencial para instruir o Mecanismo de Banco de Dados a se 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 no Microsoft Fabric, crie uma credencial no escopo do banco de dados. Usando uma ferramenta de cliente, como o SSMS, abra uma nova janela de consulta, conecte-se ao banco de dados em que você cria a sessão de eventos e cole o lote T-SQL a seguir. Verifique se você está conectado ao banco de dados de usuário, e não ao banco de dados master.

    Note

    A execução do lote T-SQL a seguir 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 função de banco de db_owner 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 esse lote, faça as seguintes alterações:

  • Nas três ocorrências de 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 contêiner que você criou. Selecione o contêiner e navegue até Configurações > Tokens de acesso compartilhado.

    O token SAS deve atender aos seguintes requisitos:

    • Permissões configuradas para Read, Write, Delete, List.
    • O tempo de Início e Expiração deve abranger o período de vida da sessão de eventos. O token SAS que você cria só funciona dentro desse intervalo de tempo.
    • Não ter restrições de endereço IP.

    Selecione o botão Gerar token SAS e URL. O token SAS está na caixa Token SAS do 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 você trataria uma senha ou qualquer outro segredo.

    Captura de tela da interface Tokens de Acesso Compartilhado SAS para um contêiner de Armazenamento do Azure, com um token SAS gerado para um contêiner de exemplo.

  2. Criar uma credencial para armazenar o token SAS.

    Armazene o token SAS em 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 em que você cria a sessão de eventos e cole o lote T-SQL a seguir. Verifique se você está conectado ao banco de dados de usuário, e não ao banco de dados master.

    Note

    A execução do lote T-SQL a seguir 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 função de banco de db_owner 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 esse lote, faça as seguintes alterações:

    • Nas três ocorrências de 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 de criar a credencial, é possível criar a sessão de eventos. Diferente da criação da credencial, a criação de uma sessão de eventos não exige a permissão CONTROL. Após a criação da credencial, você pode criar sessões de eventos mesmo se tiver permissões mais restritas. Consulte Permissões para obter as permissões específicas necessárias.

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

  2. Expanda a ramificação Eventos Estendidos na pasta Gerenciamento.

  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 evento sql_batch_starting.

  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 arquivos de eventos armazenado no Armazenamento do Azure, cole a URL do contêiner de armazenamento na caixa URL de Armazenamento . Digite uma barra (/) no final dessa URL, seguida pelo nome do arquivo (BLOb). Por exemplo, https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Captura de tela 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 (/) no final dessa URL, seguida pelo nome do arquivo (BLOb). Em nosso exemplo, o nome do BLOb é example-session.xel, e a URL inteira é https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

    Note

    Para Instância Gerenciada de 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 do filename argumento, similar ao exemplo de Instância Gerenciada de SQL abaixo, e execute o script para criar a sessão.

    Captura de tela da caixa de diálogo SSMS de Nova Sessão mostrando a página de seleção de armazenamento de dados com um destino event_file selecionado e uma URL de armazenamento inserida.

  8. Agora que a sessão está configurada, você pode escolher o botão Script para criar um script T-SQL da sessão e salvá-lo para mais tarde. Veja abaixo o script do nosso exemplo de sessão:

    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 mouse no nome da sessão e selecione Iniciar Sessão. Você pode interrompê-la mais tarde selecionando Parar sessão da mesma forma, depois que a sessão estiver 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 evento com alvo 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: "O acesso foi 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 a 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 que recebem 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 o modo imposto, o banco de dados e a conta de armazenamento não estão no mesmo perímetro.
    • Se estiver usando a autenticação de token SAS:
      • O firewall da conta de armazenamento está habilitado. Não há suporte para sessões de evento que usam a 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 o 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 estão em vigor.
  • O sistema operacional retornou o erro 86: "A senha de rede especificada não está correta.".
    • Não há nenhuma credencial no escopo do banco de dados (para o Banco de Dados SQL do Azure) ou credencial no escopo do servidor (para a Instância Gerenciada de SQL do Azure ou o SQL Server) com o nome correspondente à URL do contêiner de blob. Para obter mais informações, consulte os exemplos para conceder acesso usando a 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 contêiner sem incluir a barra final.
  • O sistema operacional retornou o erro 3: "O sistema não pode localizar 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. Não há suporte para armazenamento imutável para sessões de evento.
    • 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 evento.

Exibir dados do evento

Você pode exibir os dados de eventos na interface do usuário do visualizador de eventos do SQL Server Management Studio (SSMS), onde é possível 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 da sessão de evento com o 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 daquela 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 do 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 será necessário baixar os arquivos xel da maneira descrita nesta seção. Nessas versões, o SSMS lê os xel arquivos de cada sessão diretamente do contêiner do Armazenamento do Azure. Para obter mais informações, consulte o blog Melhorar eventos estendidos no SQL do Azure.

Baixe o BLOB xel da sessão do contêiner de armazenamento e salve-o como um arquivo local. No portal do Azure, localize a conta de armazenamento usada, selecione Contêineres em Armazenamento de dados e encontre o contêiner criado para sua sessão de evento. O BLOb da sessão tem o nome da sessão na primeira parte seguida por um sufixo numérico. Selecione as reticências (...) para mostrar o menu de contexto do BLOb e selecione Baixar.

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

Depois que o arquivo xel for baixado, abra-o no SSMS. No menu principal do SSMS, vá para Arquivo e selecione Abrir. Se você tiver um único arquivo xel, selecione Arquivo... e navegue até o arquivo que você baixou. Caso tenha vários arquivos xel gerados pela mesma sessão de evento (conhecidos como arquivos de substituição), você poderá usar a caixa de diálogo Mesclar Arquivos de Evento Estendido... para abrir todos eles no visualizador de eventos.