Halaman ini menjelaskan alasan beberapa kebijakan pemberitahuan dengan kondisi berbasis Bahasa Kueri Monitoring (MQL) mungkin berperilaku berbeda dari yang dimaksudkan, dan menawarkan kemungkinan solusi untuk situasi tersebut.
Kesenjangan data
Anda telah membuat kebijakan pemberitahuan dengan kondisi berbasis MQL, dan hasil kueri MQL menunjukkan kesenjangan yang tidak terduga dalam data yang dilaporkan.
Kesenjangan muncul dalam data yang diselaraskan saat penghitungan menghasilkan nilai null pada stempel waktu tertentu. Misalnya, tabel data berikut terkait dengan kueri dengan periode 30 detik:
Tabel A1
Stempel waktu | Nilai |
---|---|
00:00:00 | 1 |
00:00:30 | 2 |
00:01:30 | 3 |
00:02:00 | 4 |
Karena memiliki periode 30 detik, Anda akan melihat stempel waktu pada 00:01:00. Kesenjangan seperti ini dapat terjadi karena berbagai alasan.
Kesenjangan karena penyelarasan
Jendela penyelarasan yang terlalu sempit dapat menyebabkan celah data. Misalnya, tabel data metrik mentah yang tidak selaras berikut ini ditulis kira-kira setiap 30 detik.
Tabel B1
Stempel waktu | Nilai |
---|---|
00:00:01 | 1 |
00:00:28 | 2 |
00:01:01 | 3 |
00:01:32 | 4 |
Jika Anda menjalankan kueri pada 00:02:00 yang menyelaraskan data menggunakan operasi
next_older(30s)
,
Anda akan menerima output berikut, yang memiliki kesenjangan data pada 00:01:00:
Tabel B2
Stempel waktu | Nilai |
---|---|
00:00:30 | 2 |
00:00:28 | 3 |
00:01:01 | 4 |
Kesenjangan data ini terjadi karena tidak ada titik dalam data mentah yang jatuh dalam jangka waktu 30 detik
yang berakhir pada 00:01:00. Untuk menghindari celah seperti ini, gunakan jendela yang lebih besar.
Misalnya, operasi next_older(1m)
menghasilkan tabel tanpa kesenjangan data:
Tabel B3
Stempel waktu | Nilai |
---|---|
00:00:01 | 1 |
00:00:28 | 2 |
00:01:01 | 3 |
00:01:32 | 4 |
Secara umum, jika data Anda ditulis setiap S detik, gunakan jendela perataan yang lebih besar dari S. Dengan cara ini, Anda dapat memperhitungkan distribusi titik data yang tidak merata dari waktu ke waktu.
Kesenjangan karena operasi tabel
Beberapa operasi tabel dapat menghasilkan kesenjangan yang tidak terduga. Misalnya, operasi
join
hanya menghasilkan output pada stempel waktu yang memiliki nilai dalam
semua tabel input.
Operasi tabel seperti join
dapat menghasilkan kesenjangan. Misalnya, Anda menggabungkan
dua tabel yang disejajarkan berikut:
Tabel C1
Stempel waktu | Nilai |
---|---|
00:00:30 | 2 |
00:01:30 | 3 |
00:02:00 | 4 |
Tabel C2
Stempel waktu | Nilai |
---|---|
00:00:30 | 4 |
00:01:00 | 3 |
00:01:30 | 2 |
00:02:00 | 1 |
Anda kemudian menerima output berikut:
Tabel C3
Stempel waktu | Nilai A | Nilai B |
---|---|---|
00:00:30 | 1 | 4 |
00:01:30 | 2 | 2 |
00:02:00 | 3 | 1 |
Tabel ini tidak memiliki nilai pada 00:01:00
karena tidak ada nilai pada 00:01:00
di Tabel C1.
Kesenjangan karena nilai yang hilang
Beberapa fungsi menghasilkan kesenjangan saat outputnya tidak dapat dikonversi atau
tidak ditentukan. Misalnya, Anda menerapkan value.string_to_int64
ke tabel nilai string berikut:
Tabel D1
Stempel waktu | Nilai |
---|---|
00:00:30 | '4' |
00:01:00 | '3' |
00:01:30 | 'ini' |
00:02:00 | '1' |
Tabel yang dihasilkan berisi kesenjangan pada 00:01:30 karena MQL
tidak dapat mengonversi 'init'
menjadi bilangan bulat:
Tabel D2
Stempel waktu | Nilai |
---|---|
00:00:30 | 4 |
00:01:00 | 3 |
00:01:30 | null |
00:02:00 | 1 |
Untuk menghindari kesenjangan data karena nilai yang buruk atau tidak ada, gunakan
fungsi has_value
atau or_else
untuk menangani
nilai tersebut.
has_value
menampilkan false
jika argumennya bernilai null. Jika tidak, true
akan ditampilkan. Misalnya, jika Anda menerapkan value has_value(1 / val())
ke Tabel D2, hasil Anda tidak memiliki kesenjangan:
Tabel D3
Stempel waktu | Nilai |
---|---|
00:00:30 | true |
00:01:00 | true |
00:01:30 | false |
00:02:00 | true |
Pemberitahuan nilai minimum diaktifkan saat diagram MQL menampilkan nilai minimum yang belum terlampaui
Anda ingin diberi tahu jika virtual machine (VM) memiliki fluktuasi yang besar dalam pemakaian CPU-nya, sehingga Anda membuat kebijakan pemberitahuan yang memantau metrik compute.googleapis.com/instance/cpu/utilization
. Anda membuat
dan mengonfigurasi kondisi untuk menghasilkan insiden saat pemakaian CPU
setiap enam jam lebih besar dari batas 50%. Kondisi
Anda menggunakan kueri berikut:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge(6h) | condition val() > 0.5
Anda akan menerima notifikasi setelah 30 detik. Namun, diagram MQL Anda menunjukkan bahwa delta pemakaian belum menjadi lebih besar dari nilai minimum.
Kebijakan pemberitahuan memiliki periode output 30 detik. Periode ini tidak dapat ditimpa dengan membiarkan periode tidak ditentukan atau menentukan periode yang berbeda dalam kueri Anda. Misalnya, kueri berikut masih menggunakan periode output 30 detik:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge(6h) # period not 30 seconds | condition val() > 0.5
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge() # undefined period | condition val() > 0.5
Nilai minimum metrik Anda terlampaui dalam 30 detik pertama evaluasi, sehingga Cloud Monitoring mengirim pemberitahuan. Untuk menghindari masalah ini,
tambahkan | every 30s
ke akhir kueri untuk memverifikasi bahwa jendela output
menghasilkan hasil yang diinginkan. Contoh:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | group_by 5m, [value_utilization_mean: mean(value.utilization)] | align delta_gauge() | every 30s # explicit 30 second output window | condition val() > 0.5
Error: Tidak dapat menyimpan kebijakan pemberitahuan. Permintaan berisi argumen yang tidak valid.
Anda telah membuat kebijakan pemberitahuan dengan kondisi berbasis MQL. Saat menyimpan kebijakan pemberitahuan, Anda akan menerima pesan error berikut:
Error: Unable to save alerting policy. Request contains an invalid argument.
Beberapa operasi tabel MQL, seperti group_by
, memerlukan inputnya yang harus diselaraskan. Jika kueri Anda tidak menyelaraskan inputnya, MQL akan otomatis menyelaraskan data. Namun, penyelarasan otomatis ini
terkadang menghasilkan argumen yang tidak valid.
Untuk menghindari masalah ini, jika kueri Anda menggunakan operasi tabel, pastikan kueri Anda menyertakan penyelarasan data. Untuk mengetahui daftar fungsi penyelarasan data, lihat bagian penyelarasan dalam dokumentasi referensi MQL.
Garis nilai minimum tidak muncul di diagram MQL
Anda membuat kebijakan pemberitahuan batas metrik dengan kondisi berbasis MQL. Namun, garis nilai minimum tidak muncul di diagram MQL.
Cloud Monitoring hanya menggambar garis nilai minimum jika kueri Anda berisi ekspresi boolean yang membandingkan dua nilai, dengan satu nilai adalah kolom dan satu nilai adalah literal. Misalnya, ekspresi berikut membuat diagram garis batas:
val() > 5'GBy'
Namun, ekspresi berikut tidak memetakan garis ambang batas:
val(0) > val(1) #one of the values must be a literal
5 > 4 #one of the values must be a column
val() #the expression must be a comparison