Ingérer des données avec le connecteur Apache log4J 2
Log4J est une infrastructure de journalisation populaire pour les applications Java gérées par Apache Foundation. Log4J permet aux développeurs de contrôler les instructions de journal qui sont générées avec une granularité arbitraire en fonction du nom, du niveau d’enregistreur d’événements et du modèle de message de l’enregistreur d’événements. Apache Log4J 2 est une mise à niveau vers Log4J, avec des améliorations significatives par rapport à log4j 1.x précédent. Log4J 2 fournit de nombreuses améliorations disponibles dans Logback, tout en corrigeant certains problèmes inhérents à l’architecture de Logback. Le récepteur Apache log4J 2, également appelé appender, transmet vos données de journal à votre table kusto, où vous pouvez analyser et visualiser vos journaux en temps réel.
Pour obtenir la liste complète des connecteurs de données, consultez Vue d’ensemble des intégrations de données.
Prérequis
- Apache Maven
- Un cluster et une base de données Azure Data Explorer ou une base de données KQL dans Microsoft Fabric
Configurer votre environnement
Dans cette section, vous préparez votre environnement à utiliser le récepteur Log4J 2.
Installer le package
Pour utiliser le récepteur dans une application, ajoutez les dépendances suivantes à votre fichier Mavenpom.xml . Le récepteur s’attend à ce que log4j-core soit fourni en tant que dépendance dans l’application.
<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>
Créer une inscription d’application Microsoft Entra
Connectez-vous à votre abonnement Azure via Azure CLI. Authentifiez-vous ensuite dans le navigateur.
az login
Choisissez l’abonnement pour héberger le principal. Cette étape est nécessaire quand vous avez plusieurs abonnements.
az account set --subscription YOUR_SUBSCRIPTION_GUID
Créez le principal de service. Dans cet exemple, le principal de service est appelé
my-service-principal
.az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
À partir des données JSON retournées, copiez le
appId
,password
ettenant
pour une utilisation ultérieure.{ "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" }
Vous avez créé votre application Microsoft Entra et votre principal de service.
Accorder les autorisations d’application Microsoft Entra
Dans votre environnement de requête, exécutez la commande de gestion suivante, en remplaçant les espaces réservés DatabaseName et l’ID d’application par les valeurs précédemment enregistrées. Cette commande accorde à l’application le rôle d’ingestionneur de base de données . Pour plus d’informations, consultez Gérer les rôles de sécurité de base de données.
.add database DatabaseName ingestors ('aadappID=12345-abcd-12a3-b123-ccdd12345a1b') 'App Registration'
Notes
Le dernier paramètre est une chaîne qui s’affiche sous la forme de notes lorsque vous interrogez les rôles associés à une base de données. Pour plus d’informations, consultez Gérer les rôles de base de données.
Créer un mappage de table et d’ingestion
Créez une table cible pour les données entrantes, en mappant les colonnes de données ingérées aux colonnes de la table cible. Dans les étapes suivantes, le schéma de table et le mappage correspondent aux données envoyées à partir de l’exemple d’application.
Dans votre éditeur de requête, exécutez la commande de création de table suivante, en remplaçant l’espace réservé TableName par le nom de la table cible :
.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)
Exécutez la commande de mappage d’ingestion suivante, en remplaçant les espaces réservés TableName par le nom de la table cible et TableNameMapping par le nom du mappage d’ingestion :
.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}]'
Ajouter le récepteur Log4j 2 à votre application
Procédez comme suit pour :
- Ajouter le récepteur Log4j 2 à votre application
- Configurer les variables utilisées par le récepteur
- Générer et exécuter l’application
Ajoutez le code suivant à votre application :
package com.microsoft.azure.kusto.log4j.sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
Configurez le récepteur Log4j 2 en ajoutant l’entrée
KustoStrategy
au fichier log4j2.xml, en remplaçant les espaces réservés à l’aide des informations de la table qui suit :Le connecteur log4J 2 utilise une stratégie personnalisée utilisée dans RollingFileAppender. Les journaux sont écrits dans le fichier propagé pour éviter toute perte de données résultant d’une défaillance réseau lors de la connexion au cluster Kusto. Les données sont stockées dans un fichier propagé, puis vidées dans le cluster 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" />
Propriété Description clusterIngestUrl URI d’ingestion pour votre cluster au format https://ingest-<cluster>.<region.kusto.windows.net>. Dbname Nom de la base de données cible, respectant la casse. tableName Nom respectant la casse d’une table cible existante. Par exemple, Log4jTest est le nom de la table créée dans Créer une table et mappage d’ingestion. appId ID client d’application requis pour l’authentification. Vous avez enregistré cette valeur dans Créer une inscription d’application Microsoft Entra. appKey Clé d’application requise pour l’authentification. Vous avez enregistré cette valeur dans Créer une inscription d’application Microsoft Entra. appTenant ID du locataire dans lequel l’application est inscrite. Vous avez enregistré cette valeur dans Créer une inscription d’application Microsoft Entra. logTableMapping Nom du mappage. mappingType Type de mappage à utiliser. La valeur par défaut est csv. vider immédiatement Si la valeur est true, le récepteur vide la mémoire tampon après chaque événement de journal. La valeur par défaut est false. Pour plus d’options, consultez Options du récepteur.
Envoyez des données à Kusto à l’aide du récepteur Log4j 2. Par exemple :
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); } }
Générez et exécutez l'application.
Vérifiez que les données se situent dans votre cluster. Dans votre environnement de requête, exécutez la requête suivante en remplaçant l’espace réservé par le nom de la table utilisée précédemment :
<TableName> | take 10
Exécution de l'exemple d'application
Clonez le dépôt git log4J 2 à l’aide de la commande git suivante :
git clone https://github.com/Azure/azure-kusto-log4j.git
Définissez les variables d’environnement suivantes pour configurer le récepteur Log4J 2 :
Notes
Dans l’exemple de projet inclus dans le dépôt Git, le format de configuration par défaut est défini dans le fichier log4j2.xml. Ce fichier de configuration se trouve sous le chemin du fichier : \azure-kusto-log4j\samples\src\main\resources\log4j2.xml.
Dans votre terminal, accédez au dossier d’exemples du dépôt cloné et exécutez la commande Maven suivante :
mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
Dans votre environnement de requête, sélectionnez la base de données cible et exécutez la requête suivante pour explorer les données ingérées, en remplaçant l’espace réservé TableName par le nom de la table cible :
<TableName> | take 10
Votre sortie doit ressembler au tableau suivant :
Contenu connexe
- Vue d’ensemble des connecteurs de données
- Vue d’ensemble du Langage de requête Kusto (KQL)
- Prise en main avec Azure Databricks Log4J vers le dépôt Azure Data Explorer Git
- Ingérer des journaux Azure Databricks dans Azure Data Explorer à l’aide de Log4j2 - Blog de la communauté du connecteur Azure Data Explorer
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour