Dela via


Mata in data med Apache log4J 2-anslutningsappen

Log4J är ett populärt loggningsramverk för Java-program som underhålls av Apache Foundation. Med Log4J kan utvecklare styra vilka logginstruktioner som matas ut med godtycklig kornighet baserat på loggarens namn, loggningsnivå och meddelandemönster. Apache Log4J 2 är en uppgradering till Log4J, med betydande förbättringar jämfört med föregående Log4j 1.x. Log4J 2 innehåller många av de förbättringar som är tillgängliga i Logback, samtidigt som vissa inneboende problem åtgärdas i Logbacks arkitektur. Apache log4J 2-mottagaren, även kallad tillägg, strömmar dina loggdata till tabellen i Kusto, där du kan analysera och visualisera dina loggar i realtid.

En fullständig lista över dataanslutningar finns i Översikt över dataintegreringar.

Förutsättningar

Konfigurera din miljö

I det här avsnittet förbereder du din miljö för att använda Log4J 2-mottagaren.

Installera paketet

Om du vill använda mottagaren i ett program lägger du till följande beroenden i dinpom.xml Maven-fil. Mottagaren förväntar sig att log4j-core tillhandahålls som ett beroende 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>

Skapa en Microsoft Entra appregistrering

  1. Logga in på din Azure-prenumeration via Azure CLI. Autentisera sedan i webbläsaren.

    az login
    
  2. Välj den prenumeration som ska vara värd för huvudkontot. Det här steget krävs när du har flera prenumerationer.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Skapa tjänstens huvudnamn. I det här exemplet kallas my-service-principaltjänstens huvudnamn .

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Från de returnerade JSON-data kopierar du appId, passwordoch tenant för framtida användning.

    {
      "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"
    }
    

Du har skapat ditt Microsoft Entra-program och tjänstens huvudnamn.

Bevilja behörigheter för Microsoft Entra-appen

  1. Kör följande hanteringskommando i frågemiljön och ersätt platshållarna DatabaseName och program-ID med tidigare sparade värden. Det här kommandot ger appen rollen databasingestor . Mer information finns i Hantera säkerhetsroller för databaser.

    .add database DatabaseName ingestors ('aadappID=12345-abcd-12a3-b123-ccdd12345a1b') 'App Registration'
    

    Anteckning

    Den sista parametern är en sträng som visas som anteckningar när du frågar efter de roller som är associerade med en databas. Mer information finns i Hantera databasroller.

Skapa en tabell och datainmatningsmappning

Skapa en måltabell för inkommande data och mappa de inmatade datakolumnerna till kolumnerna i måltabellen. I följande steg motsvarar tabellschemat och mappningen de data som skickas från exempelappen.

  1. Kör följande kommando för att skapa tabell i frågeredigeraren och ersätt platshållaren TableName med namnet 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)
    
  2. Kör följande inmatningsmappningskommando och ersätt platshållarna TableName med måltabellnamnet och TableNameMapping med namnet på inmatningsmappningen:

    .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}]'
    

Lägg till Log4j 2-mottagaren i din app

Använd följande steg för att:

  • Lägg till Log4j 2-mottagaren i din app
  • Konfigurera variablerna som används av mottagaren
  • Kompilera och köra appen
  1. Lägg till följande kod i din app:

    package com.microsoft.azure.kusto.log4j.sample;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
  2. Konfigurera Log4j 2-mottagaren genom att lägga till KustoStrategy posten i log4j2.xml-filen och ersätta platshållarna med hjälp av informationen i tabellen som följer:

    Log4J 2-anslutningsappen använder en anpassad strategi som används i RollingFileAppender. Loggar skrivs in i den löpande filen för att förhindra dataförlust på grund av nätverksfel vid anslutning till Kusto-klustret. Data lagras i en rullande fil och rensas sedan till Kusto-klustret.

    <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 Beskrivning
    clusterIngestUrl Inmatnings-URI:n för klustret i formatklustrethttps://ingest-<>.<region.kusto.windows.net>.
    dbName Måldatabasens skiftlägeskänsliga namn.
    Tablename Det skiftlägeskänsliga namnet på en befintlig måltabell. Log4jTest är till exempel namnet på tabellen som skapades i Skapa en tabell och inmatningsmappning.
    appId Programklient-ID som krävs för autentisering. Du sparade det här värdet i Skapa en Microsoft Entra appregistrering.
    appKey Programnyckeln som krävs för autentisering. Du sparade det här värdet i Skapa en Microsoft Entra appregistrering.
    appTenant ID för den klientorganisation där programmet är registrerat. Du sparade det här värdet i Skapa en Microsoft Entra appregistrering.
    logTableMapping Namnet på mappningen.
    mappingType Den typ av mappning som ska användas. Standardvärdet är csv.
    flushImmediately Om värdet är true töms bufferten efter varje logghändelse. Standardvärdet är falskt.

    Fler alternativ finns i Alternativ för mottagare.

  3. Skicka data till Kusto med hjälp av Log4j 2-mottagaren. Exempel:

    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);
      }
    }
    
  4. Kompilera och kör appen.

  5. Kontrollera att data finns i klustret. Kör följande fråga i frågemiljön och ersätt platshållaren med namnet på den tabell som användes tidigare:

    <TableName>
    | take 10
    

Kör exempelappen

  1. Klona git-lagringsplatsen log4J 2 med följande git-kommando:

    git clone https://github.com/Azure/azure-kusto-log4j.git
    
  2. Ange följande miljövariabler för att konfigurera Log4J 2-mottagaren:

    Anteckning

    I exempelprojektet som ingår i git-lagringsplatsen definieras standardkonfigurationsformatet i filen log4j2.xml. Den här konfigurationsfilen finns under filsökvägen: \azure-kusto-log4j\samples\src\main\resources\log4j2.xml.

    $env:LOG4J2_ADX_DB_NAME="<db-name>"
    $env:LOG4J2_ADX_TENANT_ID="<tenant-id>"
    $env:LOG4J2_ADX_INGEST_CLUSTER_URL="https://ingest-<cluster>.kusto.windows.net"
    $env:LOG4J2_ADX_APP_ID="<app-id>"
    $env:LOG4J2_ADX_APP_KEY="<app-key>"
    
  3. I terminalen navigerar du till exempelmappen för den klonade lagringsplatsen och kör följande Maven-kommando:

    mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
    
  4. I frågemiljön väljer du måldatabasen och kör följande fråga för att utforska inmatade data och ersätter platshållaren TableName med namnet på måltabellen:

    <TableName>
    | take 10
    

    Dina utdata bör se ut ungefär som i följande tabell:

    Skärmbild av tabellen med funktionen take 10 och resultatet.