Simple Log Service menyediakan fitur kueri berbasis pemindaian yang memungkinkan Anda mencari log menggunakan bidang tertentu tanpa perlu konfigurasi indeks. Fitur ini juga mendukung pernyataan Simple Log Service Processing Language (SPL) untuk menyaring, mengonversi, dan mengurai hasil. Topik ini menjelaskan sintaksis dasar untuk kueri berbasis pemindaian.
Cara kerjanya
Setelah menerima permintaan analisis berbasis pemindaian, Simple Log Service menjalankan langkah-langkah berikut:
Menjalankan pernyataan pencarian untuk mengambil log.
PentingPernyataan pencarian di pipa tingkat pertama bergantung pada kueri berbasis indeks. Gunakan
*jika tidak diperlukan penyaringan indeks. Sebagai contoh, sebelum menjalankanstatus:200 | WHERE userId = '123' | extend host=upper(hostname), Anda harus membuat indeks untuk bidangstatus, tetapi tidak untuk bidanguserIdatauhostname.Menjalankan pernyataan SPL pada hasil pencarian dan mengembalikan hasil akhir. Sebagai contoh, Anda dapat menggunakan pernyataan SPL untuk menyaring, mengonversi, dan mengurai data.
Sintaksis dasar
Kueri berbasis pemindaian mendukung sintaksis SPL. Pernyataan SPL memungkinkan Anda mengekstrak informasi terstruktur, melakukan operasi bidang, dan menyaring data dari data mentah yang dibaca. Fitur ini juga mendukung kaskade pipa multi-level. Pipa tingkat pertama adalah kondisi filter indeks, diikuti oleh instruksi SPL di level selanjutnya. Hasil akhir adalah data yang diproses oleh SPL.
Pernyataan pencarian berbasis indeks | <spl-cmd> ... | <spl-cmd> ...Contoh log
Bidang mentah: dilabeli [R], berlaku untuk pencarian pemindaian.
Bidang indeks: dilabeli , 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: 1.705.029.260
[R] EndTime: 1.705.028.561
[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 tanda petik 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/kecil
__topic__: nginx-access-log | where lower(Method) != 'put'Pencocokan kabur
Status: 200 | where UserAgent like '%Macintosh%'Perbandingan numerik
Perhatikan bahwa tipe bidang default adalah varchar. Konversikan tipe menjadi bigint sebelum melakukan perbandingan numerik.
Status: 200 | where cast(RT as bigint) > 50Pencocokan ekspresi reguler
# Temukan URI yang mengandung "path-number" Status: 200 | where regexp_like(Uri, 'path-\d+')
Menghitung 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)
Simpan, hapus, dan ubah nama bidang
Simpan hanya bidang tertentu dan hapus sisanya
Status:200 | project Status, UriHapus bidang tertentu dan simpan 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 satu pernyataan pencarian menggunakan kaskade pipa multi-level, yang 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, UriBatasan
Eksekusi pernyataan SPL untuk kueri berbasis pemindaian dibatasi. Untuk informasi lebih lanjut, lihat Batasan.
Pemindahan halaman acak tidak didukung.
Perbandingan antara kueri berbasis indeks dan pemindaian
Item | Kueri Berbasis Indeks | Kueri Berbasis Pemindaian |
Sintaksis |
|
|
Konfigurasi Indeks Diperlukan | Ya. | Pernyataan pencarian berbasis indeks memerlukan indeks, sedangkan pernyataan lainnya tidak. |
Pernyataan Analitik Didukung | Ya. | Ya. |
Paginasi Acak Didukung | Ya. | Tidak. Paginasi acak tidak didukung. Hanya paginasi kontinu (maju atau mundur) yang diizinkan. |
Histogram Log | Ditampilkan berdasarkan hasil dari pernyataan pencarian. | Ditampilkan berdasarkan hasil dari pernyataan pencarian dan kemajuan pemindaian. |
Operator dan Fungsi | Operasi logika dan matematika, serta pencarian kabur didukung. Fungsi SQL tidak didukung. | Untuk detailnya, lihat Instruksi SPL dan Fungsi SQL yang Didukung SPL. |
Tipe Bidang | Ditentukan oleh tipe data yang ditentukan dalam konfigurasi indeks. | Sistem menganggap tipe bidang dalam pernyataan SPL sebagai teks terlepas dari apakah indeks dikonfigurasikan untuk bidang tersebut. Untuk informasi lebih lanjut, lihat Konversi Tipe Data. |
Ukuran Hasil | Jumlah log yang akan dikembalikan dapat ditentukan di konsol Simple Log Service atau dengan memanggil SDK. Jumlah maksimum adalah 100. | Jika salah satu dari kondisi berikut terpenuhi, sistem menghentikan pemindaian 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 dikenakan biaya untuk pemindaian berdasarkan lalu lintas pemindaian, yang setara dengan jumlah data yang dikembalikan setelah pemindaian. Sistem mengidentifikasi log berdasarkan hasil dari kueri berbasis indeks. |