Todos os produtos
Search
Central de documentação

Simple Log Service:Sintaxe e funções SQL

Última atualização: Jul 03, 2026

Simple Log Service oferece suporte à análise SQL de resultados de pesquisa.

Sintaxe básica

Nota

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.

Importante
  • 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 image

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

    image

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

    image

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

    image

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 image

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

    image

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 image