Simple Log Service oferece suporte à análise SQL de resultados de pesquisa.
Sintaxe básica
Habilidade de Consulta SLS: Consulte e analise logs com inteligência: O SLS fornece um Agent Skill que permite consultar e analisar dados de log usando linguagem natural em um agente de IA local.
Uma consulta consiste em uma instrução de pesquisa e uma instrução analítica, separadas pelo caractere pipe (|). O formato é o seguinte:
Search statement|Analytic statement
A instrução de pesquisa é executada independentemente. A instrução analítica deve seguir uma instrução de pesquisa. A análise de logs processa os resultados da pesquisa ou todos os dados em um Logstore.
Recomendamos especificar no máximo 30 condições de pesquisa por instrução.
Sem as cláusulas FROM ou WHERE, a instrução analítica analisa todos os dados do Logstore atual por padrão. As instruções analíticas não diferenciam maiúsculas de minúsculas, não aceitam sintaxe offset e não exigem ponto e vírgula (;) ao final.
|
Instrução |
Descrição |
|
Instrução de pesquisa |
Especifique uma ou mais condições: palavra-chave, valor numérico, intervalo numérico, espaço ou asterisco (*). Um espaço ou asterisco (*) corresponde a todos os logs sem condições. |
|
Instrução analítica |
Agrega ou analisa os resultados da pesquisa ou todos os dados de um Logstore. O SLS oferece suporte às seguintes funções e sintaxes: |
Exemplo:
* | SELECT status, count(*) AS PV GROUP BY status
Funções e cláusulas SQL
As funções SQL calculam, convertem e formatam dados — por exemplo, somando valores, manipulando strings e processando datas. Geralmente, essas funções são incorporadas em cláusulas SQL.
As cláusulas SQL constroem instruções completas de consulta e processamento, definindo fontes de dados, condições, agrupamentos e ordenação.
Exemplo 1. Consultar logs do dia anterior
Use current_date para obter a data atual e date_add para subtrair um intervalo. Os resultados aparecem em uma tabela. (Demo)
-
Instrução de consulta
* | SELECT * FROM log WHERE __time__ < to_unixtime(current_date) AND __time__ > to_unixtime(date_add('day', -1, current_date)) Resultados

Exemplo 2. Consultar a distribuição de endereços IP de origem dos logs
Use a função ip_to_province para resolver as províncias a partir dos endereços IP, agrupe por endereço com group by e conte as ocorrências com a função count. Os resultados são exibidos em um gráfico de pizza. (Testar Demo)
-
Instrução de consulta
* | select count(1) as c, ip_to_province(remote_addr) as address group by address limit 100
Exemplo 3. Consultar o tráfego de entrada e saída do NGINX
Use date_trunc para alinhar __time__ à hora. __time__ é um campo de sistema referente ao horário de ingestão do log (timestamp Unix). A consulta usa date_format para formatar timestamps, group by para agrupar por tempo e sum para totalizar o tráfego horário. Os resultados aparecem como um gráfico de linhas com time no eixo X e net_out/net_in no eixo Y esquerdo. (Testar Demo)
-
Instrução de consulta
* | select sum(body_bytes_sent) as net_out, sum(request_length) as net_in, date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time group by date_format(date_trunc('hour', __time__), '%m-%d %H:%i') order by time limit 10000 -
Resultados

Exemplo 4. Consultar as 10 URLs mais acessadas no NGINX
Use a função split_part para dividir request_uri por ?. O primeiro elemento do array corresponde ao caminho da requisição. Agrupe por caminho com GROUP BY, conte as visitas com a função count e classifique com ORDER BY DESC. Os resultados são mostrados em um gráfico de colunas. (Testar Demo)
-
Instrução de consulta
* | select count(1) as pv, split_part(request_uri, '?', 1) as path group by path order by pv desc limit 10 -
Resultados

Exemplo 5. Consultar categorias de método de requisição e tendências de PV
Use date_trunc para alinhar timestamps ao minuto, agrupe por tempo e request_method para calcular PV e, em seguida, ordene por tempo. Os resultados surgem como um gráfico de área empilhada com tempo no eixo X, PV no eixo Y e request_method como série. (Testar Demo)
-
Instrução de consulta
* | select date_format(date_trunc('minute', __time__), '%m-%d %H:%i') as t, request_method, count(*) as pv group by t, request_method order by t asc limit 10000 -
Resultados

Exemplo 6. Comparar o PV de hoje e de ontem
Use a função count para os PVs de hoje e a função compare para a comparação diária. (Demo)
-
Instrução de consulta
* | select diff [1] as today, round((diff [3] -1.0) * 100, 2) as growth FROM ( SELECT compare(pv, 86400) as diff FROM ( SELECT COUNT(1) as pv FROM log ) ) Resultados

Exemplo 7. Prever a quantidade de PVs com base nos logs de acesso do NGINX
A expressão time - time % 60 alinha os timestamps ao minuto como stamp. A consulta agrupa por stamp com group by e conta eventos por minuto usando a função count. Essa subconsulta alimenta a função ts_predicate_simple para prever seis pontos de dados. Os resultados aparecem como um gráfico de série temporal. (Testar Demo)
-
Instrução de consulta
* | select ts_predicate_simple(stamp, value, 6) from ( select __time__ - __time__ % 60 as stamp, COUNT(1) as value from log GROUP BY stamp order by stamp ) LIMIT 1000 -
Resultados

Exemplo 8. Agregar e classificar requisições por user agent
Agrupe por http_user_agent para contar requisições e somar o tráfego de resposta. Use a função round para converter valores em byte para MB. Uma expressão case when classifica os códigos de status em 2xx, 3xx, 4xx e 5xx, calculando a porcentagem de cada um. Os resultados são exibidos em uma tabela. (Testar Demo)
-
Instrução de consulta
* | select http_user_agent as "User agent", count(*) as pv, round(sum(request_length) / 1024.0 / 1024, 2) as "Request traffic (MB)", round(sum(body_bytes_sent) / 1024.0 / 1024, 2) as "Response traffic (MB)", round( sum( case when status >= 200 and status < 300 then 1 else 0 end ) * 100.0 / count(1), 6 ) as "Percentage of status code 2xx (%)", round( sum( case when status >= 300 and status < 400 then 1 else 0 end ) * 100.0 / count(1), 6 ) as "Percentage of status code 3xx (%)", round( sum( case when status >= 400 and status < 500 then 1 else 0 end ) * 100.0 / count(1), 6 ) as "Percentage of status code 4xx (%)", round( sum( case when status >= 500 and status < 600 then 1 else 0 end ) * 100.0 / count(1), 6 ) as "Percentage of status code 5xx (%)" group by "User agent" order by pv desc limit 100
Exemplo 9. Calcular a proporção de requisições com erro nos logs do NGINX
Conte requisições com códigos de status 400 ou superior e divida pelo total de requisições para obter a taxa de erro. Os resultados aparecem em um gráfico estatístico. (Demo)
-
Instrução de consulta
* | select round((errorCount * 100.0 / totalCount), 2) as errorRatio from ( select sum( case when status >= 400 then 1 else 0 end ) as errorCount, count(1) as totalCount from log ) Resultados
