全部产品
Search
文档中心

Simple Log Service:Sintaksis dan fungsi SQL

更新时间:Jul 02, 2025

Simple Log Service memungkinkan Anda menganalisis data hasil pencarian menggunakan pernyataan SQL. Bagian ini menjelaskan sintaksis dasar dari pernyataan analitik SQL.

Sintaksis dasar

Setiap pernyataan kueri terdiri dari pernyataan pencarian dan pernyataan analitik. Keduanya dipisahkan oleh batang vertikal (|). Format:

Pernyataan pencarian|Pernyataan analitik

Pernyataan pencarian dapat dijalankan secara independen, sedangkan pernyataan analitik harus dijalankan bersama dengan pernyataan pencarian. Fitur analisis log digunakan untuk menganalisis data dalam hasil pencarian atau seluruh data dalam Logstore.

Penting
  • Disarankan untuk menentukan hingga 30 kondisi pencarian dalam pernyataan pencarian.

  • Jika klausa FROM atau WHERE tidak ditentukan dalam pernyataan analitik, semua data Logstore saat ini akan dianalisis secara otomatis. Pernyataan analitik tidak mendukung offset dan tidak peka huruf besar/kecil. Tidak perlu menambahkan titik koma (;) di akhir pernyataan analitik.

Pernyataan

Deskripsi

Pernyataan pencarian

Pernyataan pencarian menentukan satu atau lebih kondisi pencarian. Pernyataan pencarian dapat berupa kata kunci, nilai numerik, rentang nilai numerik, spasi, atau tanda bintang (*).

Jika Anda menentukan spasi atau tanda bintang (*) sebagai pernyataan pencarian, tidak ada kondisi yang digunakan untuk pencarian dan semua log dikembalikan.

Pernyataan analitik

Pernyataan analitik digunakan untuk mengumpulkan atau menganalisis data dalam hasil pencarian atau semua data dalam Logstore. Untuk informasi lebih lanjut tentang fungsi dan sintaksis yang didukung oleh Simple Log Service untuk menganalisis log, lihat topik-topik berikut:

Contoh pernyataan analitik SQL:

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

Fungsi SQL dan klausa SQL

Secara umum, fungsi SQL digunakan untuk menghitung, mengonversi, dan memformat data. Untuk informasi lebih lanjut, lihat fungsi SQL. Sebagai contoh, Anda dapat menggunakan fungsi SQL untuk menghitung jumlah dan rata-rata nilai, melakukan operasi pada string, serta memproses tanggal. Biasanya, fungsi SQL disematkan dalam klausa SQL.

Klausa SQL digunakan untuk membuat pernyataan pencarian SQL lengkap atau pernyataan pemrosesan data untuk mengidentifikasi sumber, kondisi, kelompok, dan urutan data. Untuk informasi lebih lanjut, lihat klausa SQL.

Contoh 1. Kueri log hari sebelumnya

Fungsi current_date mengembalikan tanggal saat ini. Fungsi date_add mengurangi interval tertentu dari tanggal saat ini. Hasilnya ditampilkan dalam tabel, yang memungkinkan Anda melihat data secara intuitif. (Demo)

  • Pernyataan Kueri

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

Contoh 2. Kueri distribusi alamat IP sumber untuk log

Fungsi ip_to_province mengembalikan provinsi berdasarkan alamat IP. Klausa GROUP BY mengumpulkan provinsi. Kemudian, fungsi count menghitung jumlah permintaan dari setiap provinsi. Hasilnya ditampilkan dalam diagram lingkaran. (Demo)

  • Pernyataan Kueri

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

Contoh 3. Kueri lalu lintas masuk dan keluar NGINX

Fungsi date_trunc memotong nilai bidang __time__ per jam. Bidang __time__ adalah bidang sistem yang menentukan waktu pengumpulan log. Nilai default dari bidang __time__ adalah timestamp yang akurat hingga detik. Fungsi date_format memformat nilai waktu yang dipotong. Klausa GROUP BY mengumpulkan nilai waktu. Fungsi sum menghitung total volume lalu lintas per jam. Hasilnya ditampilkan dalam diagram garis, di mana sumbu x diatur ke time dan sumbu y di sebelah kiri diatur ke net_out dan net_in. (Demo)

  • Pernyataan Kueri

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

    image

