Menyerap data dengan konektor Apache log4J 2
Log4J adalah kerangka kerja pengelogan populer untuk aplikasi Java yang dikelola oleh Apache Foundation. Log4J memungkinkan pengembang untuk mengontrol pernyataan log mana yang dihasilkan dengan granularitas sewenang-wenang berdasarkan nama pencatat, tingkat pencatat, dan pola pesan. Apache Log4J 2 adalah peningkatan ke Log4J, dengan peningkatan signifikan atas Log4j 1.x sebelumnya. Log4J 2 menyediakan banyak peningkatan yang tersedia di Logback, sambil memperbaiki beberapa masalah yang melekat dalam arsitektur Logback. Sink Apache log4J 2, juga dikenal sebagai appender, mengalirkan data log Anda ke tabel Anda di Kusto, tempat Anda dapat menganalisis dan memvisualisasikan log Anda secara real time.
Untuk daftar lengkap konektor data, lihat Gambaran umum integrasi data.
Prasyarat
- Apache Maven
- Kluster dan database Azure Data Explorer atau database KQL di Microsoft Fabric
Menyiapkan lingkungan Anda
Di bagian ini, Anda menyiapkan lingkungan untuk menggunakan sink Log4J 2.
Pasang paket
Untuk menggunakan sink dalam aplikasi, tambahkan dependensi berikut ke file Maven pom.xml Anda. Sink mengharapkan log4j-core disediakan sebagai dependensi dalam aplikasi.
<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>
Membuat pendaftaran Aplikasi Microsoft Entra
Masuk ke langganan Azure Anda melalui Azure CLI. Kemudian autentikasi di browser.
az login
Pilih langganan untuk menghosting perwakilan. Langkah ini diperlukan saat Anda memiliki beberapa langganan.
az account set --subscription YOUR_SUBSCRIPTION_GUID
Buat perwakilan layanan. Dalam contoh ini, perwakilan layanan disebut
my-service-principal
.az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
Dari data JSON yang dikembalikan, salin
appId
,password
, dantenant
untuk penggunaan di masa mendatang.{ "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" }
Anda telah membuat aplikasi Microsoft Entra dan perwakilan layanan Anda.
Memberikan izin aplikasi Microsoft Entra
Di lingkungan kueri Anda, jalankan perintah manajemen berikut, ganti tempat penampung DatabaseName dan ID aplikasi dengan nilai yang disimpan sebelumnya. Perintah ini memberi aplikasi peran ingestor database. Untuk informasi selengkapnya, lihat Mengelola peran keamanan database.
.add database DatabaseName ingestors ('aadappID=12345-abcd-12a3-b123-ccdd12345a1b') 'App Registration'
Catatan
Parameter terakhir adalah string yang muncul sebagai catatan saat Anda mengkueri peran yang terkait dengan database. Untuk informasi selengkapnya, lihat mengelola peran database.
Membuat tabel dan pemetaan penyerapan
Buat tabel target untuk data masuk, memetakan kolom data yang diserap ke kolom dalam tabel target. Dalam langkah-langkah berikut, skema tabel dan pemetaan sesuai dengan data yang dikirim dari aplikasi sampel.
Di editor kueri Anda, jalankan perintah pembuatan tabel berikut, ganti tableName tempat penampung dengan nama tabel target:
.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)
Jalankan perintah pemetaan penyerapan berikut, ganti tableName tempat penampung dengan nama tabel target dan TableNameMapping dengan nama pemetaan penyerapan:
.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}]'
Menambahkan sink Log4j 2 ke aplikasi Anda
Gunakan langkah-langkah berikut untuk:
- Menambahkan sink Log4j 2 ke aplikasi Anda
- Mengonfigurasi variabel yang digunakan oleh sink
- Buat dan jalankan aplikasi
Tambahkan kode berikut ke aplikasi Anda:
package com.microsoft.azure.kusto.log4j.sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
Konfigurasikan sink Log4j 2 dengan menambahkan
KustoStrategy
entri ke file log4j2.xml, mengganti tempat penampung menggunakan informasi dalam tabel berikut:Konektor log4J 2 menggunakan strategi kustom yang digunakan dalam RollingFileAppender. Log ditulis ke dalam file bergulir untuk mencegah kehilangan data yang timbul karena kegagalan jaringan saat menyambungkan ke kluster Kusto. Data disimpan dalam file bergulir dan kemudian disiram ke kluster 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" />
Properti Deskripsi clusterIngestUrl URI penyerapan untuk kluster Anda dalam kluster> formathttps://ingest-<.<region.kusto.windows.net>. dbName Nama peka huruf besar/kecil dari database target. tableName Nama peka huruf besar/kecil dari tabel target yang ada. Misalnya, Log4jTest adalah nama tabel yang dibuat di Membuat tabel dan pemetaan penyerapan. appId ID klien aplikasi diperlukan untuk autentikasi. Anda menyimpan nilai ini di Membuat pendaftaran Aplikasi Microsoft Entra. appKey Kunci aplikasi diperlukan untuk autentikasi. Anda menyimpan nilai ini di Membuat pendaftaran Aplikasi Microsoft Entra. appTenant ID penyewa tempat aplikasi terdaftar. Anda menyimpan nilai ini di Membuat pendaftaran Aplikasi Microsoft Entra. logTableMapping Nama pemetaan. mappingType Jenis pemetaan yang akan digunakan. Defaultnya adalah csv. flushImmediately Jika diatur ke true, sink akan menghapus buffer setelah setiap peristiwa log. Defaultnya adalah false. Untuk opsi lainnya, lihat Opsi Sink.
Kirim data ke Kusto menggunakan sink Log4j 2. Contohnya:
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); } }
Buat dan jalankan aplikasi.
Verifikasi bahwa data berada di kluster Anda. Di lingkungan kueri Anda, jalankan kueri berikut mengganti tempat penampung dengan nama tabel yang digunakan sebelumnya:
<TableName> | take 10
Menjalankan contoh aplikasi
Kloning repositori git log4J 2 menggunakan perintah git berikut:
git clone https://github.com/Azure/azure-kusto-log4j.git
Atur variabel lingkungan berikut untuk mengonfigurasi sink Log4J 2:
Catatan
Dalam proyek sampel yang disertakan dalam repositori git, format konfigurasi default ditentukan dalam file log4j2.xml. File konfigurasi ini terletak di bawah jalur file: \azure-kusto-log4j\samples\src\main\resources\log4j2.xml.
Di terminal Anda, navigasikan ke folder sampel repositori kloning dan jalankan perintah Maven berikut:
mvn compile exec:java -Dexec.mainClass="org.example.KustoLog4JSampleApp"
Di lingkungan kueri Anda, pilih database target, dan jalankan kueri berikut untuk menjelajahi data yang diserap, mengganti tableName tempat penampung dengan nama tabel target:
<TableName> | take 10
Output Anda akan terlihat mirip dengan tabel berikut: