Todos os produtos
Search
Central de documentação

Simple Log Service:Use SPL para coletar logs de texto

Última atualização: Sep 15, 2026

Este tópico explica como usar SPL para replicar a funcionalidade dos plugins de processamento.

Informações básicas

SPL vs. plugins nativos

Análise com regex

Log de exemplo:

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

Análise com regex

SPL

O plugin Data Parsing (Regex Mode) usa a expressão regular `([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+

-) \"([^\"])\" \"([^\"])\"` para extrair os seguintes campos: ip,time,method,url,request_time,request_length,status,length,ref_url,browser. Para mais informações, consulte Collect text logs in regex mode.

Instrução SPL: `*

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`. Nesta instrução, as SPL instructions and functions descartam o campo original content e as SPL instructions and functions extraem os campos.

Visualização da saída

{
    "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"
}

Análise com delimitador

Log de exemplo:

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

Análise com delimitador

SPL

O plugin Data Parsing (Delimiter Mode) analisa o log usando vírgula (,) como delimitador. Para mais informações, consulte Collect text logs from servers.

Instrução SPL: `*

parse-csv content as ip, time, method, url, request_time, request_length, status, length, ref_url, browser

project-away content`. Nesta instrução, as SPL instructions and functions descartam o campo content original e as SPL instructions and functions extraem os campos.

Visualização da saída

{
    "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"
}

Análise de JSON

Log de exemplo:

{"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"}

Análise de JSON

SPL

Para mais informações, consulte Collect text logs in JSON mode.

Selecione Data Parsing (JSON Mode) plugin como tipo de plugin de processamento e defina o campo original como content.

Instrução SPL: `*

parse-json content

project-away content`. Nesta instrução, as SPL instructions and functions descartam o campo content original e as SPL instructions and functions extraem os campos.

Visualização da saída

{
    "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"
}

Análise com regex e tempo

Log de exemplo:

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

Análise com regex e tempo

SPL

  • O plugin Data Parsing (Regex Mode) usa a expressão regular ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"])\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"])\" \"([^\"]*)\" para extrair os seguintes campos: ip,time,method,url,request_time,request_length,status,length,ref_url,browser. Para mais informações, consulte Collect text logs in regex mode.

  • Use os Time-processing plugins. Defina o Original Field como time e o Time Format como %Y-%m-%dT%H:%M:%S.

Instrução SPL: | parse-regexp content, '([\d\.]+) \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. Nesta instrução, as SPL instructions and functions descartam o campo content original, as SPL instructions and functions extraem os campos e a função date_parse analisa o tempo no log.

Análise com regex e filtragem de dados

Log de exemplo:

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

Análise com regex e filtragem de dados

SPL

  • O plugin Data Parsing (Regex Mode) usa a expressão regular ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\"])\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\"])\" \"([^\"]*)\" para extrair os seguintes campos: ip,time,method,url,request_time,request_length,status,length,ref_url,browser. Para mais informações, consulte Collect text logs in regex mode.

  • Use o Data filtering plugin e adicione os campos status e method à lista de permissões.

    O valor do campo method na lista de permissões corresponde a ^(POST|PUT)$, e o valor do campo status corresponde a ^200$. Essas condições são avaliadas com um AND lógico; portanto, uma entrada de log é coletada apenas se todas as condições forem atendidas.

Instrução SPL:| 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$'). Nela, as SPL instructions and functions descartam o campo content original, as SPL instructions and functions extraem os campos e a regexp_like function identifica dados que correspondem às expressões regulares.

Visualização da saída

{
    "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"
}

Mascaramento de dados

Log de exemplo:

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

Mascaramento de dados

SPL

Use os Data masking and encryption plugins para mascarar o campo password.

