All Products
Search
Document Center

Simple Log Service:Gunakan pernyataan SPL untuk mengumpulkan log teks

Last Updated:Jul 06, 2025

Topik ini menjelaskan cara menggunakan pernyataan Simple Log Service Processing Language (SPL) untuk mengumpulkan log. Dalam kasus ini, pernyataan SPL berfungsi mirip dengan plug-in pemrosesan.

Informasi latar belakang

Perbandingan antara pernyataan SPL dan plug-in asli

Perbandingan antara pernyataan SPL dan plug-in Pemrosesan Data (Mode Regex)

Contoh log:

127.0.0.1 - - [07/Jul/2022:10:43:30 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"

Plug-in Pemrosesan Data (Mode Regex)

Pernyataan SPL

Tentukan ekspresi reguler ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"]*)\" \"([^\"]*)\" untuk mengurai data dalam mode regex dan mengekstrak bidang berikut dari log: ip, time, method, url, request_time, request_length, status, length, ref_url, and browser. Untuk informasi lebih lanjut, lihat Kumpulkan log teks dalam mode regex.

image

Tentukan pernyataan SPL berikut: * | parse-regexp content, '([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"]*)\" \"([^\"]*)\"' as ip, time, method, url, request_time, request_length, status, length, ref_url, browser | project-away content. Dalam pernyataan tersebut, instruksi project-away membuang bidang konten dan instruksi parse-regexp mengekstrak bidang yang ditentukan.

Pratinjau keluaran

{
    "ip": "127.0.0.1",
    "time": "07/Jul/2022:10:43:30",
    "method": "POST",
    "url": "/PutData?Category=YunOsAccountOpLog",
    "request_time": "0.024",
    "request_length": "18204",
    "status": "200",
    "length": "37",
    "ref_url": "-",
    "browser": "aliyun-sdk-java",
    "__time__": "1713184059"
}

Perbandingan antara pernyataan SPL dan plug-in Pemrosesan Data (Mode Delimiter)

Contoh log:

127.0.0.1,07/Jul/2022:10:43:30 +0800,POST,PutData Category=YunOsAccountOpLog,0.024,18204,200,37,-,aliyun-sdk-java

Plug-in Pemrosesan Data (Mode Delimiter)

Pernyataan SPL

Atur parameter Processor Type ke Pemrosesan Data (Mode Delimiter). Pilih Kustom dari daftar drop-down Delimiter dan tentukan koma (,) untuk memisahkan bidang. Untuk informasi lebih lanjut, lihat Kumpulkan log teks dari server.

image

Tentukan pernyataan SPL berikut: *| parse-csv content as ip, time, method, url, request_time, request_length, status, length, ref_url, browser | project-away content. Dalam pernyataan tersebut, instruksi project-away membuang bidang konten dan instruksi parse-csv mengekstrak bidang yang ditentukan.

Pratinjau keluaran

{
    "ip": "127.0.0.1",
    "time": "07/Jul/2022:10:43:30 +0800",
    "method": "POST",
    "url": "PutData?Category=YunOsAccountOpLog",
    "request_time": "0.024",
    "request_length": "18204",
    "status": "200",
    "length": "37",
    "ref_url": "-",
    "browser": "aliyun-sdk-java",
    "__time__": "1713231487"
}

Perbandingan antara pernyataan SPL dan plug-in Pemrosesan Data (Mode JSON)

Contoh log:

{"url": "POST /PutData?Category=YunOsAccountOpLog HTTP/1.1","ip": "10.200.98.220", "user-agent": "aliyun-sdk-java","request": "{\"status\":\"200\",\"latency\":\"18204\"}","time": "07/Jul/2022:10:30:28"}

Plug-in Pemrosesan Data (Mode JSON)

Pernyataan SPL

Untuk informasi lebih lanjut, lihat Kumpulkan log teks dalam mode JSON.

image

Tentukan pernyataan SPL berikut: *| parse-json content| project-away content. Dalam pernyataan tersebut, instruksi project-away membuang bidang konten dan instruksi parse-json mengekstrak bidang yang ditentukan.

Pratinjau keluaran

{
    "url": "POST /PutData?Category=YunOsAccountOpLog HTTP/1.1",
    "ip": "10.200.98.220",
    "user-agent": "aliyun-sdk-java",
    "request": "{"status":"200","latency":"18204"}",
    "time": "07/Jul/2022:10:30:28"
}

Perbandingan antara pernyataan SPL dan kombinasi plug-in Pemrosesan Data (Mode Regex) dan Parsing Waktu

Contoh log:

127.0.0.1 - - [2024-11-05T15:47:05 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"

Kombinasi Plug-in Pemrosesan Data (Mode Regex) dan Parsing Waktu

Pernyataan SPL

  • Tentukan ekspresi reguler ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"]*)\" \"([^\"]*)\" untuk mengurai data dalam mode regex dan mengekstrak bidang berikut dari log: ip, time, method,url, request_time, request_length, status, length, ref_url, and browser. Untuk informasi lebih lanjut, lihat Kumpulkan log teks dalam mode regex.

    image

  • Tentukan time sebagai bidang asli dan %Y-%m-%dT%H:%M:%S sebagai format waktu dalam plug-in Parsing Waktu.

    image

Tentukan pernyataan SPL berikut: * | parse-regexp content, '([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"]*)\" \"([^\"]*)\"' as ip, time, method, url, request_time, request_length, status, length, ref_url, browser| extend ts=date_parse(time, '%Y-%m-%dT%H:%i:%S')| extend __time__=cast(to_unixtime(ts) as INTEGER)-28800| project-away ts| project-away content. Dalam pernyataan tersebut, instruksi project-away membuang bidang konten, instruksi parse-regexp mengekstrak bidang yang ditentukan, dan instruksi date_parse mengurai waktu log.

Perbandingan antara pernyataan SPL dan kombinasi plug-in Pemrosesan Data (Mode Regex) dan Penyaringan Data

Contoh log:

127.0.0.1 - - [2024-11-05T15:47:05 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"

Kombinasi Plug-in Pemrosesan Data (Mode Regex) dan Penyaringan Data

Pernyataan SPL

  • Tentukan ekspresi reguler ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"]*)\" \"([^\"]*)\" untuk mengurai data dalam mode regex dan mengekstrak bidang berikut dari log: ip, time, method,url, request_time, request_length, status, length, ref_url, and browser. Untuk informasi lebih lanjut, lihat Kumpulkan log teks dalam mode regex.

    image

  • Tambahkan bidang status dan method ke daftar putih plug-in Penyaringan Data.

    image

Tentukan pernyataan SPL berikut: *| parse-regexp content, '([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"]*)\" \"([^\"]*)\"' as ip, time, method, url, request_time, request_length, status, length, ref_url, browser| project-away content| where regexp_like(method, '^(POST|PUT)$') and regexp_like(status, '^200$'). Dalam pernyataan tersebut, instruksi project-away membuang bidang konten, instruksi parse-regexp mengekstrak bidang yang ditentukan, dan fungsi regexp_like mengembalikan data yang cocok dengan ekspresi reguler yang ditentukan.

Pratinjau keluaran

{
    "ip": "127.0.0.1",
    "time": "2024-11-05T15:47:05",
    "method": "POST",
    "url": "/PutData?Category=YunOsAccountOpLog",
    "request_time": "0.024",
    "request_length": "18204",
    "status": "200",
    "length": "37",
    "ref_url": "-",
    "browser": "aliyun-sdk-java",
    "__time__": "1713238839"
}

Perbandingan antara pernyataan SPL dan plug-in Masking Data

Contoh log:

{"account":"1812213231432969","password":"04a23f38"}

Plug-in Masking Data

Pernyataan SPL

Tentukan password sebagai bidang yang akan dimasking dalam plug-in Masking Data.

image

Tentukan pernyataan SPL berikut: *| parse-regexp content, 'password":"(\S+)"' as password| extend content=replace(content, password, '******'). Dalam pernyataan tersebut, instruksi project-away membuang bidang konten, instruksi parse-regexp mengekstrak bidang yang ditentukan, dan fungsi replace mengembalikan data yang telah dimasking.

Pratinjau keluaran

{
    "content": "{"account":"1812213231432969","password":"******"}"
}

Perbandingan antara pernyataan SPL dan plug-in ekstensi

Perbandingan antara pernyataan SPL dan plug-in Tambah Bidang

Contoh log:

this is a test log

Plug-in Tambah Bidang

Pernyataan SPL

Secara default, log disimpan di bidang content. Gunakan plug-in Tambah Bidang untuk menambahkan bidang service:A ke log.

image

Tentukan pernyataan SPL berikut: * | extend service='A'. Dalam pernyataan tersebut, instruksi extend menambahkan bidang service:A.

Pratinjau keluaran

{
    "content": "this is a test log",
    "service": "A"
}

Perbandingan antara pernyataan SPL dan kombinasi plug-in Pemrosesan Data (Mode JSON) dan Hapus Bidang

Contoh log:

{"key1": 123456, "key2": "abcd"}

Kombinasi Plug-in Pemrosesan Data (Mode JSON) dan Hapus Bidang

Pernyataan SPL

Tentukan pernyataan SPL berikut: *| parse-json content| project-away content| project-away key1. Dalam pernyataan tersebut, instruksi project-away membuang bidang content dan key1, serta instruksi parse-json mengekstrak bidang yang ditentukan.

Pratinjau keluaran

{
    "key2": "abcd"
}

Perbandingan antara pernyataan SPL dan kombinasi plug-in Pemrosesan Data (Mode JSON) dan Ubah Nama Bidang

Contoh log:

{"key1": 123456, "key2": "abcd"}

Kombinasi Plug-in Pemrosesan Data (Mode JSON) dan Ubah Nama Bidang

Pernyataan SPL

Tentukan pernyataan SPL berikut: *| parse-json content| project-away content| project-rename new_key1=key1. Dalam pernyataan tersebut, instruksi project-away membuang bidang content, instruksi parse-json mengekstrak bidang yang ditentukan, dan instruksi project-rename mengubah nama bidang key1 menjadi new_key1.

Pratinjau keluaran

{
    "new_key1": "123456",
    "key2": "abcd"
}

Perbandingan antara pernyataan SPL dan kombinasi plug-in Pemrosesan Data (Mode JSON) dan Filter Log dengan Ekspresi Reguler (Cocokkan Nilai Bidang Log)

Contoh log:

{"ip": "10.**.**.**", "method": "POST", "browser": "aliyun-sdk-java"}
{"ip": "10.**.**.**", "method": "POST", "browser": "chrome"}
{"ip": "192.168.**.**", "method": "POST", "browser": "aliyun-sls-ilogtail"}

Kombinasi Plug-in Pemrosesan Data (Mode JSON) dan Filter Log dengan Ekspresi Reguler (Cocokkan Nilai Bidang Log)

Pernyataan SPL

Tentukan pernyataan SPL berikut: *| parse-json content| project-away content| where regexp_like(ip, '10\..*') and regexp_like(method, 'POST') and not regexp_like(browser, 'aliyun.*'). Dalam pernyataan tersebut, instruksi project-away membuang bidang content, instruksi parse-json mengekstrak bidang yang ditentukan, dan fungsi regexp_like mengembalikan data yang cocok dengan ekspresi reguler yang ditentukan.

Pratinjau keluaran

{
    "ip": "10.**.**.**",
    "method": "POST",
    "browser": "chrome"
}

Perbandingan antara pernyataan SPL dan kombinasi plug-in Pemrosesan Data (Mode JSON) dan Pemetaan Nilai Bidang

Contoh log:

{"_ip_":"192.168.*.*","Index":"900000003"}
{"_ip_":"255.255.**.**","Index":"3"}

Kombinasi Plug-in Pemrosesan Data (Mode JSON) dan Pemetaan Nilai Bidang

Pernyataan SPL

Tentukan pernyataan SPL berikut: *| parse-json content| project-away content| extend _processed_ip_= CASE WHEN _ip_ = '127.0.*.*' THEN 'LocalHost-LocalHost' WHEN _ip_ = '192.168.*.*' THEN 'default login' ELSE 'Not Detected' END. Dalam pernyataan tersebut, instruksi project-away membuang bidang content, instruksi parse-json mengekstrak bidang yang ditentukan, dan instruksi extend menambahkan bidang baru.

Pratinjau keluaran

{
    "_ip_": "192.168.*.*",
    "Index": "900000003",
    "_processed_ip_": "default login"
}

Perbandingan antara pernyataan SPL dan plug-in Penggantian String

Contoh log:

hello,how old are you?  nice to meet you

Plug-in Penggantian String

Pernyataan SPL

Gunakan Plug-in Penggantian String untuk mengganti how old are you? dengan NULL.

image

Tentukan pernyataan SPL berikut: *| extend content=replace(content, 'how old are you?', ''). Dalam pernyataan tersebut, instruksi extend mengganti how old are you? dengan NULL.

Pratinjau keluaran

{
    "content": "hello, nice to meet you"
}

Perbandingan antara pernyataan SPL dan plug-in pengkodean data

Contoh log:

this is a test log

Pengkodean Base64

Plug-in BASE64 (Pengkodean)

Pernyataan SPL

Untuk informasi lebih lanjut, lihat BASE64 (Pengkodean).

Tentukan pernyataan berikut: *| extend content1=to_base64(cast(content as varbinary)). Dalam pernyataan tersebut, instruksi extend menambahkan bidang content1 dan fungsi to_base64 mengkodekan data dalam Base64.

Pratinjau keluaran
{
    "content": "this is a test log",
    "content1": "dGhpcyBpcyBhIHRlc3QgbG9n"
}

Pengkodean MD5

Plug-in MD5

Pernyataan SPL

Untuk informasi lebih lanjut, lihat MD5.

Tentukan pernyataan SPL berikut: *| extend test=lower(to_hex(md5(cast(content as varbinary)))). Dalam pernyataan tersebut, instruksi extend menambahkan bidang test dan fungsi md5 menghitung nilai hash MD5 untuk data.

Pratinjau keluaran
{
    "content": "this is a test log",
    "content1": "4f3c93e010f366eca78e00dc1ed08984"
}

Kemampuan baru

Perhitungan matematika

  • Contoh log

    4
  • Pernyataan SPL

    Fungsi cast mengonversi nilai suatu bidang ke tipe data tertentu. Untuk informasi lebih lanjut tentang fungsi power, round, dan sqrt, lihat Fungsi Perhitungan Matematika.

    *
    | extend val = cast(content as double)
    | extend power_test = power(val, 2)
    | extend round_test = round(val)
    | extend sqrt_test = sqrt(val)
  • Pratinjau Keluaran

    {
        "content": "4",
        "power_test": 16.0,
        "round_test": 4.0,
        "sqrt_test": 2.0,
        "val": 4.0
    }

Perhitungan berbasis URL

Pengkodean dan Dekode URL

  • Contoh log

    https://home.console.alibabacloud.com/home/dashboard/ProductAndService
  • Pernyataan SPL

    Untuk informasi lebih lanjut tentang fungsi url_encode dan url_decode, lihat Fungsi URL.

    *
    | extend encoded = url_encode(content)
    | extend decoded = url_decode(encoded)
  • Pratinjau Keluaran

    {
        "content": "https://home.console.alibabacloud.com/home/dashboard/ProductAndService",
        "decoded": "https://home.console.alibabacloud.com/home/dashboard/ProductAndService",
        "encoded": "https%3A%2F%2Fhome.console.alibabacloud.com%2Fhome%2Fdashboard%2FProductAndService"
    }

Ekstraksi URL

  • Contoh log

    https://sls.console.alibabacloud.com:443/lognext/project/dashboard-all/logsearch/nginx-demo?accounttraceid=d6241a173f88471c91d3405cda010ff5ghdw
  • Pernyataan SPL

    Untuk informasi lebih lanjut tentang fungsi yang digunakan dalam pernyataan SPL berikut, lihat Fungsi URL.

    *
    | extend host = url_extract_host(content)
    | extend query = url_extract_query(content)
    | extend path = url_extract_path(content) 
    | extend protocol = url_extract_protocol(content) 
    | extend port = url_extract_port(content) 
    | extend param = url_extract_parameter(content, 'accounttraceid')
  • Pratinjau Keluaran

    {
        "content": "https://sls.console.alibabacloud.com:443/lognext/project/dashboard-all/logsearch/nginx-demo?accounttraceid=d6241a173f88471c91d3405cda010ff5ghdw",
        "host": "sls.console.alibabacloud.com",
        "param": "d6241a173f88471c91d3405cda010ff5ghdw",
        "path": "/lognext/project/dashboard-all/logsearch/nginx-demo",
        "port": "443",
        "protocol": "https",
        "query": "accounttraceid=d6241a173f88471c91d3405cda010ff5ghdw"
    }

Operator perbandingan dan logika

  • Contoh log

    {"num1": 199, "num2": 10, "num3": 9}
  • Pernyataan SPL

    Fungsi cast mengonversi nilai suatu bidang ke tipe data tertentu dan instruksi parse-json mengekstrak bidang yang ditentukan.

    *
    | parse-json content
    | extend compare_result = cast(num1 as double) > cast(num2 as double) AND cast(num2 as double) > cast(num3 as double)
  • Pratinjau Keluaran

    {
        "compare_result": "true",
        "content": "{"num1": 199, "num2": 10, "num3": 9}",
        "num1": "199",
        "num2": "10",
        "num3": "9"
    }