Memecahkan masalah kebijakan pemberitahuan MQL

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