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 pipelines yang mendukung pemrosesan bersyarat menerima when parameter yang berisi ekspresi. Ketika ekspresi dievaluasi ke true, prosesor atau entri mengeksekusi. Ekspresi menggunakan notasi titik (.) untuk akses bidang bersarang. Misalnya, user.role mengakses role bidang di dalam user objek. Untuk detail lebih lanjut tentang prosesor yang mendukung pemrosesan bersyarat dan parameter spesifiknya, lihatCloudWatch prosesor pipa. Untuk contoh konfigurasi, lihatKasus penggunaan prosesor yang umum.
Kondisi tingkat prosesor dan entry-level
Ada dua level di mana Anda dapat menerapkan suatu when kondisi, tergantung pada prosesornya.
- Tingkat prosesor
when(tingkat luar) -
A
whenditempatkan di tingkat atas konfigurasi prosesor. Jika ekspresi dievaluasi ke false, seluruh prosesor dilewati dan tidak ada operasi di dalamnya dijalankan. Semua prosesor yang mendukung pemrosesan bersyarat mendukung level ini.contoh Kondisi tingkat prosesor - lewati seluruh prosesor
delete_entriesProsesor berikut hanya berjalan ketika lingkungan 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 Kondisi entry-level - lewati entri individual
add_entriesProsesor berikut menambahkan kunci yang berbeda tergantung pada kondisi masing-masing entri. Entri pertama hanya menambahkanseverityketika 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 when_else
Prosesor yang mendukung kondisi entry-level juga mendukung. when_else Entri dengan when_else bertindak sebagai fallback — hanya mengeksekusi ketika tidak ada when kondisi lain dalam prosesor yang sama yang cocok. Nilai ekspresi yang diberikan untuk when_else mengidentifikasi kumpulan when kondisi mana yang harus dipertimbangkan, tetapi entri itu sendiri berjalan hanya berdasarkan apakah semua kondisi tersebut dievaluasi menjadi false. Tidak ada pemeriksaan negasi eksplisit — entri hanya berjalan ketika tidak ada yang cocok. when
contoh Entri mundur dengan when_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 |
|---|---|---|
| add_entri | Ya | Prosesor dan entri |
| copy_values | Ya | Prosesor dan entri |
| delete_entri | Ya | Prosesor |
| move_keys | Ya | Prosesor dan entri |
| meratakan | Ya | Prosesor |
| huruf kecil_string | Ya | Prosesor |
| uppercase_string | Ya | Prosesor |
| trim_string | Ya | Prosesor |
| substitute_string | Ya | Prosesor dan entri |
| memotong | Ya | Prosesor |
| extract_value | Ya | Prosesor dan entri |
| convert_entry_type | Ya | Prosesor |
| date | Ya | Prosesor |
| membedah | Ya | Prosesor |
| list_to_map | Ya | Prosesor |
| rename_keys | Ya | Prosesor dan entri |
| select_entries | Ya | Prosesor |
| menerjemahkan | Ya | Prosesor |
| grok | Ya | Prosesor |
| drop_events | Ya | Prosesor (wajib) |
| OCSF, CSV, JSON, WAF, Postgres KeyValue, VPC, Route53 CloudFront | Tidak | — |
Operator
| 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 parser JSON, CSV, WAF KeyValue, Postgres,, CloudFront VPC, Route53, dan OCSF.
-
Jika prosesor Grok digunakan sebagai parser (prosesor pertama) dalam pipeline dan
whenkondisinya dievaluasi menjadi false, seluruh pipeline tidak mengeksekusi untuk peristiwa log tersebut.