全部产品
Search
文档中心

Simple Log Service:Gunakan SPL untuk menanyakan dan menganalisis log

更新时间:Jul 06, 2025

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.4

Contoh

Catatan
  • 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) > 50
  • Cocokan 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, Uri
  • Hapus bidang tertentu dan pertahankan sisanya

    Status:200 | project-away UserAgent
  • Ubah 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 Payload
  • Perluas bidang JSON dan buang yang asli

    status:200 
    | parse-json body 
    | project-away body
  • Ekstrak 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, Uri

Perbandingan 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:

  • Jumlah log yang diidentifikasi mencapai jumlah log yang ditentukan untuk dikembalikan.

    Anda dapat menentukan jumlah log yang ingin Anda kembalikan untuk operasi query di konsol Simple Log Service atau dengan memanggil SDK.

  • Jumlah log yang discan melebihi batas atas yang secara otomatis ditentukan untuk scan saat ini. Secara default, ukuran hasil pernyataan pencarian adalah 10.000.

  • Durasi scan melebihi 45 detik.

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

Penting

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.