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 |
-) \"([^\"])\" \"([^\"])\"` para extrair os seguintes campos: |
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 |
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 |
| Instrução SPL: |
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 |
| Instrução SPL: |
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 O campo original é content, o método de mascaramento é const, a string de substituição é , a expressão para o conteúdo anterior é |
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 |
Instrução SPL: |
extend service='A'`. Esta instrução usa as SPL instructions and functions para adicionar o campo |
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 |
| Instrução SPL: |
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 |
| Instrução SPL: |
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 |
| Instrução SPL: |
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 |
| Instrução SPL: |
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 |
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 |
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 |
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,roundesqrt, 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_encodeeurl_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" }