A consulta baseada em varredura permite pesquisar logs por valores de campo sem configurar índices. Combinada com instruções SPL (Simple Log Service Processing Language), ela permite filtrar, transformar e analisar resultados diretamente dos dados brutos de log.
Como funciona
Ao executar uma consulta baseada em varredura, o SLS:
-
Execute a instrução de pesquisa para recuperar logs.
ImportanteA instrução de pesquisa no pipeline de primeiro nível depende de consultas baseadas em índices. Use
*se nenhuma filtragem por índice for necessária. Por exemplo, antes de executarstatus:200 | WHERE userId = '123' | extend host=upper(hostname), crie um índice para o campostatus, mas não para os camposuserIdouhostname. Aplica instruções SPL aos resultados da pesquisa para filtrar, converter e analisar dados e, em seguida, retorna a saída final.
Sintaxe básica
A consulta baseada em varredura oferece suporte a SPL syntax. O SPL extrai informações estruturadas, executa operações em campos e filtra dados brutos. O SLS aceita cascatas de pipeline de vários níveis: o primeiro nível é o filtro de índice, seguido por instruções SPL nos níveis subsequentes.
Index-based search statement | <spl-cmd> ... | <spl-cmd> ...
Amostra de log
Campos brutos: rotulados com [R], aplicáveis à pesquisa por varredura.
Campos de índice: rotulados com [I], aplicáveis à pesquisa por índice.
[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
Exemplos
Nas instruções SPL, as strings constantes ficam entre aspas simples ('), como em
* | where ClientIp = '192.168.1.1'.Se o nome de um campo incluir caracteres especiais, coloque-o entre aspas duplas ("), como em
* | project-away "user-agent".
Filtrar por diferentes condições
-
Comparação de igualdade
Status: 200 | where ClientIp = '192.168.1.1' -
Pesquisa sem distinção entre maiúsculas e minúsculas
__topic__: nginx-access-log | where lower(Method) != 'put' -
Correspondência aproximada
Status: 200 | where UserAgent like '%Macintosh%' -
Comparação numérica
Por padrão, os campos têm o tipo varchar. Converta-os para bigint ao comparar valores numéricos.
Status: 200 | where cast(RT as bigint) > 50 -
Correspondência de expressão regular
# Find URIs that contain "path-number" Status: 200 | where regexp_like(Uri, 'path-\d+')
Calcular novos campos
Calcule novos campos a partir dos existentes usando a instrução extend instruction.
-
Extraia campos usando expressões regulares
# Extract the file number from the Uri field * not Status: 200 | extend fileNumber=regexp_extract(Uri, 'file-(\d+)', 1) -
Extraia campos de JSON
Status:200 | extend Item = json_extract_scalar(Payload, '$.Item') -
Extraia campos com base em um separador
Status:200 | extend urlParam=split_part(Uri, '/', 3) -
Calcule novos campos a partir de vários valores de campo
# Calculate the time difference based on BeginTime and EndTime Status:200 | extend timeRange = cast(BeginTime as bigint) - cast(EndTime as bigint)
Manter, remover e renomear campos
-
Mantenha apenas campos específicos e remova os demais
Status:200 | project Status, Uri -
Remova campos específicos e mantenha os demais
Status:200 | project-away UserAgent -
Renomeie campos
Status:200 | project-rename Latency=RT
Expandir dados não estruturados
-
Expanda todos os campos em JSON
# Filter non-empty Payloads and expand all JSON fields __topic__: nginx-access-log | where Payload is not null | parse-json Payload -
Expanda os campos JSON e descarte os originais
status:200 | parse-json body | project-away body -
Extraia vários campos usando expressões regulares
Status:200 | parse-regexp Uri, 'path-(\d+)/file-(\d+)' as pathIndex, fileIndex
Cascata de pipeline de vários níveis
Combine as operações acima em uma única instrução usando cascatas de pipeline de vários níveis, executadas em sequência.
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
Limites
A execução de SPL em consultas baseadas em varredura tem limites. Para mais informações, consulte SPL syntax.
Não há suporte para paginação aleatória.
Consulta baseada em índice versus consulta baseada em varredura
|
Item |
Consulta baseada em índice |
Consulta baseada em varredura |
|
Sintaxe |
|
|
|
Configuração de índice necessária |
Sim. |
A instrução de pesquisa baseada em índice requer índices, enquanto as outras instruções não. |
|
Suporte a instruções analíticas |
Sim. |
Sim. |
|
Suporte a paginação aleatória |
Sim. |
Não. Há suporte apenas para paginação contínua (para frente ou para trás). |
|
Histograma de log |
Exibido com base nos resultados da instrução de pesquisa. |
Exibido com base nos resultados da instrução de pesquisa e no progresso da varredura. |
|
Operadores e funções |
Oferece suporte a cálculos lógicos e matemáticos e a pesquisas aproximadas, mas não a funções SQL. |
Para obter detalhes, consulte SPL instructions and functions e SPL-supported SQL functions. |
|
Tipos de campo |
Definidos pelos data types especificados nas configurações de índice. |
O SPL trata todos os campos como texto, independentemente da configuração de índice. Para mais informações, consulte Data type conversion. |
|
Tamanho do resultado |
Configurável no console do SLS ou via SDK ou API REST. Máximo: 100. |
A varredura para e retorna os resultados quando uma das seguintes condições é atendida:
|
|
Custos |
São cobrados tráfego e armazenamento de índice. Para mais informações, consulte Pay-by-feature billable items. |
A cobrança baseia-se no tráfego de varredura (volume de dados retornado pela varredura). A identificação de logs utiliza os resultados da consulta baseada em índice. |