Anda dapat menggunakan Simple Log Service Processing Language (SPL) untuk mengekstrak data terstruktur, memproses bidang, dan menyaring data dalam log. Untuk informasi lebih lanjut, lihat Ikhtisar SPL. Simple Log Service mendukung pemrosesan data multi-level berdasarkan SPL dan memungkinkan Anda mengekspor data hasil setelah pemrosesan.
Informasi latar belakang
Jika bidang dalam pernyataan SPL diindeks dan Enable Analytics diaktifkan untuk bidang tersebut, Anda dapat menggunakan SPL untuk menanyakan dan menganalisis log dalam mode indeks. Jika bidang dalam pernyataan SPL tidak diindeks, Anda dapat menggunakan SPL untuk menanyakan dan menganalisis log dalam mode scan. Untuk informasi lebih lanjut, lihat Ikhtisar pencarian berbasis scan.
Sintaksis dasar
Pencarian berbasis scan mendukung sintaksis SPL. Pernyataan SPL memungkinkan Anda mengekstrak informasi terstruktur, melakukan operasi bidang, dan menyaring data dari data mentah yang dibaca. Ini juga mendukung kaskade pipa multi-level. Pipa tingkat pertama adalah kondisi filter indeks, diikuti oleh instruksi SPL di level berikutnya. Hasil akhirnya adalah data yang diproses oleh SPL.
Pernyataan pencarian berbasis indeks | <spl-cmd> ... | <spl-cmd> ...Contoh log
Bidang mentah: diberi label [R], berlaku untuk pencarian scan.
Bidang indeks: diberi label , berlaku untuk pencarian indeks.
[I] __topic__: nginx-access-log
[I] Status: 200
[I] Host: api.abc.com
[R] Method: PUT
[R] ClientIp: 192.168.1.1
[R] Payload: {"Item": "1122", "UserId": "112233", "Operation": "AddCart"}
[R] BeginTime: 1705029260
[R] EndTime: 1705028561
[R] RT: 87
[R] Uri: /request/path-3/file-1
[R] UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4Contoh
Dalam pernyataan SPL, string konstan diapit dengan tanda kutip tunggal ('), seperti
* | where ClientIp = '192.168.1.1'.Jika nama bidang mencakup karakter khusus, apit dengan tanda kutip ganda ("), seperti
* | project-away "user-agent".
Filter berdasarkan kondisi berbeda
Perbandingan kesetaraan
Status: 200 | where ClientIp = '192.168.1.1'Pencarian tanpa memperhatikan huruf besar atau kecil
__topic__: nginx-access-log | where lower(Method) != 'put'Cocokan kabur
Status: 200 | where UserAgent like '%Macintosh%'Perbandingan numerik
Catatan bahwa tipe bidang default adalah varchar. Ubah tipe menjadi bigint sebelum melakukan perbandingan numerik.
Status: 200 | where cast(RT as bigint) > 50Cocokan ekspresi reguler
# Temukan URI yang mengandung "path-number" Status: 200 | where regexp_like(Uri, 'path-\d+')
Hitung bidang baru
Silakan berikan teks bahasa Inggris yang perlu diterjemahkan ke dalam bahasa Indonesia.Hitung bidang baru dari yang sudah ada menggunakan instruksi extend.
Ekstrak bidang menggunakan ekspresi reguler
# Ekstrak nomor file dari bidang Uri * not Status: 200 | extend fileNumber=regexp_extract(Uri, 'file-(\d+)', 1)Ekstrak bidang dari JSON
Status:200 | extend Item = json_extract_scalar(Payload, '$.Item')Ekstrak bidang berdasarkan pemisah
Status:200 | extend urlParam=split_part(Uri, '/', 3)Hitung bidang baru dari beberapa nilai bidang
# Hitung selisih waktu berdasarkan BeginTime dan EndTime Status:200 | extend timeRange = cast(BeginTime as bigint) - cast(EndTime as bigint)
Pertahankan, hapus, dan ubah nama bidang
Pertahankan hanya bidang tertentu dan hapus sisanya
Status:200 | project Status, UriHapus bidang tertentu dan pertahankan sisanya
Status:200 | project-away UserAgentUbah nama bidang
Status:200 | project-rename Latency=RT
Perluas data tak terstruktur
Perluas semua bidang dalam JSON
# Filter Payload yang tidak kosong dan perluas semua bidang JSON __topic__: nginx-access-log | where Payload is not null | parse-json PayloadPerluas bidang JSON dan buang yang asli
status:200 | parse-json body | project-away bodyEkstrak beberapa bidang menggunakan ekspresi reguler
Status:200 | parse-regexp Uri, 'path-(\d+)/file-(\d+)' as pathIndex, fileIndex
Kaskade pipa multi-level
Anda dapat melakukan semua operasi yang disebutkan di atas dalam pernyataan pencarian yang sama menggunakan kaskade pipa multi-level, dieksekusi secara berurutan.
Status:200
| where Payload is not null
| parse-json Payload
| project-away Payload
| where Host='api.qzzw.com' and cast(RT as bigint) > 80
| extend timeRange=cast(BeginTime as bigint) - cast(EndTime as bigint)
| where timeRange > 500
| project UserId, UriPerbandingan antara SPL berbasis indeks dan SPL berbasis scan
Jika bidang dalam pernyataan SPL diindeks dan Enable Analytics diaktifkan untuk bidang tersebut, Anda dapat menggunakan SPL untuk menanyakan dan menganalisis log dalam mode indeks. Sebaliknya, Anda dapat menggunakan SPL untuk menanyakan dan menganalisis log dalam mode scan.
Item | SPL Berbasis Indeks | SPL Berbasis Scan |
Apakah indeks perlu dibuat | Indeks harus dibuat untuk bidang dalam pernyataan SPL, dan Enable Analytics harus diaktifkan untuk bidang tersebut. | Tidak. Penting Pernyataan pencarian berbasis indeks memerlukan indeks. |
Kinerja | Tinggi. | Sedang. |
Dukungan untuk halaman acak | Didukung. | Tidak didukung. |
Histogram log | Histogram log ditampilkan berdasarkan hasil pernyataan pencarian. | Histogram log ditampilkan berdasarkan hasil pernyataan pencarian dan kemajuan scan. |
Operator dan fungsi | Untuk informasi lebih lanjut, lihat Instruksi SPL dan Fungsi SQL yang didukung SPL. | Untuk informasi lebih lanjut, lihat Instruksi SPL dan Fungsi SQL yang didukung SPL. |
Tipe bidang | Sistem menganggap tipe bidang dalam pernyataan SPL sebagai teks. Untuk informasi lebih lanjut, lihat Konversi tipe data. | Sistem menganggap tipe bidang dalam pernyataan SPL sebagai teks. Untuk informasi lebih lanjut, lihat Konversi tipe data. |
Ukuran hasil | Anda dapat menentukan jumlah log yang ingin Anda kembalikan untuk operasi query di konsol Simple Log Service atau dengan memanggil SDK. Anda dapat menentukan hingga 100 log. | Jika salah satu dari kondisi berikut terpenuhi, sistem akan menghentikan scan saat ini dan mengembalikan hasil:
|
Biaya | Anda dikenakan biaya untuk lalu lintas indeks dan penyimpanan indeks. Untuk informasi lebih lanjut, lihat Item tagihan pay-by-feature. Anda tidak dikenakan biaya untuk menggunakan SPL. | Anda dikenakan biaya untuk scan berdasarkan lalu lintas scan, yang setara dengan jumlah data yang dikembalikan setelah scanning. Sistem mengidentifikasi log berdasarkan hasil query berbasis indeks. |
Metode operasi
Sebelum Anda menanyakan log, pastikan bahwa log telah dikumpulkan dan indeks telah dibuat. Indeks adalah struktur penyimpanan yang digunakan untuk mengurutkan satu atau lebih kolom data log. Untuk informasi lebih lanjut, lihat Buat indeks.
Konsol
Masuk ke konsol Simple Log Service. Buka halaman query dan analisis Logstore dan jalankan pernyataan query. Untuk informasi lebih lanjut, lihat Query dan analisis log.
Contoh
Jumlah log mentah adalah 10 juta. Pernyataan SPL adalah Status:200 | where Category like '%xx%'. Total 1.000 log yang memenuhi kondisi Status:200 dan where Category like '%xx%' dikembalikan. Histogram log pada halaman query dan analisis menampilkan distribusi 1.000 log tersebut seiring waktu berdasarkan hasil query.
API
Gunakan operasi GetLogs atau GetLogsV2 untuk meminta log. Hasil query dari operasi GetLogs dikembalikan tanpa kompresi, sedangkan hasil query dari operasi GetLogsV2 dikompresi sebelum dikembalikan.