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
Jelentkezzen be az Azure-előfizetésbe az Azure CLI-vel. Ezután hitelesítés a böngészőben.
az login
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
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}
A visszaadott JSON-adatokból másolja ki a ,
password
a éstenant
aappId
é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
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.
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)
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
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;
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.
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); } }
Hozza létre és futtassa az alkalmazást.
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
Klónozza a log4J 2 git-adattárat a következő git paranccsal:
git clone https://github.com/Azure/azure-kusto-log4j.git
Á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.
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"
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: