Menganalisis log kesalahan Java dalam skenario data besar dan konkurensi tinggi membantu mengurangi biaya O&M. Simple Log Service mengumpulkan log kesalahan Java dari layanan Alibaba Cloud dan menguraikannya menggunakan transformasi data.
Prasyarat
Log kesalahan Java dari SLS, OSS, SLB, dan ApsaraDB RDS telah dikumpulkan dan disimpan dalam Logstore bernama cloud_product_error_log. Untuk informasi selengkapnya, lihat Gunakan Logtail untuk mengumpulkan log.
Kasus penggunaan
Sebagai contoh, Anda telah mengembangkan aplikasi Java bernama Application A yang menggunakan beberapa layanan Alibaba Cloud, seperti OSS dan SLS. Anda telah membuat Logstore bernama cloud_product_error_log di Wilayah China (Hangzhou) untuk menyimpan log kesalahan Java yang dihasilkan oleh panggilan API ke layanan-layanan tersebut. Untuk memperbaiki kesalahan Java secara efisien, Anda perlu menganalisis log kesalahan tersebut secara berkala menggunakan Simple Log Service.
Untuk memenuhi kebutuhan ini, uraikan informasi waktu log, kode kesalahan, kode status, informasi layanan, pesan kesalahan, metode permintaan, dan nomor baris kesalahan dari log yang telah dikumpulkan. Kemudian simpan log yang telah diurai tersebut ke Logstore masing-masing layanan untuk analisis kesalahan.
Berikut ini adalah contoh log mentah:
__source__:192.0.2.10
__tag__:__client_ip__:203.0.113.10
__tag__:__receive_time__:1591957901
__topic__:
message: 2021-05-15 16:43:35 ParameterInvalid 400
com.aliyun.openservices.log.exception.LogException:The body is not valid json string.
at com.aliyun.openservice.log.Client.ErrorCheck(Client.java:2161)
at com.aliyun.openservice.log.Client.SendData(Client.java:2312)
at com.aliyun.openservice.log.Client.PullLogsk(Client.java:1397)
at com.aliyun.openservice.log.Client.SendData(Client.java:2265)
at com.aliyun.openservice.log.Client.GetCursor(Client.java:1123)
at com.aliyun.openservice.log.Client.PullLogs(Client.java:2161)
at com.aliyun.openservice.log.Client.ErrorCheck(Client.java:2426)
at transformEvent.main(transformEvent.java:2559)
Alur kerja
Logtail mengumpulkan log kesalahan dari Application A dan mengirimkannya ke Logstore bernama cloud_product_error_log. Log tersebut kemudian diproses menggunakan transformasi data dan dikirimkan ke Logstore masing-masing untuk dianalisis. Alur kerja keseluruhan adalah sebagai berikut:
-
Rancang pernyataan transformasi data: Analisis data dan tulis pernyataan transformasi.
-
Buat pekerjaan transformasi data: Distribusikan log ke Logstore berdasarkan layanan untuk analisis kesalahan.
-
Lakukan kueri dan analisis data: Analisis log kesalahan di Logstore masing-masing layanan.
Langkah 1: Rancang pernyataan transformasi data
Proses transformasi
Untuk menganalisis log kesalahan:
-
Ambil timestamp, kode kesalahan, kode status, informasi layanan, pesan kesalahan, metode permintaan, dan nomor baris kesalahan dari bidang
message. -
Simpan log kesalahan ke Logstore masing-masing layanan.