Contoh 4. Kueri 10 URL yang paling sering diakses di NGINX

Fungsi split_part membagi bidang request_uri menjadi arrays menggunakan tanda tanya (?) dan mendapatkan jalur permintaan dari string pertama array. Klausa GROUP BY mengumpulkan jalur permintaan. Fungsi count menghitung jumlah kali setiap jalur diakses. Klausa ORDER BY mengurutkan jalur berdasarkan jumlah akses dalam urutan menurun. Hasilnya ditampilkan dalam diagram kolom. (Demo)

  • Pernyataan Kueri

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

    image

Contoh 5. Kueri kategori dan tren PV metode permintaan

Fungsi date_trunc memotong nilai waktu per menit. Klausa GROUP BY mengumpulkan dan mengelompokkan nilai waktu yang dipotong untuk menghitung jumlah page views (PV) berdasarkan request_method. Klausa ORDER BY mengurutkan nilai waktu dalam urutan menaik. Hasilnya ditampilkan dalam bagan alir. Dalam bagan tersebut, sumbu x menunjukkan nilai waktu dan sumbu y menunjukkan jumlah PV. Kolom agregat adalah request_method. (Demo)

  • Pernyataan Kueri

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

    image

Contoh 6. Kueri jumlah PV untuk hari saat ini dan perbandingan harian antara hari saat ini dan hari sebelumnya

Fungsi count menghitung jumlah PV untuk hari saat ini. Fungsi compare mengembalikan perbandingan harian antara jumlah PV hari saat ini dan hari sebelumnya. (Demo)

  • Pernyataan Kueri

    * |
    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
          )
      )
  • Hasilimage

Contoh 7. Peramalan jumlah PV berdasarkan log akses NGINX

Ekspresi time - time % 60 mengurangi sisa pembagian nilai waktu dengan 60 dari nilai waktu untuk mendapatkan timestamps yang akurat hingga menit. Klausa GROUP BY mengumpulkan timestamps. Fungsi count menghitung jumlah PV per menit dan hasilnya digunakan sebagai subquery dalam kueri baru. Fungsi ts_predicate_simple meramalkan jumlah PV dalam 6 menit ke depan. Hasilnya ditampilkan dalam diagram deret waktu. (Demo)

  • Pernyataan Kueri

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

    image

Contoh 8. Kumpulkan data berdasarkan bidang http_user_agent, dan urutkan dan tampilkan data berdasarkan jumlah PV

Data dikelompokkan dan dijumlahkan berdasarkan bidang http_user_agent. Jumlah permintaan dari setiap agen dan ukuran respons total yang dikembalikan ke klien dihitung. Satuan ukuran respons total adalah bytes. Fungsi round mengonversi ukuran dalam bytes ke ukuran dalam MB dan membulatkan ukuran ke dua tempat desimal. Ekspresi CASE WHEN mengategorikan string status ke dalam lapisan, termasuk 2xx, 3xx, 4xx, dan 5xx, serta menghitung persentase setiap lapisan. Hasilnya ditampilkan dalam tabel, yang memungkinkan Anda melihat data dan arti data secara intuitif. (Demo)

  • Pernyataan Kueri

    * |
    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 "Persentase kode status 2xx (%)",
      round(
        sum(
          case
            when status >= 300
            and status < 400 then 1
            else 0
          end
        ) * 100.0 / count(1),
        6
      ) as "Persentase kode status 3xx (%)",
      round(
        sum(
          case
            when status >= 400
            and status < 500 then 1
            else 0
          end
        ) * 100.0 / count(1),
        6
      ) as "Persentase kode status 4xx (%)",
      round(
        sum(
          case
            when status >= 500
            and status < 600 then 1
            else 0
          end
        ) * 100.0 / count(1),
        6
      ) as "Persentase kode status 5xx (%)"
    group by
      "User agent"
    order by
      pv desc
    limit
      100

Contoh 9. Kueri persentase jumlah permintaan error dalam log NGINX

Jumlah permintaan error dengan kode status melebihi 400 dan jumlah total permintaan diperoleh berdasarkan pernyataan SQL. Kemudian, persentase jumlah permintaan error dihitung. Hasilnya ditampilkan dalam diagram statistik. (Demo)

  • Pernyataan Kueri

    * |
    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
      )
  • Hasilimage