Tüm Ürünler
Search
Belge Merkezi

Simple Log Service:SQL sözdizimi ve işlevleri

Son Güncelleme:Sep 30, 2026

Simple Log Service arama sonuçlarının SQL ile analiz edilmesini destekler.

Temel sözdizimi

Not

Bir sorgu, dikey çubuk karakteriyle (|) ayrılan bir arama deyimi ve bir analiz deyiminden oluşur. Biçim aşağıdaki gibidir:

Search statement|Analytic statement

Bir arama deyimi bağımsız olarak çalıştırılır. Bir analiz deyimi mutlaka bir arama deyimini takip etmelidir. Günlük analizi, arama sonuçlarını veya bir Logstore'daki tüm verileri işler.

Önemli
  • Her arama deyimi için en fazla 30 arama koşulu belirtmenizi öneririz.

  • FROM veya WHERE yan tümcesi olmadığında, bir analiz deyimi varsayılan olarak mevcut Logstore'daki tüm verileri analiz eder. Analiz deyimleri büyük/küçük harfe duyarlı değildir, offset sözdizimini desteklemez ve sonunda noktalı virgül (;) gerektirmez.

Deyim

Açıklama

Arama deyimi

Bir arama deyimi bir veya daha fazla koşul belirtir: bir anahtar sözcük, sayısal değer, sayısal aralık, boşluk veya yıldız işareti (*).

Boşluk veya yıldız işareti (*) koşulsuz olarak tüm günlüklerle eşleşir.

Analiz deyimi

Bir analiz deyimi, arama sonuçlarını veya bir Logstore'daki tüm verileri toplar ya da analiz eder. SLS aşağıdaki işlevleri ve sözdizimini destekler:

Örnek:

* | SELECT status, count(*) AS PV GROUP BY status

SQL işlevleri ve SQL yan tümceleri

SQL işlevleri verileri hesaplar, dönüştürür ve biçimlendirir; örneğin toplam hesaplama, dize manipülasyonu ve tarih işleme gibi. SQL işlevleri genellikle SQL yan tümcelerine gömülüdür.

SQL yan tümceleri tam sorgu ve işleme deyimlerini oluşturur; veri kaynaklarını, koşulları, gruplamayı ve sıralamayı belirtir.

Örnek 1. Önceki günün günlüklerini sorgulama

Bugünün tarihini almak için current_date ve bir zaman aralığını çıkarmak için date_add kullanır. Sonuçlar bir tabloda görüntülenir. (Demo)

  • Sorgu deyimi

    * |
    SELECT
      *
    FROM  log
    WHERE
      __time__ < to_unixtime(current_date)
      AND __time__ > to_unixtime(date_add('day', -1, current_date))
  • Sonuçlar image

Örnek 2. Günlükler için kaynak IP adreslerinin dağılımını sorgulama

IP adreslerinden il bilgilerini çözümlemek için ip_to_province işlevini kullanır, group by ile adrese göre gruplandırır ve count işlevi ile oluşumları sayar. Sonuçlar bir pasta grafiğinde görüntülenir. (Demo'yu Deneyin)

  • Sorgu deyimi

    * |
    select  
      count(1) as c,
      ip_to_province(remote_addr) as address
    group by
      address
    limit
      100

Örnek 3. NGINX gelen ve giden trafiğini sorgulama

__time__ değerini saate hizalamak için date_trunc kullanır. __time__ günlük alım zamanı (Unix zaman damgası) için bir sistem alanıdır. Sorgu, zaman damgalarını biçimlendirmek için date_format, zamana göre gruplandırmak için group by ve saatlik trafiği toplamak için sum kullanır. Sonuçlar, X ekseninde time ve sol Y ekseninde net_out/net_in ile bir çizgi grafiği olarak görüntülenir. (Demo'yu Deneyin)

  • Sorgu deyimi

    * |
    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
  • Sonuçlar

    image

Örnek 4. NGINX'te en çok erişilen ilk 10 URL'yi sorgulama

request_uri değerini ? karakterine göre bölmek için split_part işlevini kullanır. İlk array elemanı istek yoludur. GROUP BY ile yola göre gruplandırır, count işlevi ile ziyaretleri sayar ve ORDER BY DESC ile sıralar. Sonuçlar bir sütun grafiğinde görüntülenir. (Demo'yu Deneyin)

  • Sorgu deyimi

    * |
    select
      count(1) as pv,
      split_part(request_uri, '?', 1) as path
    group by
      path
    order by
      pv desc
    limit
      10
  • Sonuçlar

    image

Örnek 5. İstek yöntemi kategorilerini ve PV trendlerini sorgulama

Zaman damgalarını dakikaya hizalamak için date_trunc kullanır, PV'yi hesaplamak üzere zamana ve request_method değerine göre gruplandırır, ardından zamana göre sıralar. Sonuçlar, X ekseninde zaman, Y ekseninde PV ve seri olarak request_method ile yığılmış bir alan grafiği olarak görüntülenir. (Demo'yu Deneyin)

  • Sorgu deyimi

    * |
    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
  • Sonuçlar

    image

Örnek 6. Bugünün PV'sini dünle karşılaştırma

Bugünün PV'leri için count işlevini ve gün bazında karşılaştırma yapmak için compare işlevini kullanır. (Demo)

  • Sorgu deyimi

    * |
    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
          )
      )
  • Sonuçlar image

Örnek 7. NGINX erişim günlüklerine göre PV sayısını tahmin etme

time - time % 60 ifadesi, zaman damgalarını stamp olarak dakikaya hizalar. Sorgu, stamp değerine göre group by ile gruplandırır ve count işlevini kullanarak dakika başına olayları sayar. Bu alt sorgu, altı veri noktasını tahmin etmek için ts_predicate_simple işlevine beslenir. Sonuçlar bir zaman serisi grafiği olarak görüntülenir. (Demo'yu Deneyin)

  • Sorgu deyimi

    * |
    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
  • Sonuçlar

    image

Örnek 8. İstekleri kullanıcı aracısına göre toplama ve sıralama

İstekleri saymak ve yanıt trafiğini toplamak için http_user_agent değerine göre gruplandırır. byte değerlerini MB birimine dönüştürmek için round işlevini kullanır. Bir case when ifadesi status kodlarını 2xx, 3xx, 4xx ve 5xx olarak sınıflandırır ve her birinin yüzdesini hesaplar. Sonuçlar bir tabloda görüntülenir. (Demo'yu Deneyin)

  • Sorgu deyimi

    * |
    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

Örnek 9. NGINX günlüklerinde hata isteği oranını hesaplama

400 ve üzeri durum kodlarına sahip istekleri sayar, hata oranını elde etmek için toplam isteklere böler. Sonuçlar istatistiksel bir grafikte görüntülenir. (Demo)

  • Sorgu deyimi

    * |
    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
      )
  • Sonuçlar image