O campo original é content, o método de mascaramento é const, a string de substituição é , a expressão para o conteúdo anterior é password".", a expressão para o conteúdo a ser substituído é [^"]+ e a opção Replace all matches está selecionada.

Instrução SPL: `*

parse-regexp content, 'password":"(\S+)"' as password

extend content=replace(content, password, '')`. Nesta instrução, as SPL instructions and functions substituem o campo content original, as SPL instructions and functions extraem um campo e a função replace substitui o valor por dados mascarados.

Visualização da saída

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

SPL vs. plugins estendidos

Adicionar campo

Log de exemplo:

this is a test log

Adicionar campo

SPL

Por padrão, o log é armazenado no campo content. Use os Field processing plugins para adicionar o campo service: A.

Instrução SPL: `*

extend service='A'`. Esta instrução usa as SPL instructions and functions para adicionar o campo service: A.

Visualização da saída

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

Análise de JSON e remoção de campo

Log de exemplo:

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

Análise de JSON e remoção de campo

SPL

  • Collect text logs in JSON mode.

    Defina o tipo de plugin de processamento como Data Parsing (JSON Mode) plugin e o campo original como content.

  • Field processing plugins.

    Selecione Drop Field plugin como tipo de plugin de processamento e defina o nome do campo a ser removido como key1.

Instrução SPL: *| parse-json content| project-away content| project-away key1. Nesta instrução, as SPL instructions and functions descartam os campos originais content e key1, e as SPL instructions and functions extraem os campos.

Visualização da saída

{
    "key2": "abcd"
}

Análise de JSON e renomeação de campos

Log de exemplo:

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

Análise de JSON e renomeação de campos

SPL

  • Collect text logs in JSON mode.

    Para o tipo de plugin de processamento, selecione Data Parsing (JSON Mode) plugin e defina o campo original como content.

  • Field processing plugins

    Para o plugin de processamento, selecione o Rename Fields plugin, defina o campo original como key1 e defina o campo resultante como new_key1.

Instrução SPL: *| parse-json content| project-away content| project-rename new_key1=key1. Nesta instrução, as SPL instructions and functions descartam o campo original content, as SPL instructions and functions extraem os campos e as SPL instructions and functions renomeiam o campo key1 para new_key1.

Visualização da saída

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

Análise de JSON e filtragem de logs

Log de exemplo:

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

Análise de JSON e filtragem de logs

SPL

  • Collect text logs in JSON mode.

    Para o tipo de plugin de processamento, selecione Data Parsing (JSON Mode) plugin e defina o campo original como content.

  • Data filtering plugin.

    Selecione Filter Logs with Regular Expression (Match Log Field Values) plugin como tipo de plugin de processamento. Na regra de coleta de logs, o campo method corresponde a POST e o campo ip corresponde a 10\.. Na regra de descarte de logs, o campo browser corresponde a aliyun.*.

Instrução SPL: | parse-json content| project-away content| where regexp_like(ip, '10\..') and regexp_like(method, 'POST') and not regexp_like(browser, 'aliyun.*'). Nesta instrução, as SPL instructions and functions descartam o campo content original, as SPL instructions and functions extraem os campos e a função regexp_like determina se as condições são atendidas.

Visualização da saída

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

Análise de JSON e mapeamento de valores de campo

Log de exemplo:

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

Análise de JSON e mapeamento de valores de campo

SPL

  • Collect text logs in JSON mode.

    Selecione Data Parsing (JSON Mode) plugin como tipo de plugin de processamento e defina o campo original como content.

  • Field processing plugins.

    Defina o tipo de plugin de processamento como Field Value Mapping plugin, o campo original como ip e o campo resultante como processed_ip. No dicionário de mapeamento, 192.168.. é mapeado para default login, e 127.0..1 é mapeado para LocalHost-LocalHost.

Instrução SPL: | 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. Nesta instrução, as SPL instructions and functions extraem os campos, as SPL instructions and functions descartam o campo original content e as SPL instructions and functions criam um novo campo.

Visualização da saída

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

Substituição de strings

Log de exemplo:

hello,how old are you? nice to meet you

Substituição de strings

SPL

Use os Field processing plugins para substituir "how old are you?" por um valor vazio.

Instrução SPL: `*

extend content=replace(content, 'how old are you?', '')`. Esta instrução usa as SPL instructions and functions para substituir how old are you? por um valor vazio.

Visualização da saída

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

Codificação de dados

Log de exemplo:

this is a test log

Codificação BASE64

Codificação BASE64

SPL

Para mais informações, consulte Data masking and encryption plugins.

Para Processing Plugin Type, selecione BASE64 (encode), defina Original Field como content e defina Result Field como content1.

Instrução SPL: `*

extend content1=to_base64(cast(content as varbinary))`. Nesta instrução, as SPL instructions and functions adicionam o campo content1 e a to_base64 function codifica os dados no formato BASE64.

Visualização da saída
{
    "content": "this is a test log",
    "content1": "dGhpcyBpcyBhIHRlc3QgbG9n"
}

Codificação MD5

MD5

SPL

Para mais informações, consulte Data masking and encryption plugins.

O tipo de plugin de processamento é MD5, o campo original é content e o campo resultante é test.

Instrução SPL: `*

extend test=lower(to_hex(md5(cast(content as varbinary))))`. Esta instrução usa as SPL instructions and functions para adicionar o campo test e a md5 function para gerar o hash MD5 do conteúdo original.

Visualização da saída
{
    "content": "this is a test log",
    "test": "e7d7063444dd5593855de31741584288"
}

Recursos adicionais do SPL

Cálculos matemáticos

  • Log de exemplo

    4
  • Instrução SPL

    A cast function converte tipos de dados. Para mais informações sobre as funções power, round e sqrt, consulte Mathematical functions.

    *
    | extend val = cast(content as double)
    | extend power_test = power(val, 2)
    | extend round_test = round(val)
    | extend sqrt_test = sqrt(val)
  • Visualização da saída

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

Operações de URL

Codificação e decodificação de URL

  • Log de exemplo

    https://homenew.console.alibabacloud.com/home/dashboard/ProductAndService
  • Instrução SPL

    Para mais informações sobre as funções url_encode e url_decode, consulte URL functions.

    *
    | extend encoded = url_encode(content)
    | extend decoded = url_decode(encoded)
  • Visualização da saída

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

Extração de URL

  • Log de exemplo

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

    Para mais informações sobre as funções usadas nesta instrução SPL, consulte URL functions.

    *
    | 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')
  • Visualização da saída

    {
        "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"
    }

Operadores de comparação e lógicos

  • Log de exemplo

    {"num1": 199, "num2": 10, "num3": 9}
  • Instrução SPL

    A cast function converte tipos de dados e as SPL instructions and functions extraem os campos.

    *
    | parse-json content
    | extend compare_result = cast(num1 as double) > cast(num2 as double) AND cast(num2 as double) > cast(num3 as double)
  • Visualização da saída

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