Ingerir dados com o conector do Apache log4J 2
O Log4J é uma estrutura de log popular para aplicativos Java mantidos pelo Apache Foundation. O Log4J permite que os desenvolvedores controlem quais instruções de log são geradas com granularidade arbitrária com base no nome do agente, no nível do agente e no padrão de mensagem. O Apache Log4J 2 é uma atualização para o Log4J, com melhorias significativas em relação ao Log4j 1.x anterior. O Log4J 2 fornece muitas das melhorias disponíveis no Logback, corrigindo alguns problemas inerentes na arquitetura do Logback. O coletor do Apache log4J 2, também conhecido como appender, transmite seus dados de log para sua tabela no Kusto, onde você pode analisar e visualizar seus logs em tempo real.
Para obter uma lista completa de conectores de dados, consulte Visão geral de integrações de dados.
Pré-requisitos
- Apache Maven
- Um cluster Data Explorer do Azure e um banco de dadosou um banco de dados KQL no Microsoft Fabric
Configure seu ambiente
Nesta seção, você preparará seu ambiente para usar o coletor Log4J 2.
Instalar o pacote
Para usar o coletor em um aplicativo, adicione as dependências a seguir ao arquivopom.xml Maven. O coletor espera que o log4j-core seja fornecido como uma dependência no aplicativo.
<dependency>
<groupId>com.microsoft.azure.kusto</groupId>
<artifactId>azure-kusto-log4j</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
Criar um registro de aplicativo Microsoft Entra
Entre em sua assinatura do Azure por meio da CLI do Azure. Em seguida, autentique no navegador.
az login
Escolha a assinatura para hospedar a entidade de segurança. Essa etapa é necessária quando você tem várias assinaturas.
az account set --subscription YOUR_SUBSCRIPTION_GUID
Crie a entidade de serviço. Neste exemplo, a entidade de serviço é chamada
my-service-principal
.az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
Dos dados JSON retornados, copie o
appId
,password
etenant
para uso futuro.{ "appId": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn", "displayName": "my-service-principal", "name": "my-service-principal", "password": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn", "tenant": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn" }
Você criou o aplicativo do Microsoft Entra e a entidade de serviço.
Conceder as permissões do aplicativo Microsoft Entra
Em seu ambiente de consulta, execute o comando de gerenciamento a seguir, substituindo os espaços reservados DatabaseName e a ID do aplicativo pelos valores salvos anteriormente. Esse comando concede ao aplicativo a função de ingestor de banco de dados . Para obter mais informações, consulte Gerenciar funções de segurança de banco de dados.
.add database DatabaseName ingestors ('aadappID=12345-abcd-12a3-b123-ccdd12345a1b') 'App Registration'
Observação
O último parâmetro é uma cadeia de caracteres que aparece como observações quando você consulta as funções associadas a um banco de dados. Para obter mais informações, consulte gerenciar funções de banco de dados.
Criar uma tabela e um mapeamento de ingestão
Crie uma tabela de destino para os dados de entrada, mapeando as colunas de dados ingeridas para as colunas na tabela de destino. Nas etapas a seguir, o esquema e o mapeamento da tabela correspondem aos dados enviados do aplicativo de exemplo.
No editor de consultas, execute o seguinte comando de criação de tabela, substituindo o espaço reservado TableName pelo nome da tabela de destino:
.create table log4jTest (timenanos:long,timemillis:long,level:string,threadid:string,threadname:string,threadpriority:int,formattedmessage:string,loggerfqcn:string,loggername:string,marker:string,thrownproxy:string,source:string,contextmap:string,contextstack:string)
Execute o seguinte comando de mapeamento de ingestão, substituindo os espaços reservados TableName pelo nome da tabela de destino e TableNameMapping pelo nome do mapeamento de ingestão:
.create table log4jTest ingestion csv mapping 'log4jCsvTestMapping' '[{"Name":"timenanos","DataType":"","Ordinal":"0","ConstValue":null},{"Name":"timemillis","DataType":"","Ordinal":"1","ConstValue":null},{"Name":"level","DataType":"","Ordinal":"2","ConstValue":null},{"Name":"threadid","DataType":"","Ordinal":"3","ConstValue":null},{"Name":"threadname","DataType":"","Ordinal":"4","ConstValue":null},{"Name":"threadpriority","DataType":"","Ordinal":"5","ConstValue":null},{"Name":"formattedmessage","DataType":"","Ordinal":"6","ConstValue":null},{"Name":"loggerfqcn","DataType":"","Ordinal":"7","ConstValue":null},{"Name":"loggername","DataType":"","Ordinal":"8","ConstValue":null},{"Name":"marker","DataType":"","Ordinal":"9","ConstValue":null},{"Name":"thrownproxy","DataType":"","Ordinal":"10","ConstValue":null},{"Name":"source","DataType":"","Ordinal":"11","ConstValue":null},{"Name":"contextmap","DataType":"","Ordinal":"12","ConstValue":null},{"Name":"contextstack","DataType":"","Ordinal":"13","ConstValue":null}]'
Adicionar o coletor Log4j 2 ao seu aplicativo
Use as seguintes etapas para:
- Adicionar o coletor Log4j 2 ao seu aplicativo
- Configurar as variáveis usadas pelo coletor
- Compilar e executar o aplicativo
Adicione o seguinte código ao seu aplicativo:
package com.microsoft.azure.kusto.log4j.sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
Configure o coletor Log4j 2 adicionando a
KustoStrategy
entrada ao arquivo log4j2.xml, substituindo espaços reservados usando as informações na tabela a seguir:O conector log4J 2 usa uma estratégia personalizada usada no RollingFileAppender. Os logs são gravados no arquivo sem interrupção para evitar qualquer perda de dados decorrente de falha de rede durante a conexão com o cluster Kusto. Os dados são armazenados em um arquivo sem interrupção e, em seguida, liberados para o cluster Kusto.
<KustoStrategy clusterIngestUrl = "${env:LOG4J2_ADX_INGEST_CLUSTER_URL}" appId = "${env:LOG4J2_ADX_APP_ID}" appKey = "${env:LOG4J2_ADX_APP_KEY}" appTenant = "${env:LOG4J2_ADX_TENANT_ID}" dbName = "${env:LOG4J2_ADX_DB_NAME}" tableName = "<MyTable>" logTableMapping = "<MyTableCsvMapping>" mappingType = "csv" flushImmediately = "false" />
Propriedade Descrição clusterIngestUrl O URI de ingestão do cluster no cluster> de formatohttps://ingest-<.<region.kusto.windows.net>. Dbname O nome que diferencia maiúsculas de minúsculas do banco de dados de destino. tableName O nome que diferencia maiúsculas de minúsculas de uma tabela de destino existente. Por exemplo, Log4jTest é o nome da tabela criada em Criar uma tabela e mapeamento de ingestão. appId A ID do cliente do aplicativo necessária para autenticação. Você salvou esse valor em Criar um registro de aplicativo Microsoft Entra. appKey A chave do aplicativo necessária para autenticação. Você salvou esse valor em Criar um registro de aplicativo Microsoft Entra. appTenant A ID do locatário no qual o aplicativo está registrado. Você salvou esse valor em Criar um registro de aplicativo Microsoft Entra. logTableMapping O nome do mapeamento. Mappingtype O tipo de mapeamento a ser usado. O padrão é csv. flushImmediately Se definido como true, o coletor libera o buffer após cada evento de log. O padrão é false. Para obter mais opções, consulte Opções do coletor.
Envie dados para o Kusto usando o coletor Log4j 2. Por exemplo:
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class MyClass { private static final Logger logger = LogManager.getLogger(KustoLog4JSampleApp.class); public static void main(String[] args) { Runnable loggingTask = () -> { logger.trace(".....read_physical_netif: Home list entries returned = 7"); logger.debug(".....api_reader: api request SENDER"); logger.info(".....read_physical_netif: index #0, interface VLINK1 has address 129.1.1.1, ifidx 0"); logger.warn(".....mailslot_create: setsockopt(MCAST_ADD) failed - EDC8116I Address not available."); logger.error(".....error_policyAPI: APIInitializeError: ApiHandleErrorCode = 98BDFB0, errconnfd = 22"); logger.fatal(".....fatal_error_timerAPI: APIShutdownError: ReadBuffer = 98BDFB0, RSVPGetTSpec = error"); }; ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); executor.scheduleAtFixedRate(loggingTask, 0, 3, TimeUnit.SECONDS); } }
Compile e execute o aplicativo.
Verifique se os dados estão no cluster. Em seu ambiente de consulta, execute a seguinte consulta substituindo o espaço reservado pelo nome da tabela usada anteriormente:
<TableName> | take 10
Executar o aplicativo de exemplo
Clone o repositório git log4J 2 usando o seguinte comando git:
git clone https://github.com/Azure/azure-kusto-log4j.git
Defina as seguintes variáveis ambientais para configurar o coletor Log4J 2:
Observação
No projeto de exemplo incluído no repositório git, o formato de configuração padrão é definido no arquivo log4j2.xml. Esse arquivo de configuração está localizado no caminho do arquivo: \azure-kusto-log4j\samples\src\main\resources\log4j2.xml.
No terminal, navegue até a pasta exemplos do repositório clonado e execute o seguinte comando do Maven:
mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
Em seu ambiente de consulta, selecione o banco de dados de destino e execute a seguinte consulta para explorar os dados ingeridos, substituindo o espaço reservado TableName pelo nome da tabela de destino:
<TableName> | take 10
Sua saída deve ser semelhante à tabela a seguir:
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de