Ingerir dados com o sink serilog no Azure Data Explorer
Importante
Este conector pode ser utilizado na Análise em Tempo Real no Microsoft Fabric. Utilize as instruções neste artigo com as seguintes exceções:
- Se necessário, crie bases de dados com as instruções em Criar uma base de dados KQL.
- Se necessário, crie tabelas com as instruções em Criar uma tabela vazia.
- Obtenha URIs de consulta ou ingestão com as instruções em Copiar URI.
- Execute consultas num conjunto de consultas KQL.
O Serilog é uma arquitetura de registo popular para aplicações .NET. O Serilog permite que os programadores controlem que instruções de registo são saída com granularidade arbitrária com base no nome, nível de logger e padrão de mensagem do logger. O sink serilog, também conhecido como appender, para o Azure Data Explorer transmite os seus dados de registo para o Azure Data Explorer, onde pode analisar e visualizar os seus registos em tempo real.
Neste artigo, vai aprender a:
Para obter uma lista completa dos conectores de dados, veja Descrição geral dos conectores de dados.
Pré-requisitos
- SDK .NET 6.0 ou posterior
- Um cluster e uma base de dados do Azure Data Explorer
Configurar o ambiente
Nesta secção, irá preparar o seu ambiente para utilizar o sink serilog.
Instalar o pacote
Adicione o pacote Serilog.Sinks.AzureDataExplorer NuGet. Utilize o comando Install-Package especificando o nome do pacote NuGet.
Install-Package Serilog.Sinks.AzureDataExplorer
Criar um registo de aplicações Microsoft Entra
Microsoft Entra autenticação de aplicações é utilizada para aplicações que precisam de aceder ao Azure Data Explorer sem um utilizador presente. Para ingerir dados com o conector Serilog, tem de criar e registar um principal de serviço Microsoft Entra e, em seguida, autorizar este principal a ingerir dados numa base de dados do Azure Data Explorer.
- Com o cluster do Azure Data Explorer, siga os passos 1 a 7 em Criar um registo de aplicações Microsoft Entra no Azure Data Explorer.
- Guarde os seguintes valores para serem utilizados em passos posteriores:
- ID da Aplicação (cliente)
- ID do Diretório (inquilino)
- Valor da chave de segredo do cliente
Conceder as permissões da aplicação Microsoft Entra
No separador consulta da IU da Web, ligue-se ao cluster. Para obter mais informações sobre como ligar, veja Adicionar clusters.
Navegue para a base de dados na qual pretende ingerir dados.
Execute o seguinte comando de gestão, substituindo os marcadores de posição. Substitua DatabaseName pelo nome da base de dados de destino e ApplicationID pelo valor guardado anteriormente. Este comando concede à aplicação a função de ingestor de bases de dados . Para obter mais informações, veja Gerir funções de segurança de bases de dados.
.add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'Azure Data Explorer App Registration'
Nota
O último parâmetro é uma cadeia que aparece como notas quando consulta as funções associadas a uma base de dados. Para obter mais informações, veja Ver funções de segurança existentes.
Criar uma tabela e mapeamento de ingestão
Crie uma tabela de destino para os dados recebidos, mapeando as colunas de dados ingeridos para as colunas na tabela de destino. Nos passos seguintes, o esquema e o mapeamento da tabela correspondem aos dados enviados a partir da aplicação de exemplo.
No editor de consultas, execute o seguinte comando de criação de tabelas, substituindo o marcador de posição TableName pelo nome da tabela de destino:
.create table <TableName> (Timestamp: datetime, Level: string, Message: string, Exception: string, Properties: dynamic, Position: dynamic, Elapsed: int)
Execute o seguinte comando de mapeamento de ingestão, substituindo os marcadores de posição TableName pelo nome da tabela de destino e TableNameMapping pelo nome do mapeamento de ingestão:
.create table <TableName> ingestion csv mapping '<TableNameMapping>' '[{"Name":"Timestamp","DataType":"","Ordinal":"0","ConstValue":null},{"Name":"Level","DataType":"","Ordinal":"1","ConstValue":null},{"Name":"Message","DataType":"","Ordinal":"2","ConstValue":null},{"Name":"Exception","DataType":"","Ordinal":"3","ConstValue":null},{"Name":"Properties","DataType":"","Ordinal":"4","ConstValue":null},{"Name":"Position","DataType":"","Ordinal":"5","ConstValue":null},{"Name":"Elapsed","DataType":"","Ordinal":"6","ConstValue":null}]'
Adicionar o sink do Serilog à sua aplicação
Utilize os seguintes passos para:
- Adicionar o sink do Serilog à sua aplicação
- Configurar as variáveis utilizadas pelo sink
- Compilar e executar a aplicação
Adicione o seguinte código à sua aplicação:
using Serilog.Sinks.AzureDataExplorer;
Configure o sink serilog, substituindo os marcadores de posição com as informações na tabela que se segue:
var log = new LoggerConfiguration() .WriteTo.AzureDataExplorerSink(new AzureDataExplorerSinkOptions { IngestionEndpointUri = "<cluster>", DatabaseName = "<MyDatabase>", TableName = "<MyTable>", BufferBaseFileName = "<BufferBaseFileName>" }) .CreateLogger();
Variável Descrição IngestionEndPointUri O URI de ingestão do cluster no cluster> de formatoshttps://ingest-<.<region.kusto.windows.net>. DatabaseName O nome sensível às maiúsculas e minúsculas da base de dados de destino. TableName O nome sensível às maiúsculas e minúsculas de uma tabela de destino existente. Por exemplo, SerilogTest é o nome da tabela criada em Criar uma tabela e mapeamento de ingestão. AppId O ID de cliente da aplicação necessário para autenticação. Guardou este valor em Criar um registo da Aplicação Microsoft Entra. AppKey A chave de aplicação necessária para a autenticação. Guardou este valor em Criar um registo da Aplicação Microsoft Entra. Inquilino O ID do inquilino no qual a aplicação está registada. Guardou este valor em Criar um registo da Aplicação Microsoft Entra. BufferBaseFileName Nome de ficheiro base opcional para o ficheiro de memória intermédia. Defina este valor se exigir que os registos sejam duráveis face à perda, o que resulta em falhas de ligação ao cluster. Por exemplo, C:/Temp/Serilog
.Para obter mais opções, veja Opções de Sink.
Enviar dados para o Azure Data Explorer com o sink serilog. Por exemplo:
log.Verbose("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs); log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs); log.Warning("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs); log.Error(new Exception(), "Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs); log.Debug("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
Compile e execute a aplicação. Por exemplo, se estiver a utilizar o Visual Studio, prima F5.
Verifique se os dados estão no cluster. Na IU da Web, execute a seguinte consulta substituindo o marcador de posição pelo nome da tabela que utilizou anteriormente:
<TableName> | take 10
Execute a aplicação de exemplo
Utilize a aplicação geradora de registos de exemplo como exemplo que mostra como configurar e utilizar o sink serilog.
Clone o repositório git do sink serilog com o seguinte comando git:
git clone https://github.com/Azure/serilog-sinks-azuredataexplorer
Defina as seguintes variáveis ambientais para configurar o sink serilog:
Variável Descrição IngestionEndPointUri O URI de ingestão do cluster no cluster> de formatoshttps://ingest-<.<region.kusto.windows.net>. DatabaseName O nome sensível às maiúsculas e minúsculas da base de dados de destino. TableName O nome sensível às maiúsculas e minúsculas de uma tabela de destino existente. Por exemplo, SerilogTest é o nome da tabela criada em Criar uma tabela e mapeamento de ingestão. AppId ID de cliente da aplicação necessário para autenticação. Guardou este valor em Criar uma Microsoft Entra Registo de aplicações. AppKey Chave da aplicação necessária para a autenticação. Guardou este valor em Criar uma Microsoft Entra Registo de aplicações. Inquilino O ID do inquilino no qual a aplicação está registada. Guardou este valor em Criar uma Microsoft Entra Registo de aplicações. BufferBaseFileName O nome de ficheiro base do ficheiro de memória intermédia. Defina este valor se exigir que os registos sejam duráveis face a perdas resultantes de falhas de ligação ao cluster. Por exemplo, C:/Temp/Serilog
Pode definir as variáveis de ambiente manualmente ou com os seguintes comandos:
No terminal, navegue para a pasta raiz do repositório clonado e execute o seguinte comando .NET para criar a aplicação:
dotnet build src
No terminal, navegue para a pasta samples e execute o seguinte comando .NET para executar a aplicação:
dotnet build run
Na IU da Web, selecione a base de dados de destino e execute a seguinte consulta para explorar os dados ingeridos, substituindo o marcador de posição TableName pelo nome da tabela de destino:
<TableName> | take 10
O resultado deverá ter um aspeto semelhante à seguinte imagem: