View a markdown version of this page

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 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 when ditempatkan 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 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 Entry-level kondisi - lewati entri individu

add_entriesProsesor berikut menambahkan kunci yang berbeda tergantung pada kondisi masing-masing entri. Entri pertama hanya ditambahkan 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 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_entriYaProsesor dan entri
salin_nilaiYaProsesor dan entri
hapus_entriYaProsesor
pindahkan_kunciYaProsesor dan entri
meratakanYaProsesor
string huruf kecilYaProsesor
huruf besar_stringYaProsesor
trim_stringYaProsesor
substitut_stringYaProsesor dan entri
memotongYaProsesor
ekstrak_nilaiYaProsesor dan entri
convert_entry_typeYaProsesor
dateYaProsesor
membedahYaProsesor
daftar_ke_peta_YaProsesor
ganti name_keysYaProsesor dan entri
pilih_entriYaProsesor
menerjemahkanYaProsesor
grockYaProsesor
drop_eventsYaProsesor (diperlukan)
OCSF, CSV, JSON,, WAF KeyValue, Postgres,, VPC, Rute53 CloudFrontTidak

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 when menjadi false, seluruh pipeline tidak dieksekusi untuk peristiwa log itu.