Hent data med Apache log4J 2-koblingen
Log4J er et populært loggingsrammeverk for Java-programmer vedlikeholdt av Apache Foundation. Log4J gjør det mulig for utviklere å kontrollere hvilke loggsetninger som er utdata med vilkårlig detaljnivå basert på loggerens navn, loggernivå og meldingsmønster. Apache Log4J 2 er en oppgradering til Log4J, med betydelige forbedringer i forhold til den foregående Log4j 1.x. Log4J 2 gir mange av forbedringene som er tilgjengelige i Logback, samtidig som de løser noen iboende problemer i Logbacks arkitektur. Apache log4J 2-vasken, også kjent som en tilføying, strømmer loggdataene til tabellen i Kusto, der du kan analysere og visualisere loggene i sanntid.
Hvis du vil ha en fullstendig liste over datakoblinger, kan du se Oversikt over dataintegreringer.
Forutsetning
- Apache Maven
- En Azure Data Explorer-klynge og -database eller en KQL-database i Microsoft Fabric
Konfigurer miljøet ditt
I denne delen forbereder du miljøet til å bruke Log4J 2-vasken.
Installer pakken
Hvis du vil bruke vasken i et program, legger du til følgende avhengigheter i pom.xml Maven-filen. Vasken forventer at log4j-kjernen er angitt som en avhengighet i programmet.
<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>
Opprette en Microsoft Entra App-registrering
Logg på Azure-abonnementet via Azure CLI. Deretter godkjenner du i nettleseren.
az login
Velg abonnementet som vert for hovedstolen. Dette trinnet er nødvendig når du har flere abonnementer.
az account set --subscription YOUR_SUBSCRIPTION_GUID
Opprett tjenestekontohaveren. I dette eksemplet kalles
my-service-principal
tjenestekontohaveren .az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
Kopier ,
password
ogtenant
for fremtidig bruk,appId
fra de returnerte JSON-dataene.{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "my-service-principal", "name": "my-service-principal", "password": "00001111-aaaa-2222-bbbb-3333cccc4444", "tenant": "00001111-aaaa-2222-bbbb-3333cccc4444" }
Du har opprettet Microsoft Entra-programmet og tjenestekontohaveren.
Gi Microsoft Entra-apptillatelser
Kjør følgende administrasjonskommando i spørringsmiljøet, og erstatte plassholderne DatabaseName og program-ID-en med de tidligere lagrede verdiene. Denne kommandoen gir appen databasens ingestor-rolle . Hvis du vil ha mer informasjon, kan du se Behandle databasesikkerhetsroller.
.add database DatabaseName ingestors ('aadappID=12345-abcd-12a3-b123-ccdd12345a1b') 'App Registration'
Merk
Den siste parameteren er en streng som vises som notater når du spør etter rollene som er knyttet til en database. Hvis du vil ha mer informasjon, kan du se behandle databaseroller.
Opprette en tabell- og inntakstilordning
Opprett en måltabell for innkommende data, og tilordne de inntatte datakolonnene til kolonnene i måltabellen. I trinnene nedenfor tilsvarer tabellskjemaet og tilordningen dataene som sendes fra eksempelappen.
Kjør følgende tabellopprettingskommando i redigeringsprogrammet for spørringen, og erstatte plassholderen TableName med navnet på måltabellen:
.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)
Kjør følgende inntakstilordningskommando, og erstatte plassholderne TableName med navnet på måltabellen og TableNameMapping med navnet på inntakstilordningen:
.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}]'
Legg til Log4j 2-vasken i appen
Bruk følgende fremgangsmåte for å:
- Legg til Log4j 2-vasken i appen
- Konfigurer variablene som brukes av vasken
- Bygge og kjøre appen
Legg til følgende kode i appen:
package com.microsoft.azure.kusto.log4j.sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
Konfigurer Log4j 2-vasken ved å legge til
KustoStrategy
oppføringen i log4j2.xml-filen, og erstatte plassholdere ved hjelp av informasjonen i tabellen som følger:Log4J 2-koblingen bruker en egendefinert strategi som brukes i RollingFileAppender. Logger skrives inn i den rullende filen for å hindre tap av data som oppstår som følge av nettverksfeil under tilkobling til Kusto-klyngen. Dataene lagres i en rullende fil og tømmes deretter til Kusto-klyngen.
<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" />
Egenskap Bekrivelse clusterIngestUrl Inntaks-URI-en for klyngen i formatklyngenhttps://ingest-<>.<region.kusto.windows.net>. dbName Navnet på måldatabasen skiller mellom store og små bokstaver. tableName Navnet på et eksisterende måltabell skiller mellom store og små bokstaver. Log4jTest er for eksempel navnet på tabellen som er opprettet i Opprett en tabell- og inntakstilordning. appId Programklient-IDen kreves for godkjenning. Du lagret denne verdien i Opprett en Microsoft Entra App-registrering. appKey Programnøkkelen kreves for godkjenning. Du lagret denne verdien i Opprett en Microsoft Entra App-registrering. appTenant ID-en til leieren der programmet er registrert. Du lagret denne verdien i Opprett en Microsoft Entra App-registrering. logTableMapping Navnet på tilordningen. mappingType Typen tilordning som skal brukes. Standardverdien er csv. flushImmediately Hvis den er satt til sann, tømmer vasken bufferen etter hver logghendelse. Standardverdien er usann. Hvis du vil ha flere alternativer, kan du se Alternativer for synke.
Send data til Kusto ved hjelp av Log4j 2-vasken. Eksempel:
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); } }
Bygg og kjør appen.
Kontroller at dataene er i klyngen. Kjør følgende spørring i spørringsmiljøet, og erstatte plassholderen med navnet på tabellen som ble brukt tidligere:
<TableName> | take 10
Kjør eksempelappen
Klon log4J 2 git-repositoriet ved hjelp av følgende git-kommando:
git clone https://github.com/Azure/azure-kusto-log4j.git
Angi følgende miljøvariabler for å konfigurere Log4J 2-vasken:
Merk
I eksempelprosjektet som er inkludert i git-repositoriet, er standard konfigurasjonsformat definert i filen log4j2.xml. Denne konfigurasjonsfilen er plassert under filbanen: \azure-kusto-log4j\samples\src\main\resources\log4j2.xml.
Gå til eksempelmappen for klonet repo i terminalen, og kjør følgende Maven-kommando:
mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
Velg måldatabasen i spørringsmiljøet, og kjør følgende spørring for å utforske de inntatte dataene, og erstatte plassholderen TableName med navnet på måltabellen:
<TableName> | take 10
Utdataene skal ligne på følgende tabell: