Topik ini menjelaskan sintaksis kondisi pemicu dalam aturan alert.
Anda dapat menggunakan variabel untuk mereferensikan field log dalam kondisi pemicu suatu aturan alert. Untuk mengevaluasi aturan alert, Simple Log Service menjalankan kueri log berdasarkan pernyataan kueri yang ditentukan dalam aturan tersebut dan memeriksa apakah hasil kueri memenuhi kondisi pemicu. Jika kondisi tersebut terpenuhi, alert akan dipicu.
Batasan
Berikut adalah batasan yang berlaku untuk kondisi pemicu:
Bilangan negatif harus diapit tanda kurung (), misalnya x+(-100)<100.
Nilai numerik dikonversi menjadi bilangan titik mengambang 64-bit. Oleh karena itu, hasil evaluasi aturan alert mungkin tidak akurat jika melibatkan perbandingan.
Nama variabel hanya boleh terdiri atas huruf dan angka serta harus dimulai dengan huruf.
Panjang kondisi pemicu harus antara 1 hingga 128 karakter.
Jika suatu aturan alert dikaitkan dengan beberapa chart, beberapa kueri dijalankan selama setiap evaluasi aturan alert. Akibatnya, beberapa set entri log dikembalikan sebagai hasil kueri. Simple Log Service memilih satu entri log dari setiap set dan memeriksa apakah kombinasi entri log yang dipilih tersebut memenuhi kondisi pemicu. Untuk setiap evaluasi aturan alert, Simple Log Service memeriksa maksimal 1.000 kombinasi entri log. Alert dipicu jika salah satu kombinasi memenuhi kondisi pemicu.
Sebuah aturan alert dapat dikaitkan dengan maksimal tiga chart atau pernyataan kueri.
Jika hasil evaluasi kondisi pemicu bernilai true, artinya kondisi pemicu terpenuhi dan alert dipicu. Misalnya, jika kondisi pemicu adalah 100+100, hasilnya adalah 200 dan alert tidak dipicu.
Simple Log Service menyimpan dua kata: true dan false. Layanan ini juga menyimpan dua karakter khusus: tanda dolar ($) dan titik (.). Kata dan karakter khusus ini tidak dapat digunakan sebagai variabel.
Sintaksis
Tabel berikut mencantumkan sintaksis yang digunakan dalam kondisi pemicu.
Jenis sintaksis | Operasi | Deskripsi |
Operator aritmetika | Mendukung operator penjumlahan (+), pengurangan (-), perkalian (*), pembagian (/), dan modulus (%).
|
|
Operator perbandingan | Mendukung delapan operator perbandingan: lebih-dari (>), lebih-dari-atau-sama-dengan (>=), kurang-dari (<), kurang-dari-atau-sama-dengan (<=), sama-dengan (==), tidak-sama-dengan (!=), match (=~), dan not-match (!~). Catatan
|
|
Operator logika | Mendukung operator AND (&&) dan OR (||). |
|
Operator not | Mendukung operator not (!). | !(a < 1 && a > 100) |
Konstanta numerik | Mendukung konstanta numerik. Simple Log Service mengonversi konstanta numerik menjadi bilangan titik mengambang 64-bit. | x > 100 |
Konstanta string | Mendukung konstanta string dalam format 'String', misalnya 'string'. | foo == 'string' |
Konstanta Boolean | Mendukung true dan false. | (x > 100) == true |
Tanda kurung | Mendukung tanda kurung (). Anda dapat menggunakan tanda kurung untuk mengabaikan urutan presedensi standar dan memaksa Simple Log Service mengevaluasi bagian yang diapit tanda kurung terlebih dahulu sebelum bagian yang tidak diapit. | x * (y + 100) > 100 |
Fungsi bernama contains | Mendukung fungsi contains. Fungsi contains memeriksa apakah suatu string berisi substring tertentu. Misalnya, contains(foo, 'hello') mengembalikan true jika string yang direferensikan oleh variabel foo berisi substring hello. | contains(foo, 'hello') |
Kondisi pemicu dalam aturan alert yang dikaitkan dengan beberapa chart
Sintaksis
Aturan alert dapat dikaitkan dengan beberapa pernyataan kueri. Jika Anda ingin menggunakan variabel dalam kondisi pemicu untuk mereferensikan field dari hasil pernyataan kueri, Anda harus memberi awalan pada variabel tersebut dengan nomor seri pernyataan kueri dalam format $N.fieldname. Nomor seri pernyataan kueri sama dengan nomor seri chart yang menampilkan hasil pernyataan kueri tersebut. Untuk informasi selengkapnya, lihat Bagaimana cara melihat nomor seri chart? Rentang nilai N adalah 0 hingga 2 karena setiap aturan alert dikaitkan dengan maksimal tiga pernyataan kueri. Misalnya, $0.foo mereferensikan nilai field foo dari hasil pernyataan kueri pertama. Jika aturan alert hanya dikaitkan dengan satu pernyataan kueri, Anda tidak perlu menentukan awalan dalam kondisi pemicu.
Evaluasi
Saat evaluasi aturan alert, jika beberapa kueri dijalankan dan beberapa set entri log dikembalikan sebagai hasil kueri, Simple Log Service hanya menggunakan hasil kueri yang field-nya direferensikan dalam kondisi pemicu. Misalnya, tiga set entri log dikembalikan. Jumlah entri log dalam set pertama adalah z, jumlah entri log dalam set kedua adalah y, dan jumlah entri log dalam set ketiga adalah z. Jika kondisi pemicu adalah $0.foo > 100 && $1.bar < 100, Simple Log Service hanya menggunakan set pertama dan kedua selama evaluasi aturan alert. Simple Log Service memilih satu entri log dari masing-masing set tersebut dan memeriksa apakah kombinasi entri log yang dipilih memenuhi kondisi pemicu. Simple Log Service memeriksa x × y kombinasi. Jika hasil x × y melebihi 1.000, Simple Log Service hanya memeriksa 1.000 kombinasi. Jika salah satu kombinasi memenuhi kondisi pemicu, Simple Log Service memicu alert.
Implementasi operator
Simple Log Service mengonversi semua nilai numerik menjadi bilangan titik mengambang 64-bit.
Konstanta string harus diapit tanda petik tunggal ('') atau tanda petik ganda (""), misalnya 'string' atau "string".
Nilai Boolean mencakup true dan false.
Operator | Implementasi | ||
Operasi antar variabel | Operasi antara konstanta non-string dan variabel | Operasi antara konstanta string dan variabel | |
Operator aritmetika: penjumlahan (+), pengurangan (-), perkalian (*), pembagian (/), dan modulus (%) | Sebelum operator aritmetika diterapkan, operan kiri dan kanan dikonversi menjadi bilangan titik mengambang 64-bit. | Tidak didukung. | |
Operator perbandingan: lebih-dari (>), lebih-dari-atau-sama-dengan (>=), kurang-dari (<), kurang-dari-atau-sama-dengan (<=), sama-dengan (==), dan tidak-sama-dengan (!=) | Simple Log Service menggunakan aturan perbandingan berikut yang diurutkan berdasarkan tingkat presedensi:
| Operan kiri dan kanan dikonversi menjadi bilangan titik mengambang 64-bit lalu dibandingkan berdasarkan urutan numerik. | Operan kiri dan kanan dikonversi menjadi string lalu dibandingkan berdasarkan urutan leksikografis. |
Operator ekspresi reguler: regex match (=~) dan regex not match (!~) | Sebelum operator pencocokan diterapkan, operan kiri dan kanan dikonversi menjadi string. | Tidak didukung. | Sebelum operator pencocokan diterapkan, operan kiri dan kanan dikonversi menjadi string. |
Operator logika: AND (&&) dan OR (||) | Operator logika tidak dapat diterapkan pada field log. Operan kiri dan kanan harus berupa ekspresi kondisional. Hasil yang dikembalikan oleh operator logika bertipe data Boolean. | ||
Operator not (!) | Operator not tidak dapat diterapkan pada field log. Operan kanan harus berupa ekspresi kondisional. Hasil yang dikembalikan oleh operator not bertipe data Boolean. | ||
Fungsi bernama contains | Sebelum fungsi contains dijalankan, parameter input dikonversi menjadi string. | Tidak didukung. | Sebelum fungsi contains dijalankan, parameter input dikonversi menjadi string. |
Tanda kurung () | Tanda kurung digunakan untuk mengabaikan urutan presedensi standar dan memaksa Simple Log Service mengevaluasi bagian yang diapit tanda kurung terlebih dahulu sebelum bagian yang tidak diapit. | ||
Contoh
-
Contoh 1: Picu alert jika tingkat keberhasilan task turun di bawah 90% dan latensi melebihi 60 detik dalam rentang waktu 1 hari (relatif). Tetapkan nama alert menjadi Task Latency Alert dan kaitkan dua chart: Chart 0 bernama Task Success Rate, dengan pernyataan kueri
* | select round(sum(case when code = 200 then 1 else 0 end) * 100.0 / count(*), 2) as successdan rentang waktu kueri 1 day (relative); Chart 1 bernama Latency Status, dengan pernyataan kueridelay > 0 | select time_series(__time__, '10m', '%m-%d %H:%i', '0') as time, round(avg(delay)/100, 3) as delay group by time order by time limit 14400dan rentang waktu kueri 1 day (relative). Tetapkan interval evaluasi menjadi interval tetap 15 menit, dan tetapkan kondisi pemicu menjadi$0.success < 90 && $1.delay > 60. -
Contoh 2: Picu alert jika kode status 500 terjadi 10 kali dalam 15 menit. Tetapkan nama alert menjadi 500 Status Code Alert. Kaitkan Chart 0, bernama Response Status Distribution, dengan pernyataan kueri
* | SELECT status, COUNT(*) as total GROUP BY statusdan rentang waktu kueri 15 minutes (relative). Tetapkan interval evaluasi menjadi interval tetap 15 menit, dan tetapkan kondisi pemicu menjadi$0.status == 500 && $0.total > 10. -
Contoh 3: Picu alert jika laju pemrosesan turun di bawah 1.000 entri per detik dalam 1 jam. Tetapkan nama alert menjadi Low Data Processing Rate Alert. Kaitkan Chart 0, bernama Processing Rate (lines/s), dengan pernyataan kueri
__topic__: __etl-log-status__ AND __tag__: __schedule_type__: Resident and event_id: "shard_worker:metrics:checkpoint" | select time_series(__time__, '1m', '%y/%m/%d %H:%i', '0') as dt, round(sum("progress.accept") / 60.0, 3) as "accept", round(sum("progress.dropped") / 60.0, 3) as "dropped", round(sum("progress.delivered") / 60.0, 3) as "delivered", round(sum("progress.failed") / 60.0, 3) as "failed" group by dt order by dt asc limit 10000dan rentang waktu kueri 1 hour (relative). Tetapkan interval evaluasi menjadi interval tetap 1 jam, dan tetapkan kondisi pemicu menjadi$0.accept < 1000.