全部产品
Search
文档中心

Simple Log Service:Kasus umum untuk PromQL dan SQL dalam kueri Metricstore

更新时间:Jun 26, 2025

Topik ini menjelaskan skenario umum untuk mengkueri penyimpanan metrik menggunakan PromQL atau SQL.

Kasus penggunaan PromQL

Kueri data metrik tunggal

process_resident_memory_bytes mewakili memori resident. Gunakan PromQL berikut untuk melihat data metrik proses pada waktu yang berbeda.

process_resident_memory_bytes

Filter data metrik berdasarkan label

Pernyataan PromQL mendukung kondisi filter untuk label tertentu setelah metrik guna menyempurnakan data metrik. Sebagai contoh, kueri berikut menyaring data untuk kluster tertentu.

process_resident_memory_bytes{cluster="sls-mall"}/1024/1024

Gunakan ekspresi reguler untuk penyaringan label

Kondisi penyaringan label mendukung sintaksis ekspresi reguler. Sebagai contoh, kueri berikut menyaring data metrik di mana klusternya adalah sls-mall atau sls-demo.

process_resident_memory_bytes{cluster=~"sls-mall|sls-demo"}

Hitung nilai maksimum dari suatu metrik

Gunakan operator max untuk menanyakan nilai maksimum penggunaan heap memory di setiap kluster.

max by (cluster) (go_memstats_heap_inuse_bytes) / 1024 / 1024

Hitung jumlah deret waktu untuk suatu metrik

Gunakan operator count untuk mengkueri jumlah deret waktu dari metrik tertentu.

count(apiserver_request_total{cluster="sls-mall"})

Hitung laju perubahan metrik selama periode waktu

Fungsi rate digunakan untuk menghitung laju perubahan metrik dalam interval tertentu dan sering digunakan untuk menghitung pemanfaatan CPU.

rate(process_cpu_seconds_total[1m])

Hitung perbedaan metrik dari n menit yang lalu

Sebagai contoh, kueri perubahan metrik pada setiap saat dibandingkan dengan nilainya satu menit sebelumnya:

delta(go_goroutines[1m])

Penggunaan bersarang dari beberapa operator dan fungsi

Beberapa operator dan fungsi dapat digunakan dalam kueri bersarang. Contoh berikut pertama-tama menghitung nilai maksimum untuk setiap sumber daya dan kluster, kemudian mengambil 3 nilai teratas.

topk(3, max by (cluster, resource)(apiserver_request_total))

Perhitungan antara beberapa nilai

PromQL mendukung perhitungan antara nilai-nilai murni, seperti +, -, *, /, dan %.

1 + 2

Perhitungan antara metrik dan nilai

PromQL mendukung perhitungan antara metrik dan nilai. Sebagai contoh, kueri berikut mengonversi unit byte metrik memori menjadi MB.

process_resident_memory_bytes / 1024 / 1024

Perhitungan biner antara beberapa metrik

PromQL mendukung perhitungan antara beberapa metrik, contohnya pembagian dua metrik berikut:

kube_daemonset_status_number_ready{job="kube-state-metrics"} 
/ 
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}

Cara menggunakan subquery dengan benar

Fungsi seperti rate, delta, increase, dan {agg}_over_time hanya dapat dioperasikan pada metrik asli dan tidak mendukung perhitungan terhadap hasil operator atau fungsi. Sebagai contoh:

  • Didukung:

    max_over_time(go_goroutines[1m]) # Hitung nilai maksimum dalam satu menit sebelumnya untuk setiap deret waktu.
  • Tidak Didukung:

    max_over_time(max(go_goroutines)[1m]) # Pertama hitung nilai maksimum antara deret waktu, lalu pilih nilai maksimum dalam satu menit sebelumnya.
  • Penggunaan yang Benar:

    # Prometheus mendukung persyaratan ini melalui subquery. Pernyataan PromQL harus dimodifikasi ke format berikut:
    max_over_time(max(go_goroutines)[1m:10s])
    # Dalam subquery, dua parameter [a:b] masing-masing mewakili rentang dan langkah.

Kasus penggunaan SQL

Kueri semua data mentah di bawah suatu metrik

Kueri semua data deret waktu mentah dari metrik process_resident_memory_bytes dalam rentang waktu tertentu. (Demo)

 *| SELECT * FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes'

Kueri data mentah dengan nilai instance tertentu untuk suatu metrik

Kueri semua data metrik di mana metrik yang ditentukan adalah process_resident_memory_bytes dan instansinya adalah 172.20.0.143:8084. (Demo)

*| SELECT * FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes' and element_at(__labels__, 'instance')='172.20.0.143:8084' limit all

Buat pekerjaan SQL terjadwal untuk mengagregasi data deret waktu

Align waktu ke setiap menit untuk perhitungan agregasi MAX, menghitung nilai maksimum metrik di bawah instance yang berbeda. (Demo)

*| SELECT __time_nano__ FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes' and element_at(__labels__, 'instance')='x-abcd'