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_bytesFilter 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/1024Gunakan 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 / 1024Hitung 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 + 2Perhitungan 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 / 1024Perhitungan 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 allBuat 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'