Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sintaks ekspresi untuk pemrosesan bersyarat
CloudWatch prosesor pipeline yang mendukung pemrosesan kondisional menerima when parameter yang berisi ekspresi. Ketika ekspresi dievaluasi menjadi true, prosesor atau entri dieksekusi. Ekspresi menggunakan notasi titik (.) untuk akses bidang bersarang. Misalnya, user.role mengakses role bidang di dalam user objek. Untuk detail selengkapnya tentang prosesor yang mendukung pemrosesan bersyarat dan parameter spesifiknya, lihatCloudWatch prosesor pipa. Untuk contoh konfigurasi, lihatKasus penggunaan prosesor umum.
catatan
Pemrosesan bersyarat hanya berlaku untuk saluran pipa log. Pipeline metrik tidak mendukung when parameter.
Processor-level dan kondisi entry-level
Ada dua level di mana Anda dapat menerapkan suatu when kondisi, tergantung pada prosesor.
- Processor-level
when(tingkat luar) -
A
whenditempatkan di tingkat atas konfigurasi prosesor. Jika ekspresi dievaluasi menjadi false, seluruh prosesor dilewati dan tidak ada operasi di dalamnya yang dijalankan. Semua prosesor yang mendukung pemrosesan bersyarat mendukung level ini.contoh Processor-level kondisi - lewati seluruh prosesor
delete_entriesProsesor berikut hanya berjalan ketika lingkungan sedang produksi atau pementasan. Jika kondisinya salah, tidak ada kunci yang dihapus.processor: - delete_entries: with_keys: ["password", "api_key", "ssn"] when: "environment in {'prod', 'staging'}" - Entry-level
when(dalam setiap entri) -
A
whenditempatkan di dalam entri individu dalamentriesarray. Setiap entri dievaluasi secara independen — jika ekspresinya salah, hanya entri tertentu yang dilewati sementara entri lain dalam prosesor yang sama masih dijalankan. Hanya prosesor denganentriesarray yang mendukung level ini (sepertiadd_entries,copy_values,rename_keys,move_keys,extract_value, dansubstitute_string).contoh Entry-level kondisi - lewati entri individu
add_entriesProsesor berikut menambahkan kunci yang berbeda tergantung pada kondisi masing-masing entri. Entri pertama hanya ditambahkanseverityketika level log adalah ERROR. Entri kedua selalu menambahkanprocessedkarena tidak memiliki kondisi.processor: - add_entries: entries: - key: "severity" value: "high" when: "log.level == 'ERROR'" - key: "processed" value: "true"
Prosesor yang mendukung kedua level dapat menggunakannya bersama-sama. Ketika keduanya ditentukan, kondisi tingkat prosesor dievaluasi terlebih dahulu. Jika salah, seluruh prosesor dilewati dan tidak ada kondisi entry-level yang dievaluasi.
contoh Kedua level digabungkan
Tingkat prosesor when memastikan seluruh prosesor hanya berjalan untuk lalu lintas produksi. Di dalamnya, setiap entri memiliki kondisinya sendiri untuk mengontrol kunci mana yang ditambahkan.
processor: - add_entries: when: "environment == 'prod'" entries: - key: "alert_level" value: "critical" when: "log.level == 'ERROR'" - key: "alert_level" value: "warning" when: "log.level == 'WARN'"
Untuk tabel yang menunjukkan prosesor mana yang mendukung level mana, lihat Dukungan pemrosesan bersyarat bagian di bawah ini.
Fallback dengan wend_else
Prosesor yang mendukung kondisi entry-level juga mendukung. when_else Entri dengan when_else bertindak sebagai fallback - itu dieksekusi hanya ketika tidak ada when kondisi lain dalam prosesor yang sama yang cocok. Nilai ekspresi yang disediakan untuk when_else mengidentifikasi kumpulan when kondisi mana yang harus dipertimbangkan, tetapi entri itu sendiri berjalan semata-mata berdasarkan apakah semua kondisi tersebut dievaluasi menjadi salah. Tidak ada pemeriksaan negasi eksplisit - entri hanya berjalan ketika tidak ada yang when cocok.
contoh Entri fallback dengan wend_else
Entri pertama berjalan ketika level log adalah ERROR. Entri kedua menggunakan when_else dan berjalan hanya ketika when kondisi entri pertama tidak cocok (yaitu, level log adalah apa pun selain ERROR).
processor: - add_entries: entries: - key: "alert_level" value: "critical" when: "log.level == 'ERROR'" - key: "alert_level" value: "info" when_else: "log.level == 'ERROR'"
Dukungan pemrosesan bersyarat
Tabel berikut menunjukkan prosesor mana yang mendukung pemrosesan bersyarat dan pada tingkat apa.
| Prosesor | Dukungan bersyarat | Tingkat |
|---|---|---|
| tambah_entri | Ya | Prosesor dan entri |
| salin_nilai | Ya | Prosesor dan entri |
| hapus_entri | Ya | Prosesor |
| pindahkan_kunci | Ya | Prosesor dan entri |
| meratakan | Ya | Prosesor |
| string huruf kecil | Ya | Prosesor |
| huruf besar_string | Ya | Prosesor |
| trim_string | Ya | Prosesor |
| substitut_string | Ya | Prosesor dan entri |
| memotong | Ya | Prosesor |
| ekstrak_nilai | Ya | Prosesor dan entri |
| convert_entry_type | Ya | Prosesor |
| date | Ya | Prosesor |
| membedah | Ya | Prosesor |
| daftar_ke_peta_ | Ya | Prosesor |
| ganti name_keys | Ya | Prosesor dan entri |
| pilih_entri | Ya | Prosesor |
| menerjemahkan | Ya | Prosesor |
| grock | Ya | Prosesor |
| drop_events | Ya | Prosesor (diperlukan) |
| OCSF, CSV, JSON,, WAF KeyValue, Postgres,, VPC, Rute53 CloudFront | Tidak | — |
Operator
Tabel berikut mencantumkan operator yang didukung.
| Kategori | Operator | Contoh |
|---|---|---|
| Relasional | <, <=, >,
>= |
status_code >= 200 and status_code < 300 |
| Kesetaraan | ==, != |
log.level == "ERROR" |
| Bersyarat | and, or, not |
log.level == "ERROR" or log.level == "FATAL" |
| Aritmatika | +, -, *,
/ |
response_time * 1000 > 5000 |
| Tetapkan keanggotaan | in, not in |
environment in {"prod", "staging", "preprod"} |
| Pencocokan Regex | =~, !~ |
message =~ "^ERROR.*timeout" |
Fungsi
length(value)-
Mengembalikan panjang string atau array. Contoh:
length(message) > 100 contains(value, search)-
Memeriksa apakah string berisi substring atau array berisi elemen. Contoh:
contains(message, "error") startsWith(field, prefix)-
Memeriksa apakah string dimulai dengan awalan tertentu. Contoh:
startsWith(message, "ERROR")
Contoh ekspresi
log.level == "ERROR" status_code >= 200 and status_code < 300 environment in {"prod", "staging", "preprod"} message =~ "^ERROR.*timeout" user.role == "admin" and user.permissions.write == true length(message) > 100 and contains(message, "error") (log.level == "ERROR" or log.level == "FATAL") and environment == "prod"
Batasan
-
Panjang maksimum ekspresi adalah 256 karakter.
-
Prosesor parser (kecuali Grok) tidak mendukung pemrosesan bersyarat. Ini termasuk JSON, CSV,, WAF KeyValue, Postgres,, VPC, Route CloudFront 53, dan parser OCSF.
-
Jika prosesor Grok digunakan sebagai parser (prosesor pertama) dalam pipeline dan kondisinya dievaluasi
whenmenjadi false, seluruh pipeline tidak dieksekusi untuk peristiwa log itu.