Logika transformasi
Analisis timestamp, kode kesalahan, kode status, informasi layanan, pesan kesalahan, metode permintaan, dan nomor baris kesalahan dalam log mentah. Lalu rancang ekspresi reguler untuk mengekstraksi bidang-bidang tersebut.
Referensi sintaksis
-
Gunakan fungsi
regex_matchuntuk memeriksa apakah entri log berisiLogException. Untuk informasi selengkapnya, lihat regex_match. -
Jika log cocok dengan
LogException, log tersebut diproses sesuai aturan penguraian untuk log kesalahan SLS. Jika cocok denganOSSException, log tersebut diproses sesuai aturan untuk log kesalahan OSS. Untuk informasi selengkapnya, lihat e_switch. -
Gunakan fungsi
e_regexuntuk mengurai log kesalahan yang sesuai dengan ekspresi reguler. Untuk informasi selengkapnya, lihat e_regex. -
Hapus bidang
messageasli dan kirimkan data yang telah diurai ke Logstore layanan yang sesuai. Untuk informasi selengkapnya, lihat e_drop_fields dan e_output. -
Untuk informasi selengkapnya, lihat Groups in regular expressions.
Analisis sintaksis
Contoh berikut menunjukkan cara mengurai log kesalahan SLS menggunakan ekspresi reguler:
Sintaksis transformasi lengkap adalah sebagai berikut:
e_switch(
regex_match(v("message"), r"LogException"),
e_compose(
e_regex(
"message",
"(?P<data_time>\S+\s\S+)\s(?P<error_code>[a-zA-Z]+)\s(?P<status>[0-9]+)\scom\.aliyun\.openservices\.log\.exception\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9:,\-\s]+)\.(\s+\S+\s\S+){5}\s+\S+\scom\.aliyun\.openservices\.log\.Client\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java\:(?P<error_line>[0-9]+)\)",
),
e_drop_fields("message"),
e_output("sls-error"),
),
regex_match(v("message"), r"OSSException"),
e_compose(
e_regex(
"message",
"(?P<data_time>\S+\s\S+)\scom\.aliyun\.oss\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9,\s]+)\.\n\[ErrorCode\]\:\s(?P<error_code>[a-zA-Z]+)\n\[RequestId\]\:\s(?P<request_id>[a-zA-Z0-9]+)\n\[HostId\]\:\s(?P<host_id>[a-zA-Z-.]+)\n\S+\n\S+(\s\S+){3}\n\s+\S+\s+(.+)(\s+\S+){24}\scom\.aliyun\.oss\.OSSClient\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java:(?P<error_line>[0-9]+)\)",
),
e_drop_fields("message"),
e_output("oss-error"),
),
)
Langkah 2: Buat pekerjaan transformasi data
-
Navigasi ke halaman transformasi data.
Pada bagian Projects, klik proyek yang Anda inginkan.
Pada tab , klik logstore yang Anda inginkan.
-
Pada halaman kueri dan analisis, klik Data Transformation.
-
Di pojok kanan atas halaman, pilih rentang waktu untuk data log.
Pastikan bahwa log tersedia pada tab Raw Logs.
-
Masukkan pernyataan transformasi data ke dalam editor.
e_switch( regex_match(v("message"), r"LogException"), e_compose( e_regex( "message", "(?P<data_time>\S+\s\S+)\s(?P<error_code>[a-zA-Z]+)\s(?P<status>[0-9]+)\scom\.aliyun\.openservices\.log\.exception\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9:,\-\s]+)\.(\s+\S+\s\S+){5}\s+\S+\scom\.aliyun\.openservices\.log\.Client\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java\:(?P<error_line>[0-9]+)\)", ), e_drop_fields("message"), e_output("sls-error"), ), regex_match(v("message"), r"OSSException"), e_compose( e_regex( "message", "(?P<data_time>\S+\s\S+)\scom\.aliyun\.oss\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9,\s]+)\.\n\[ErrorCode\]\:\s(?P<error_code>[a-zA-Z]+)\n\[RequestId\]\:\s(?P<request_id>[a-zA-Z0-9]+)\n\[HostId\]\:\s(?P<host_id>[a-zA-Z-.]+)\n\S+\n\S+(\s\S+){3}\n\s+\S+\s+(.+)(\s+\S+){24}\scom\.aliyun\.oss\.OSSClient\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java:(?P<error_line>[0-9]+)\)", ), e_drop_fields("message"), e_output("oss-error"), ), ) -
Klik Preview Data.
__source__: xxx __tag__:__client_ip__: xxx __tag__:__receive_time__: 1590978615 __topic__: data_time: 2020-05-16 18:30:06 error_code: AccessDenied error_line: 399 error_message: You are forbidden to list buckets host_id: xxx.oss-cn-hangzhou.aliyuncs.com method: getBucket product_exception: OSSException request_id: YGYLUM9LG2USA6M7HYUBT1L0 -
Buat pekerjaan transformasi data.
-
Klik Save as Transformation Job.
-
Pada panel Create Data Transformation Job, konfigurasikan parameter berikut lalu klik OK.
Parameter
Deskripsi
Job name
Nama pekerjaan transformasi data. Misalnya, masukkan test.
Authorization method
Pilih Default Role untuk memberikan izin membaca data dari Logstore sumber.
Storage target
Target name
Nama target penyimpanan. Misalnya, masukkan sls-error dan oss-error.
Target region
Pilih wilayah proyek tujuan. Misalnya, pilih China (Hangzhou).
Target project
Proyek tujuan untuk data hasil transformasi.
Target store
Logstore tujuan untuk data hasil transformasi. Misalnya, masukkan sls-error dan oss-error.
Authorization method
Pilih default role untuk memberikan izin menulis hasil transformasi data ke Logstore tujuan.
Processing range
Time range
Pilih All untuk rentang waktu.
Setelah Anda membuat pekerjaan transformasi data, Simple Log Service secara default membuat dashboard untuk pekerjaan tersebut. Anda dapat melihat metrik pekerjaan pada dashboard tersebut.
Grafik Exception Detail menunjukkan entri log mana yang gagal diurai, sehingga membantu Anda menyempurnakan ekspresi reguler Anda.
-
Log tingkat WARNING menunjukkan kegagalan penguraian yang tidak menghentikan pekerjaan.
-
Log tingkat ERROR menghentikan pekerjaan. Identifikasi dan selesaikan masalah tersebut, lalu modifikasi ekspresi reguler hingga pekerjaan dapat mengurai semua jenis log kesalahan.
-
Langkah 3: Analisis data log kesalahan
Setelah log kesalahan mentah ditransformasi, Anda dapat menganalisis data terstruktur tersebut. Bagian ini menggunakan log kesalahan Java dari Simple Log Service sebagai contoh.
Pada bagian Projects, klik proyek yang Anda inginkan.

Pada tab , klik logstore yang Anda inginkan.

-
Masukkan pernyataan kueri ke dalam kotak pencarian.
-
Hitung jumlah kesalahan untuk setiap metode.
* | SELECT COUNT(method) as m_ct, method GROUP BY method -
Temukan pesan kesalahan paling umum untuk metode
PutLogs.* | SELECT error_message,COUNT(error_message) as ct_msg, method WHERE method LIKE 'PutLogs' GROUP BY error_message,method -
Hitung kemunculan setiap kode kesalahan.
* | SELECT error_code,COUNT(error_code) as count_code GROUP BY error_code -
Buat garis waktu kesalahan untuk melihat informasi kesalahan panggilan API secara real time.
* | SELECT date_format(data_time, '%Y-%m-%d %H:%m:%s') as date_time,status,product_exception,error_line, error_message,method ORDER BY date_time desc
-
-
Klik 15Minutes(Relative) untuk mengatur rentang waktu kueri.
Anda dapat menentukan waktu relatif, jangka waktu, atau rentang waktu kustom.
CatatanHasil kueri mungkin memiliki margin kesalahan hingga satu menit.
-
Klik Search & Analyze untuk melihat hasil kueri dan analisis.