Apache log4J 2 bağlayıcısı ile veri alma
Log4J, Apache Foundation tarafından tutulan Java uygulamaları için popüler bir günlük çerçevesidir. Log4J, geliştiricilerin günlükçü adı, günlükçü düzeyi ve ileti desenine göre rastgele ayrıntı düzeyiyle hangi günlük deyimlerinin çıkış olduğunu denetlemesine olanak tanır. Apache Log4J 2 , önceki Log4j 1.x üzerinde önemli geliştirmeler içeren bir Log4J yükseltmesidir. Log4J 2, Logback mimarisindeki bazı doğal sorunları giderirken Logback'te sunulan iyileştirmelerin çoğunu sağlar. Ekleyici olarak da bilinen Apache log4J 2 havuzu, günlük verilerinizi Kusto'daki tablonuza akışla aktararak günlüklerinizi gerçek zamanlı olarak analiz edip görselleştirebilirsiniz.
Veri bağlayıcılarının tam listesi için bkz . Veri tümleştirmelerine genel bakış.
Önkoşullar
- Apache Maven
- Microsoft Fabric'te Azure Veri Gezgini kümesi ve veritabanı veya KQL veritabanı
Ortamınızı ayarlama
Bu bölümde ortamınızı Log4J 2 havuzu kullanacak şekilde hazırlarsınız.
paketini yükleyin
Havuzu bir uygulamada kullanmak için pom.xml Maven dosyanıza aşağıdaki bağımlılıkları ekleyin. Havuz, log4j-core'un uygulamada bir bağımlılık olarak sağlanmasını bekler.
<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 Uygulama kaydı oluşturma
Azure CLI aracılığıyla Azure aboneliğinizde oturum açın. Ardından tarayıcıda kimlik doğrulaması yapın.
az login
Sorumluyu barındırmak için aboneliği seçin. Bu adım, birden çok aboneliğiniz olduğunda gereklidir.
az account set --subscription YOUR_SUBSCRIPTION_GUID
Hizmet sorumlusunu oluşturun. Bu örnekte hizmet sorumlusu olarak adlandırılır
my-service-principal
.az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
Döndürülen JSON verilerinden, gelecekte kullanmak üzere ,
password
vetenant
değerini kopyalayınappId
.{ "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" }
Microsoft Entra uygulamanızı ve hizmet sorumlunuzu oluşturdunuz.
Microsoft Entra uygulaması izinlerini verme
Sorgu ortamınızda aşağıdaki yönetim komutunu çalıştırın ve DatabaseName ve uygulama kimliği yer tutucularını daha önce kaydedilmiş değerlerle değiştirin. Bu komut uygulamaya veritabanı alma rolü verir. Daha fazla bilgi için bkz . Veritabanı güvenlik rollerini yönetme.
.add database DatabaseName ingestors ('aadappID=12345-abcd-12a3-b123-ccdd12345a1b') 'App Registration'
Not
Son parametre, bir veritabanıyla ilişkili rolleri sorguladığınızda not olarak gösterilen bir dizedir. Daha fazla bilgi için bkz . Veritabanı rollerini yönetme.
Tablo ve alma eşlemesi oluşturma
Alınan veri sütunlarını hedef tablodaki sütunlara eşleerek gelen veriler için bir hedef tablo oluşturun. Aşağıdaki adımlarda, tablo şeması ve eşleme örnek uygulamadan gönderilen verilere karşılık gelir.
Sorgu düzenleyicinizde aşağıdaki tablo oluşturma komutunu çalıştırın ve TableName yer tutucusunu hedef tablonun adıyla değiştirin:
.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)
Aşağıdaki alma eşleme komutunu çalıştırarak TableName yer tutucularını hedef tablo adıyla ve TableNameMapping öğesini alma eşlemesinin adıyla değiştirin:
.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}]'
Uygulamanıza Log4j 2 havuzu ekleme
Aşağıdaki adımları kullanarak:
- Uygulamanıza Log4j 2 havuzu ekleme
- Havuz tarafından kullanılan değişkenleri yapılandırma
- Uygulamayı derleyin ve çalıştırın
Aşağıdaki kodu uygulamanıza ekleyin:
package com.microsoft.azure.kusto.log4j.sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
Log4j 2 havuzu, log4j2.xml dosyasına girdisini ekleyerek
KustoStrategy
yapılandırın ve aşağıdaki tablodaki bilgileri kullanarak yer tutucuları değiştirin:log4J 2 bağlayıcısı RollingFileAppender içinde kullanılan özel bir strateji kullanır. Günlükler, Kusto kümesine bağlanırken ağ hatasından kaynaklanan veri kaybını önlemek için sıralı dosyaya yazılır. Veriler sıralı bir dosyada depolanır ve kusto kümesine boşaltılır.
<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" />
Özellik Açıklama clusterIngestUrl Kümenizin biçim https://ingest-<>kümesindeki alma URI'si.<region.kusto.windows.net>. dbName Hedef veritabanının büyük/küçük harfe duyarlı adı. tableName Var olan bir hedef tablonun büyük/küçük harfe duyarlı adı. Örneğin Log4jTest, Tablo oluşturma ve alma eşlemesi bölümünde oluşturulan tablonun adıdır. appId Kimlik doğrulaması için gereken uygulama istemci kimliği. Bu değeri Microsoft Entra Uygulaması kaydı oluşturma bölümüne kaydettiniz. appKey Kimlik doğrulaması için gereken uygulama anahtarı. Bu değeri Microsoft Entra Uygulaması kaydı oluşturma bölümüne kaydettiniz. appTenant Uygulamanın kayıtlı olduğu kiracının kimliği. Bu değeri Microsoft Entra Uygulaması kaydı oluşturma bölümüne kaydettiniz. logTableMapping Eşlemenin adı. mappingType Kullanılacak eşleme türü. Varsayılan değer csv'dir. flushImmediately true olarak ayarlanırsa havuz, her günlük olayından sonra arabelleği temizler. Varsayılan değer false'tur. Diğer seçenekler için bkz . Havuz Seçenekleri.
Log4j 2 havuzu kullanarak Kusto'ya veri gönderin. Örneğin:
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); } }
Uygulamayı derleyin ve çalıştırın.
Verilerin kümenizde olduğunu doğrulayın. Sorgu ortamınızda aşağıdaki sorguyu çalıştırarak yer tutucuyu daha önce kullanılan tablonun adıyla değiştirin:
<TableName> | take 10
Örnek uygulamayı çalıştırma
Aşağıdaki git komutunu kullanarak log4J 2 git deposunu kopyalayın:
git clone https://github.com/Azure/azure-kusto-log4j.git
Log4J 2 havuzu yapılandırmak için aşağıdaki ortam değişkenlerini ayarlayın:
Not
Git deposuna dahil edilen örnek projede, varsayılan yapılandırma biçimi dosya log4j2.xml tanımlanır. Bu yapılandırma dosyası şu dosya yolunun altında bulunur: \azure-kusto-log4j\samples\src\main\resources\log4j2.xml.
Terminalinizde, kopyalanan deponun samples klasörüne gidin ve aşağıdaki Maven komutunu çalıştırın:
mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
Sorgu ortamınızda hedef veritabanını seçin ve alınan verileri keşfetmek için aşağıdaki sorguyu çalıştırın ve TableName yer tutucusunu hedef tablonun adıyla değiştirin:
<TableName> | take 10
Çıktınız aşağıdaki tabloya benzer görünmelidir: