Sintaks ekspresi untuk pemrosesan bersyarat - Amazon CloudWatch

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 when ditempatkan 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 when ditempatkan di dalam entri individu dalam entries array. Setiap entri dievaluasi secara independen — jika ekspresinya salah, hanya entri tertentu yang dilewati sementara entri lain dalam prosesor yang sama masih dijalankan. Hanya prosesor dengan entries array 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 menambahkan severity ketika level log adalah ERROR. Entri kedua selalu menambahkan processed karena 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.

Dukungan kondisional prosesor
Prosesor Dukungan bersyarat Tingkat
add_entriYaProsesor dan entri
copy_valuesYaProsesor dan entri
delete_entriYaProsesor
move_keysYaProsesor dan entri
meratakanYaProsesor
huruf kecil_stringYaProsesor
uppercase_stringYaProsesor
trim_stringYaProsesor
substitute_stringYaProsesor dan entri
memotongYaProsesor
extract_valueYaProsesor dan entri
convert_entry_typeYaProsesor
dateYaProsesor
membedahYaProsesor
list_to_mapYaProsesor
rename_keysYaProsesor dan entri
select_entriesYaProsesor
menerjemahkanYaProsesor
grokYaProsesor
drop_eventsYaProsesor (wajib)
OCSF, CSV, JSON, WAF, Postgres KeyValue, VPC, Route53 CloudFrontTidak

Operator

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 parser JSON, CSV, WAF KeyValue, Postgres,, CloudFront VPC, Route53, dan OCSF.

  • Jika prosesor Grok digunakan sebagai parser (prosesor pertama) dalam pipeline dan when kondisinya dievaluasi menjadi false, seluruh pipeline tidak mengeksekusi untuk peristiwa log tersebut.