Sdílet prostřednictvím


Příjem dat pomocí konektoru Apache log4J 2

Log4J je oblíbená architektura protokolování pro aplikace v Javě, které udržuje Apache Foundation. Log4J umožňuje vývojářům řídit, které příkazy protokolu mají výstup s libovolnou členitostí na základě názvu, úrovně protokolovacího nástroje a vzoru zprávy. Apache Log4J 2 je upgrade na Log4J s významnými vylepšeními oproti předchozímu Log4j 1.x. Log4J 2 nabízí řadu vylepšení, která jsou k dispozici v logbacku, a současně řeší některé základní problémy v architektuře zpětného přihlašování. Jímka Apache log4J 2, označovaná také jako appender, streamuje data protokolu do tabulky v Kusto, kde můžete analyzovat a vizualizovat protokoly v reálném čase.

Úplný seznam datových konektorů najdete v přehledu integrace dat.

Požadavky

Nastavení prostředí

V této části připravíte prostředí, aby používalo jímku Log4J 2.

Nainstalujte balíček .

Pokud chcete použít jímku v aplikaci, přidejte do souboru pom.xml Maven následující závislosti. Jímka očekává, že jádro log4j je v aplikaci poskytováno jako závislost.

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

Vytvoření registrace aplikace Microsoft Entra

  1. Přihlaste se ke svému předplatnému Azure prostřednictvím Azure CLI. Pak se ověřte v prohlížeči.

    az login
    
  2. Zvolte předplatné, které má být hostitelem objektu zabezpečení. Tento krok je potřeba v případě, že máte více předplatných.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Vytvořte instanční objekt. V tomto příkladu se instanční objekt nazývá my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Z vrácených dat JSON zkopírujte appIdpasswordtenant a pro budoucí použití.

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

Vytvořili jste aplikaci Microsoft Entra a instanční objekt.

Udělení oprávnění aplikace Microsoft Entra

  1. V prostředí dotazu spusťte následující příkaz pro správu a nahraďte zástupné symboly DatabaseName a ID aplikace dříve uloženými hodnotami. Tento příkaz aplikaci udělí roli databázového ingestoru. Další informace najdete v tématu Správa rolí zabezpečení databáze.

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

    Poznámka:

    Poslední parametr je řetězec, který se zobrazí jako poznámky při dotazování rolí přidružených k databázi. Další informace najdete v tématu správa databázových rolí.

Vytvoření mapování tabulek a příjmu dat

Vytvořte cílovou tabulku pro příchozí data a namapujte ingestované sloupce dat na sloupce v cílové tabulce. V následujících krocích schéma tabulky a mapování odpovídají datům odesílaných z ukázkové aplikace.

  1. V editoru dotazů spusťte následující příkaz pro vytvoření tabulky a nahraďte zástupný název TableName názvem cílové tabulky:

    .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. Spusťte následující příkaz mapování příjmu dat a nahraďte zástupné symboly TableName názvem cílové tabulky a TableNameMapping názvem mapování příjmu dat:

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

Přidání jímky Log4j 2 do aplikace

Pomocí následujících kroků:

  • Přidání jímky Log4j 2 do aplikace
  • Konfigurace proměnných používaných jímkou
  • Sestavte a spusťte aplikaci.
  1. Do aplikace přidejte následující kód:

    package com.microsoft.azure.kusto.log4j.sample;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
  2. Nakonfigurujte jímku Log4j 2 přidáním KustoStrategy položky do souboru log4j2.xml a nahraďte zástupné symboly pomocí informací v následující tabulce:

    Konektor log4J 2 používá vlastní strategii, která se používá v RollingFileAppenderu. Protokoly se zapisují do postupného souboru, aby se zabránilo ztrátě dat vyplývající ze selhání sítě při připojování ke clusteru Kusto. Data se ukládají do postupného souboru a pak se vyprázdní do clusteru 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"
    />
    
    Vlastnost Popis
    clusterIngestUrl Identifikátor ingestování URI clusteru ve formátuhttps://ingest-<.><region.kusto.windows.net>.
    dbName V cílové databázi se rozlišují malá a velká písmena.
    tableName Název existující cílové tabulky rozlišující malá a velká písmena. Například Log4jTest je název tabulky vytvořené v vytvoření tabulky a mapování příjmu dat.
    appId ID klienta aplikace vyžadované pro ověřování. Tuto hodnotu jste uložili v části Vytvoření registrace aplikace Microsoft Entra.
    appKey Klíč aplikace vyžadovaný k ověřování. Tuto hodnotu jste uložili v části Vytvoření registrace aplikace Microsoft Entra.
    appTenant ID tenanta, ve kterém je aplikace zaregistrovaná. Tuto hodnotu jste uložili v části Vytvoření registrace aplikace Microsoft Entra.
    logTableMapping Název mapování.
    mappingType Typ mapování, které se má použít. Výchozí hodnota je CSV.
    flushImmediately Pokud je nastavena hodnota true, jímka vyprázdní vyrovnávací paměť po každé události protokolu. Výchozí hodnota je false.

    Další možnosti najdete v tématu Možnosti jímky.

  3. Odešlete data do Kusto pomocí jímky Log4j 2. Příklad:

    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. Sestavte a spusťte aplikaci.

  5. Ověřte, že jsou data ve vašem clusteru. V prostředí dotazu spusťte následující dotaz a nahraďte zástupný text názvem tabulky, kterou jste použili dříve:

    <TableName>
    | take 10
    

Spuštění ukázkové aplikace

  1. Naklonujte úložiště Git log4J 2 pomocí následujícího příkazu Git:

    git clone https://github.com/Azure/azure-kusto-log4j.git
    
  2. Nastavte následující proměnné prostředí pro konfiguraci jímky Log4J 2:

    Poznámka:

    V ukázkovém projektu, který je součástí úložiště Git, je výchozí formát konfigurace definovaný v souboru log4j2.xml. Tento konfigurační soubor se nachází v cestě k souboru: \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. V terminálu přejděte do složky s ukázkami klonovaného úložiště a spusťte následující příkaz Mavenu:

    mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
    
  4. V prostředí dotazu vyberte cílovou databázi a spuštěním následujícího dotazu prozkoumejte ingestovaná data a nahraďte zástupný název TableName názvem cílové tabulky:

    <TableName>
    | take 10
    

    Výstup by měl vypadat podobně jako v následující tabulce:

    Snímek obrazovky tabulky s 10 funkcemi a výsledky