Jaa


Tietojen noutaminen Apache log4J 2 -liittimellä

Log4J on suosittu kirjaamisen sovelluskehys Apache Foundationin ylläpitämille Java-sovelluksille. Log4J:n avulla kehittäjät voivat hallita, mitkä lokilausekkeet tulostetaan mielivaltaisella askelvälillä lokitoiminnon nimen, lokitason ja viestimallin perusteella. Apache Log4J 2 on log4J-päivitys, joka sisältää merkittäviä parannuksia edellä olevaan Log4j 1.x:ään verrattuna. Log4J 2 tarjoaa monia parannuksia, jotka ovat käytettävissä takaisinkirjautumisessa, mutta korjaavat joitakin kirjautumisen arkkitehtuuriin liittyviä ongelmia. Apache log4J 2 -pesuallas, joka tunnetaan myös liittäjänä, suoratoistaa lokitietosi Kustossa olevaan taulukkoosi, jossa voit analysoida ja visualisoida lokeja reaaliaikaisesti.

Täydellinen luettelo tietoliittimistä on kohdassa Tietojen integroinnin yleiskatsaus.

Edellytykset

Ympäristön määrittäminen

Tässä osiossa valmistelet ympäristösi käyttämään Log4J 2 -pesuallasta.

Paketin asentaminen

Jos haluat käyttää altaan sovelluksessa, lisää seuraavat riippuvuudet pom.xml Maven -tiedostoon. Pesuallas odottaa, että log4j-ydin on saatavilla riippuvuutena sovelluksessa.

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

Luo Microsoft Entra -sovelluksen rekisteröinti

  1. Kirjaudu sisään Azure-tilaukseesi Azuren komentorivikäyttöliittymän kautta. Todenna sitten selaimessa.

    az login
    
  2. Valitse tilaus, jossa isännöit päänimeä. Tätä vaihetta tarvitaan, kun sinulla on useita tilauksia.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Luo palvelun päänimi. Tässä esimerkissä palvelun päänimeä kutsutaan nimellä my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Kopioi palautetut JSON-tiedot appIdpassword, ja tenant jatkokäyttöä varten.

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

Olet luonut Microsoft Entra -sovelluksen ja palvelun päänimen.

Myönnä Microsoft Entra -sovelluksen käyttöoikeudet

  1. Suorita kyselyympäristössä seuraava hallintakomento, joka korvaa paikkamerkit DatabaseName ja sovellustunnus aiemmin tallennetuilla arvoilla. Tämä komento myöntää sovellukselle tietokannan käsittelytoiminnon roolin. Lisätietoja on kohdassa Tietokannan käyttöoikeusroolien hallinta.

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

    Muistiinpano

    Viimeinen parametri on merkkijono, joka näkyy muistiinpanoina, kun teet kyselyjä tietokantaan liittyvistä rooleista. Lisätietoja on artikkelissa Tietokantaroolien hallinta.

Taulukon ja tietojen yhdistämisen luominen

Luo kohdetaulukko saapuville tiedoille yhdistämällä sisäänotetut tietosarakkeet kohdetaulukon sarakkeisiin. Seuraavissa vaiheissa taulukon rakenne ja yhdistämismääritys vastaavat mallisovelluksesta lähetettyjä tietoja.

  1. Suorita kyselyeditorissa seuraava taulukon luontikomento, joka korvaa paikkamerkin TableName kohdetaulukon nimellä:

    .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. Suorita seuraava tietojen käsittelymäärityksen komento ja korvaa paikkamerkit TableName kohdetaulukon nimellä ja TableNameMapping tietojen yhdistämisen nimellä:

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

Log4j 2 -nielun lisääminen sovellukseesi

Toimi seuraavasti:

  • Log4j 2 -nielun lisääminen sovellukseesi
  • Pesualtaan käyttämien muuttujien määrittäminen
  • Sovelluksen luominen ja suorittaminen
  1. Lisää seuraava koodi sovellukseesi:

    package com.microsoft.azure.kusto.log4j.sample;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
  2. Määritä Log4j 2 -nielu lisäämällä KustoStrategy merkintä log4j2.xml -tiedostoon. Korvaa paikkamerkit seuraavan taulukon tiedoilla:

    Log4J 2 -liitin käyttää mukautettua strategiaa, jota käytetään RollingFileAppender-sovelluksessa. Lokit kirjoitetaan liukuviin tiedostoihin verkkovirheistä aiheutuvien tietojen menetyksen estämiseksi Kusto-klusteriin yhdistettäessä. Tiedot tallennetaan vieritystiedostoon, jonka jälkeen ne huuhdellaan Kusto-klusteriin.

    <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"
    />
    
    Ominaisuus Kuvaus
    clusterIngestUrl Klusterin sisäänoinnin URI-osoite muotoiluklusterissahttps://ingest-<>.<region.kusto.windows.net>.
    dbName Kohdetietokannan kirjainkoon huomioon ottava nimi.
    tableName Olemassa olevan kohdetaulukon kirjainkoon huomioon ottava nimi. Esimerkiksi Log4jTest on taulukon nimi, joka on luotu kohdassa Luo taulukko ja tietojen yhdistäminen.
    appId Sovelluksen asiakastunnus, joka vaaditaan todentamiseen. Tallensit tämän arvon kohdassa Luo Microsoft Entra -sovelluksen rekisteröinti.
    appKey Todentamiseen tarvittava sovellusavain. Tallensit tämän arvon kohdassa Luo Microsoft Entra -sovelluksen rekisteröinti.
    appTenant Sen vuokraajan tunnus, johon sovellus on rekisteröity. Tallensit tämän arvon kohdassa Luo Microsoft Entra -sovelluksen rekisteröinti.
    logTableMapping Yhdistämismäärityksen nimi.
    mappingType Käytettävän yhdistämismäärityksen tyyppi. Oletusarvo on csv.
    flushImmediately Jos arvoksi on määritetty true, pesuallas huuhtelee puskurin jokaisen lokitapahtuman jälkeen. Oletusarvo on false.

    Saat lisätietoja ohjeartikkelista Pesuallasasetukset.

  3. Lähetä tietoja Kustoon log4j 2 -altaan avulla. Esimerkkejä:

    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. Luo ja suorita sovellus.

  5. Varmista, että tiedot ovat klusterissasi. Suorita kyselyympäristössä seuraava kysely, joka korvaa paikkamerkin aiemmin käytetyn taulukon nimellä:

    <TableName>
    | take 10
    

Mallisovelluksen suorittaminen

  1. Kloonaa log4J 2 git -säilö käyttämällä seuraavaa Git-komentoa:

    git clone https://github.com/Azure/azure-kusto-log4j.git
    
  2. Määritä Log4J 2 -nielu määrittämällä seuraavat ympäristömuuttujat:

    Muistiinpano

    Git-säilöön sisältyvässä malliprojektissa oletusmääritysmuoto määritetään tiedostossa log4j2.xml. Tämä määritystiedosto sijaitsee tiedostopolun alla: \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. Siirry päätteessä kloonatun säilön näytekansioon ja suorita seuraava Maven-komento:

    mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
    
  4. Valitse kyselyympäristössä kohdetietokanta ja suorita seuraava kysely, jotta voit tutkia käyttötietoja, korvaamalla paikkamerkin TableName kohdetaulukon nimellä:

    <TableName>
    | take 10
    

    Tulosteesi pitäisi näyttää samalta kuin seuraavassa taulukossa:

    Näyttökuva taulukosta, jossa on 10 funktiota ja tuloksia.