Megosztás a következőn keresztül:


Adatok betöltése az Apache log4J 2 összekötővel

A Log4J az Apache Foundation által karbantartott Java-alkalmazások népszerű naplózási keretrendszere. A Log4J lehetővé teszi a fejlesztők számára, hogy a naplózó neve, a naplózó szintje és az üzenetminta alapján tetszőleges részletességgel szabályozhatják, hogy mely naplókivonatok legyenek kimenetek. Az Apache Log4J 2 a Log4J-re való frissítés, amely jelentős fejlesztéseket tartalmaz az előző Log4j 1.x-hez képest. A Log4J 2 számos, a Logbackben elérhető fejlesztést biztosít, miközben kijavít néhány, a Logback architektúrájában rejlő problémát. Az Apache log4J 2 fogadó, más néven hozzáfűző, a naplóadatokat a Kusto táblájába streameli, ahol valós időben elemezheti és vizualizálhatja a naplókat.

Az adatösszekötők teljes listáját lásd: Adatintegrációk áttekintése.

Előfeltételek

A környezet kialakítása

Ebben a szakaszban előkészíti a környezetet a Log4J 2 fogadó használatára.

A csomag telepítése

Ha egy alkalmazásban szeretné használni a fogadót, adja hozzá a következő függőségeket a pom.xml Maven-fájlhoz. A fogadó elvárja, hogy a log4j-core függőségként legyen megadva az alkalmazásban.

<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>

Microsoft Entra alkalmazásregisztráció létrehozása

  1. Jelentkezzen be az Azure-előfizetésbe az Azure CLI-vel. Ezután hitelesítés a böngészőben.

    az login
    
  2. Válassza ki az előfizetést az egyszerű szolgáltatás üzemeltetéséhez. Erre a lépésre akkor van szükség, ha több előfizetéssel rendelkezik.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Hozza létre a szolgáltatásnevet. Ebben a példában a szolgáltatásnév neve my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. A visszaadott JSON-adatokból másolja ki a , passworda és tenant a appIdértéket későbbi használatra.

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

Létrehozta Microsoft Entra alkalmazást és szolgáltatásnevet.

A Microsoft Entra alkalmazás engedélyeinek megadása

  1. A lekérdezési környezetben futtassa a következő felügyeleti parancsot, és cserélje le a DatabaseName helyőrzőket és az alkalmazásazonosítót a korábban mentett értékekre. Ez a parancs megadja az alkalmazásnak az adatbázis-betöltési szerepkört. További információ: Adatbázisbiztonsági szerepkörök kezelése.

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

    Megjegyzés

    Az utolsó paraméter egy sztring, amely jegyzetekként jelenik meg az adatbázishoz társított szerepkörök lekérdezésekor. További információ: Adatbázis-szerepkörök kezelése.

Tábla- és betöltési leképezés létrehozása

Hozzon létre egy céltáblát a bejövő adatokhoz, és megfelelteti a betöltött adatoszlopokat a céltábla oszlopainak. A következő lépésekben a táblaséma és a leképezés megfelel a mintaalkalmazásból küldött adatoknak.

  1. A lekérdezésszerkesztőben futtassa a következő táblalétrehozási parancsot, és cserélje le a TableName helyőrzőt a céltábla nevére:

    .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. Futtassa a következő betöltési leképezési parancsot, és cserélje le a TableName helyőrzőket a céltábla nevére, a TableNameMapping parancsot pedig a betöltési leképezés nevére:

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

A Log4j 2 fogadó hozzáadása az alkalmazáshoz

A következő lépésekkel:

  • A Log4j 2 fogadó hozzáadása az alkalmazáshoz
  • A fogadó által használt változók konfigurálása
  • Készítsen buildet és futtassa az alkalmazást
  1. Adja hozzá a következő kódot az alkalmazáshoz:

    package com.microsoft.azure.kusto.log4j.sample;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
  2. Konfigurálja a Log4j 2 fogadót úgy, hogy hozzáadja a KustoStrategy bejegyzést a log4j2.xml fájlhoz, és lecseréli a helyőrzőket a következő táblázat adataival:

    A log4J 2 összekötő a RollingFileAppenderben használt egyéni stratégiát használja. A naplókat a rendszer a rendszer a kusto-fürthöz való csatlakozás során a hálózati hibából eredő adatvesztés elkerülése érdekében írja be a rendszer a működésbe lépő fájlba. Az adatokat egy gördülő fájl tárolja, majd kiüríti a Kusto-fürtbe.

    <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"
    />
    
    Tulajdonság Leírás
    clusterIngestUrl A fürt betöltési URI-ja a fürt> formátumábanhttps://ingest-<.<region.kusto.windows.net>.
    dbName A céladatbázis kis- és nagybetűkre érzékeny neve.
    tableName Egy meglévő céltábla kis- és nagybetűkre érzékeny neve. A Log4jTest például a tábla létrehozása és a betöltési leképezésben létrehozott tábla neve.
    appId A hitelesítéshez szükséges alkalmazásügyfél-azonosító. Ezt az értéket az Alkalmazásregisztráció létrehozása Microsoft Entra területen mentette.
    appKey A hitelesítéshez szükséges alkalmazáskulcs. Ezt az értéket az Alkalmazásregisztráció létrehozása Microsoft Entra területen mentette.
    appTenant Annak a bérlőnek az azonosítója, amelyben az alkalmazás regisztrálva van. Ezt az értéket az Alkalmazásregisztráció létrehozása Microsoft Entra területen mentette.
    logTableMapping A leképezés neve.
    mappingType A használni kívánt leképezés típusa. Az alapértelmezett érték a csv.
    flushImmediately Ha igaz értékre van állítva, a fogadó minden naplóesemény után kiüríti a puffert. Az alapértelmezett érték hamis.

    További lehetőségekért lásd: Fogadó beállításai.

  3. Adatok küldése a Kusto-ba a Log4j 2 fogadó használatával. Például:

    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. Hozza létre és futtassa az alkalmazást.

  5. Ellenőrizze, hogy az adatok a fürtben találhatóak-e. A lekérdezési környezetben futtassa a következő lekérdezést, amely a helyőrzőt a korábban használt tábla nevére cseréli:

    <TableName>
    | take 10
    

A mintaalkalmazás futtatása

  1. Klónozza a log4J 2 git-adattárat a következő git paranccsal:

    git clone https://github.com/Azure/azure-kusto-log4j.git
    
  2. Állítsa be a következő környezeti változókat a Log4J 2 fogadó konfigurálásához:

    Megjegyzés

    A git-adattárban található mintaprojektben az alapértelmezett konfigurációs formátumot a fájl log4j2.xml határozza meg. Ez a konfigurációs fájl a fájl elérési útja alatt található: \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. A terminálban keresse meg a klónozott adattár mintamappáját, és futtassa a következő Maven-parancsot:

    mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
    
  4. A lekérdezési környezetben válassza ki a céladatbázist, és futtassa a következő lekérdezést a betöltött adatok megismeréséhez, és cserélje le a TableName helyőrzőt a céltábla nevére:

    <TableName>
    | take 10
    

    A kimenetnek az alábbi táblázathoz hasonlóan kell kinéznie:

    Képernyőkép a 10 függvényt és eredményt tartalmazó táblázatról.