

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
<a name="conditional-processing"></a>

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, lihat[CloudWatch prosesor pipa](pipeline-processors.md). Untuk contoh konfigurasi, lihat[Kasus penggunaan prosesor yang umum](processor-examples.md).

## Kondisi tingkat prosesor dan entry-level
<a name="conditional-levels"></a>

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.  

**Example Kondisi tingkat prosesor - lewati seluruh prosesor**  
`delete_entries`Prosesor 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 (seperti`add_entries`,`copy_values`,`rename_keys`,`move_keys`,`extract_value`, dan`substitute_string`).  

**Example Kondisi entry-level - lewati entri individual**  
`add_entries`Prosesor 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.

**Example 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](#conditional-support) 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`

**Example Entri mundur dengan when\$1else**  
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
<a name="conditional-support"></a>

Tabel berikut menunjukkan prosesor mana yang mendukung pemrosesan bersyarat dan pada tingkat apa.


**Dukungan kondisional prosesor**  

| Prosesor | Dukungan bersyarat | Tingkat | 
| --- | --- | --- | 
| add\$1entri | Ya | Prosesor dan entri | 
| copy\$1values | Ya | Prosesor dan entri | 
| delete\$1entri | Ya | Prosesor | 
| move\$1keys | Ya | Prosesor dan entri | 
| meratakan | Ya | Prosesor | 
| huruf kecil\$1string | Ya | Prosesor | 
| uppercase\$1string | Ya | Prosesor | 
| trim\$1string | Ya | Prosesor | 
| substitute\$1string | Ya | Prosesor dan entri | 
| memotong | Ya | Prosesor | 
| extract\$1value | Ya | Prosesor dan entri | 
| convert\$1entry\$1type | Ya | Prosesor | 
| date | Ya | Prosesor | 
| membedah | Ya | Prosesor | 
| list\$1to\$1map | Ya | Prosesor | 
| rename\$1keys | Ya | Prosesor dan entri | 
| select\$1entries | Ya | Prosesor | 
| menerjemahkan | Ya | Prosesor | 
| grok | Ya | Prosesor | 
| drop\$1events | Ya | Prosesor (wajib) | 
| OCSF, CSV, JSON, WAF, Postgres KeyValue, VPC, Route53 CloudFront | Tidak | — | 

## Operator
<a name="expression-operators"></a>


**Operator yang didukung**  

| Kategori | Operator | Contoh | 
| --- | --- | --- | 
| Relasional | <, <=, >, >= | status\$1code >= 200 and status\$1code < 300 | 
| Kesetaraan | ==, \$1= | log.level == "ERROR" | 
| Bersyarat | and, or, not | log.level == "ERROR" or log.level == "FATAL" | 
| Aritmatika | \$1, -, \$1, / | response\$1time \$1 1000 > 5000 | 
| Tetapkan keanggotaan | in, not in | environment in \$1"prod", "staging", "preprod"\$1 | 
| Pencocokan Regex | =\$1, \$1\$1 | message =\$1 "^ERROR.\$1timeout" | 

## Fungsi
<a name="expression-functions"></a>

`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
<a name="expression-examples"></a>

```
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
<a name="expression-limitations"></a>
+ 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.