Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tulis kueri ekspresi
Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 10.x.
Untuk ruang kerja Grafana yang mendukung Grafana versi 9.x, lihat. Bekerja di Grafana versi 9
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. Bekerja di Grafana versi 8
Ekspresi sisi server memungkinkan Anda memanipulasi data yang dikembalikan dari kueri dengan matematika dan operasi lainnya. Ekspresi membuat data baru dan tidak memanipulasi data yang dikembalikan oleh sumber data.
Tentang ekspresi
Ekspresi sisi server memungkinkan Anda memanipulasi data yang dikembalikan dari kueri dengan matematika dan operasi lainnya. Ekspresi membuat data baru dan tidak memanipulasi data yang dikembalikan oleh sumber data, selain dari beberapa restrukturisasi data kecil untuk membuat input data yang dapat diterima untuk ekspresi.
Menggunakan ekspresi
Ekspresi paling sering digunakan oleh peringatan Grafana. Pemrosesan dilakukan sisi server, sehingga ekspresi dapat beroperasi tanpa sesi browser. Namun, ekspresi juga dapat digunakan dengan sumber data backend dan visualisasi.
catatan
Ekspresi tidak berfungsi dengan peringatan dasbor lama.
Ekspresi dimaksudkan untuk menambah sumber data dengan memungkinkan kueri dari sumber data yang berbeda untuk digabungkan atau dengan menyediakan operasi yang tidak tersedia di sumber data.
catatan
Jika memungkinkan, Anda harus melakukan pemrosesan data di dalam sumber data. Menyalin data dari penyimpanan ke server Grafana untuk diproses tidak efisien, sehingga ekspresi ditargetkan pada pemrosesan data ringan.
Ekspresi bekerja dengan kueri sumber data yang mengembalikan deret waktu atau data numerik. Mereka juga beroperasi pada data multi-dimensi. Misalnya, kueri yang mengembalikan beberapa seri, di mana setiap seri diidentifikasi oleh label atau tag.
Ekspresi individu mengambil satu atau lebih kueri atau ekspresi lain sebagai input dan menambahkan data ke hasilnya. Setiap ekspresi atau kueri individu diwakili oleh variabel yang merupakan pengidentifikasi bernama yang dikenal sebagai ReFID-nya (misalnya, huruf A
default atau). B
Untuk mereferensikan output dari ekspresi individu atau kueri sumber data dalam ekspresi lain, pengidentifikasi ini digunakan sebagai variabel.
Jenis ekspresi
Ekspresi bekerja dengan dua jenis data.
-
Koleksi deret waktu.
-
Kumpulan angka, di mana setiap nomor adalah item.
Setiap koleksi dikembalikan dari kueri atau ekspresi sumber data tunggal dan diwakili oleh ReFID. Setiap koleksi adalah satu set, di mana setiap item dalam set diidentifikasi secara unik oleh dimensinya yang disimpan sebagai label atau pasangan nilai kunci.
Kueri sumber data
Ekspresi sisi server hanya mendukung kueri sumber data untuk sumber data backend. Data umumnya diasumsikan diberi label data deret waktu.
Kueri sumber data, bila digunakan dengan ekspresi, dijalankan oleh mesin ekspresi. Ketika melakukan ini, ia merestrukturisasi data menjadi satu deret waktu atau satu angka per frame data. Jadi misalnya jika menggunakan sumber data yang mengembalikan beberapa seri pada satu bingkai dalam tampilan tabel, Anda mungkin melihat itu terlihat berbeda saat dijalankan dengan ekspresi.
Saat ini, satu-satunya format seri non-waktu (angka) yang didukung saat menggunakan bingkai data adalah Anda memiliki respons tabel yang mengembalikan bingkai data tanpa waktu, kolom string, dan satu kolom angka:
Contoh tabel berikut menghasilkan angka yang bekerja dengan ekspresi. Kolom string menjadi label dan kolom nomor nilai yang sesuai. Misalnya {"Loc": "MIA", "Host": "A"}
dengan nilai 1.
Loc | Host | AVG_CPU |
---|---|---|
MIA |
A |
1 |
NYC |
B |
2 |
Operasi
Anda dapat menggunakan operasi berikut dalam ekspresi: matematika, kurangi, dan sampel ulang.
Matematika
Matematika adalah untuk rumus matematika bentuk bebas pada deret waktu atau data angka. Operasi matematika mengambil angka dan deret waktu sebagai masukan dan mengubahnya menjadi angka dan deret waktu yang berbeda.
Data dari kueri atau ekspresi lain direferensikan dengan awalan ReFID dengan tanda dolar, misalnya. $A
Jika variabel memiliki spasi dalam nama, maka Anda dapat menggunakan sintaks kurung kurung seperti. ${my
variable}
Konstanta numerik bisa dalam desimal (2.24
), oktal (dengan nol terkemuka seperti072
), atau hex (dengan seperti 0x terkemuka). 0x2A
Eksponensial dan tanda juga didukung (misalnya,). -0.8e-2
Operator
Operator aritmatika (+
, biner dan unary-
,,*
,/
,%
, eksponen**
), relasional (,<
,,,>
,<=
) ==
!=
, >=
dan logis (,, dan unary) &&
didukung||
. !
Bagaimana operasi berperilaku dengan data tergantung pada apakah itu adalah data angka atau deret waktu.
Dengan operasi biner$A || $B
, seperti $A + $B
atau, operator diterapkan dengan cara berikut tergantung pada jenis data:
-
Jika keduanya
$A
dan$B
merupakan angka, maka operasi dilakukan antara dua angka. -
Jika satu variabel adalah angka, dan variabel lainnya adalah deret waktu, maka operasi antara nilai setiap titik dalam deret waktu dan angka dilakukan.
-
Jika keduanya
$A
dan$B
merupakan data deret waktu, maka operasi antara setiap nilai dalam dua seri dilakukan untuk setiap cap waktu yang ada di keduanya$A
dan$B
.Resample
Operasi ini dapat digunakan untuk menyusun stempel waktu.
Ringkasan:
-
Nomor <Operation>nomor = angka
-
Nomor <Operation>seri = seri
-
Seri <Operation>seri = seri
Karena ekspresi bekerja dengan beberapa seri atau angka yang diwakili oleh satu variabel, operasi biner juga melakukan penyatuan (gabungan) antara dua variabel. Ini dilakukan berdasarkan label pengenal yang terkait dengan setiap seri atau nomor individu.
Jadi jika Anda memiliki angka dengan label seperti {host=web01}
in $A
dan nomor lain $B
dengan label yang sama maka operasi dilakukan antara dua item dalam setiap variabel, dan hasilnya akan berbagi label yang sama. Aturan untuk perilaku serikat ini adalah sebagai berikut:
-
Item tanpa label akan bergabung dengan apa pun.
-
Jika keduanya
$A
dan$B
masing-masing hanya berisi satu item (satu seri, atau satu nomor), mereka akan bergabung. -
Jika label sama persis, mereka akan bergabung.
-
Jika label adalah bagian dari yang lain, misalnya item di
$A
diberi label{host=A,dc=MIA}
dan item di$B
diberi label,{host=A}
mereka akan bergabung. -
Jika dalam variabel seperti
$A
ada kunci tag yang berbeda untuk setiap item, perilaku bergabung tidak terdefinisi.
Operator relasional dan logis mengembalikan 0 untuk false 1 untuk true.
Fungsi Matematika
Sementara sebagian besar fungsi ada dalam operasi ekspresi sendiri, operasi matematika memang memiliki beberapa fungsi yang mirip dengan operator matematika atau simbol. Ketika fungsi dapat mengambil angka atau seri, dari jenis yang sama dengan argumen akan dikembalikan. Ketika itu adalah seri, operasi dilakukan untuk nilai setiap titik dalam seri.
perut
abs mengembalikan nilai absolut dari argumennya yang dapat berupa angka atau seri. Misalnya, abs(-1)
atau abs($A)
.
is_inf
is_inf mengambil angka atau seri dan mengembalikan 1
Inf
nilai (negatif atau positif) dan 0
untuk nilai lainnya. Sebagai contoh, is_inf($A)
.
catatan
Jika Anda perlu secara khusus memeriksa ketidakterbatasan negatif misalnya, Anda dapat melakukan perbandingan seperti$A == infn()
.
is_nan
is_nan mengambil angka atau seri dan mengembalikan 1
NaN
nilai dan 0
nilai lainnya. Sebagai contoh, is_nan($A)
. Fungsi ini diperlukan untuk pemeriksaan ini karena NaN
tidak sama denganNaN
.
adalah_null
is_null mengambil angka atau seri dan mengembalikan 1
null
nilai dan nilai lainnya0
. Sebagai contoh, is_null($A)
.
is_number
is_number mengambil angka atau seri dan mengembalikan 1
untuk semua nilai bilangan real dan 0
untuk nilai lainnya (yaitunull
,, Inf+
Inf-
, danNaN
). Sebagai contoh, is_number($A)
.
log
Log mengembalikan logaritma natural dari argumennya yang dapat berupa angka atau seri. Jika nilainya kurang dari 0, NaN
dikembalikan. Misalnya, log(-1)
atau log($A)
.
inf, infn, nan, dan null
Fungsi inf, infn, nan, dan null semuanya mengembalikan satu nilai nama. Mereka terutama ada untuk pengujian. Contoh:null()
.
bulat
Round mengembalikan nilai integer bulat. Misalnya, round(3.123)
atau round($A)
.
ceil
Ceil membulatkan angka ke nilai integer terdekat. Misalnya, ceil(3.123)
mengembalikan 4
.
lantai
Lantai membulatkan angka ke bawah ke nilai integer terdekat. Misalnya,floor(3.123
) kembali3
.
Mengurangi
Reduce mengambil satu atau lebih deret waktu yang dikembalikan dari kueri atau ekspresi dan mengubah setiap seri menjadi satu nomor. Label deret waktu disimpan sebagai label pada setiap angka yang dikurangi yang dikeluarkan.
Bidang:
-
Fungsi — Fungsi reduksi yang digunakan
-
Input - Variabel (ReFID (seperti
A
)) untuk sampel ulang -
Mode - Memungkinkan perilaku kontrol fungsi reduksi ketika seri berisi nilai non-numerik (null, NaN, +-Inf)
Fungsi Reduksi
Hitungan
Hitung mengembalikan jumlah poin di setiap seri.
Berarti
Mean mengembalikan total semua nilai dalam setiap seri dibagi dengan jumlah poin dalam seri itu. Dalam strict
mode jika ada nilai dalam seri nol atau nan, atau jika seri kosong, NaN dikembalikan.
Min dan Max
Min dan Max mengembalikan nilai terkecil atau terbesar dalam seri masing-masing. Dalam strict
mode jika ada nilai dalam seri nol atau nan, atau jika seri kosong, NaN dikembalikan.
Jumlah
Jumlah mengembalikan total semua nilai dalam seri. Jika seri memiliki panjang nol, jumlahnya akan menjadi 0. Dalam strict
mode jika ada nilai NaN atau Null dalam seri, NaN dikembalikan.
Terakhir
Terakhir mengembalikan nomor terakhir dalam seri. Jika seri tidak memiliki nilai maka kembali NaN.
Mode Pengurangan
Ketat
Dalam mode Ketat, seri input diproses apa adanya. Jika ada nilai dalam seri non-numerik (null, NaN atau +-Inf), NaN dikembalikan.
Jatuhkan Non-Numerik
Dalam mode ini semua nilai non-numerik (null, NaN atau +-Inf) dalam seri input disaring sebelum menjalankan fungsi reduksi.
Ganti Non-Numerik
Dalam mode ini semua nilai non-numerik diganti dengan nilai yang telah ditentukan sebelumnya.
Sampel ulang
Sampel ulang mengubah stempel waktu di setiap deret waktu agar memiliki interval waktu yang konsisten. Kasus penggunaan utama adalah agar Anda dapat mengambil sampel ulang deret waktu yang tidak berbagi stempel waktu yang sama sehingga matematika dapat dilakukan di antara mereka. Ini dapat dilakukan dengan mengambil sampel ulang masing-masing dari dua seri, dan kemudian dalam operasi Matematika yang merujuk variabel sampel ulang.
Bidang:
-
Input - Variabel data deret waktu (ReFID (seperti
A
)) untuk sampel ulang -
Sampel ulang ke — Durasi waktu untuk melakukan resample ke, misalnya.
10s
Unit bisas
untuk detik,m
menit,h
berjam-jam,d
berhari-hari,w
berminggu-minggu, dany
bertahun-tahun. -
Downsample - Fungsi reduksi untuk digunakan ketika ada lebih dari satu titik data per sampel jendela. Lihat operasi reduksi untuk detail perilaku.
-
Upsample — Metode yang digunakan untuk mengisi sampel jendela yang tidak memiliki titik data.
-
pad diisi dengan nilai knowm terakhir
-
isi ulang dengan nilai yang diketahui berikutnya
-
fillna untuk mengisi jendela sampel kosong dengan NaNs
-
Tulis ekspresi
Jika sumber data Anda mendukungnya, Grafana menampilkan tombol Ekspresi dan menampilkan ekspresi yang ada dalam daftar editor kueri.
Untuk menulis ekspresi
-
Buka panelnya.
-
Di bawah kueri, pilih Ekspresi.
-
Di bidang Operasi, pilih jenis ekspresi yang ingin Anda tulis.
-
Tulis ekspresinya.
-
Pilih Terapkan.
Kasus khusus
Ketika sumber data yang ditanyakan tidak mengembalikan seri atau angka, mesin ekspresi kembaliNoData
. Misalnya, jika permintaan berisi dua kueri sumber data yang digabungkan dengan ekspresi, jika NoData
dikembalikan oleh setidaknya salah satu kueri sumber data, maka hasil yang dikembalikan untuk seluruh kueri adalah. NoData
Untuk informasi selengkapnya tentang cara Grafana Alerting memproses NoData
hasil, lihat. Konfigurasikan aturan peringatan terkelola Grafana
Dalam kasus menggunakan ekspresi pada beberapa kueri, mesin ekspresi mengharuskan semua kueri mengembalikan stempel waktu yang identik. Misalnya, jika menggunakan matematika untuk menggabungkan hasil beberapa kueri SQL yang digunakan masing-masingSELECT NOW() AS "time"
, ekspresi hanya akan berfungsi jika semua kueri mengevaluasi NOW()
ke stempel waktu yang identik, yang tidak selalu terjadi. Untuk mengatasi hal ini, Anda dapat mengganti NOW()
dengan waktu sewenang-wenang, sepertiSELECT 1 AS "time"
, atau stempel waktu UNIX valid lainnya.