

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Ausdruckssyntax für bedingte Verarbeitung
<a name="conditional-processing"></a>

CloudWatch Pipeline-Prozessoren, die die bedingte Verarbeitung unterstützen, akzeptieren einen `when` Parameter, der einen Ausdruck enthält. Wenn der Ausdruck als wahr ausgewertet wird, wird der Prozessor oder Eintrag ausgeführt. Ausdrücke verwenden die Punktnotation (`.`) für den Zugriff auf verschachtelte Felder. `user.role`Greift beispielsweise auf das `role` Feld innerhalb des `user` Objekts zu. Weitere Informationen zu Prozessoren, die bedingte Verarbeitung unterstützen, und zu ihren spezifischen Parametern finden Sie unter[CloudWatch Pipelines, Prozessoren](pipeline-processors.md). Konfigurationsbeispiele finden Sie unter[Allgemeine Anwendungsfälle für Prozessoren](processor-examples.md).

## Bedingungen auf Prozessor- und Einstiegsebene
<a name="conditional-levels"></a>

Je nach Prozessor gibt es zwei Stufen, auf denen Sie eine `when` Bedingung anwenden können.

Prozessorebene `when` (äußere Ebene)  
A `when` befindet sich auf der obersten Ebene der Prozessorkonfiguration. Wenn der Ausdruck den Wert False ergibt, wird der gesamte Prozessor übersprungen und es werden keine darin enthaltenen Operationen ausgeführt. Alle Prozessoren, die bedingte Verarbeitung unterstützen, unterstützen diese Stufe.  

**Example Zustand auf Prozessorebene — Der gesamte Prozessor wird übersprungen**  
Der folgende `delete_entries` Prozessor läuft nur, wenn es sich um eine Produktions- oder Staging-Umgebung handelt. Wenn die Bedingung falsch ist, wird keiner der Schlüssel gelöscht.  

```
processor:
  - delete_entries:
      with_keys: ["password", "api_key", "ssn"]
      when: "environment in {'prod', 'staging'}"
```

Einstiegsebene `when` (innerhalb jedes Eintrags)  
A `when` wird in einem einzelnen Eintrag im Array platziert. `entries` Jeder Eintrag wird unabhängig ausgewertet — wenn der Ausdruck falsch ist, wird nur dieser spezifische Eintrag übersprungen, während andere Einträge im selben Prozessor weiterhin ausgeführt werden. Nur Prozessoren mit einem `entries` Array unterstützen diese Stufe (wie`add_entries`,`copy_values`,`rename_keys`, `move_keys``extract_value`, und`substitute_string`).  

**Example Zustand der Einstiegsklasse — einzelne Eingaben werden übersprungen**  
Der folgende `add_entries` Prozessor fügt je nach Zustand der einzelnen Einträge unterschiedliche Schlüssel hinzu. Der erste Eintrag wird nur hinzugefügt`severity`, wenn die Protokollebene ERROR ist. Der zweite Eintrag fügt immer hinzu`processed`, weil er keine Bedingung hat.  

```
processor:
  - add_entries:
      entries:
        - key: "severity"
          value: "high"
          when: "log.level == 'ERROR'"
        - key: "processed"
          value: "true"
```

Prozessoren, die beide Stufen unterstützen, können sie zusammen verwenden. Wenn beide angegeben sind, wird zuerst die Bedingung auf Prozessorebene bewertet. Wenn der Wert falsch ist, wird der gesamte Prozessor übersprungen, und es werden keine Einstiegsbedingungen ausgewertet.

**Example Beide Stufen kombiniert**  
Die Prozessorebene `when` stellt sicher, dass der gesamte Prozessor nur für den Produktionsverkehr läuft. Dabei hat jeder Eintrag seine eigene Bedingung, mit der gesteuert wird, welcher Schlüssel hinzugefügt wird.  

```
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'"
```

Eine Tabelle, die zeigt, welche Prozessoren welche Stufe unterstützen, finden Sie im folgenden [Unterstützung für bedingte Verarbeitung](#conditional-support) Abschnitt.

**Fallback mit `when_else`**  
Prozessoren, die Einstiegsbedingungen unterstützen, unterstützen ebenfalls. `when_else` Ein Eintrag mit `when_else` dient als Fallback — er wird nur ausgeführt, wenn keine der anderen `when` Bedingungen im selben Prozessor zutrifft. Der angegebene Ausdruckswert `when_else` gibt an, welcher Satz von `when` Bedingungen berücksichtigt werden soll, aber der Eintrag selbst wird ausschließlich auf der Grundlage ausgeführt, ob diese Bedingungen alle als falsch bewertet wurden. Es gibt keine explizite Negationsprüfung — der Eintrag wird einfach ausgeführt, wenn keine andere Eingabe zutrifft`when`.

**Example Fallback-Eintrag mit when\$1else**  
Der erste Eintrag wird ausgeführt, wenn die Protokollebene ERROR ist. Der zweite Eintrag verwendet `when_else` und wird nur ausgeführt, wenn die `when` Bedingung des ersten Eintrags nicht zutrifft (d. h. die Protokollebene ist etwas anderes als FEHLER).  

```
processor:
  - add_entries:
      entries:
        - key: "alert_level"
          value: "critical"
          when: "log.level == 'ERROR'"
        - key: "alert_level"
          value: "info"
          when_else: "log.level == 'ERROR'"
```

## Unterstützung für bedingte Verarbeitung
<a name="conditional-support"></a>

Die folgende Tabelle zeigt, welche Prozessoren die bedingte Verarbeitung unterstützen und auf welcher Ebene.


**Bedingte Unterstützung für Prozessoren**  

| Prozessor | Bedingte Unterstützung | Level | 
| --- | --- | --- | 
| add\$1entries | Ja | Prozessor und Eintrag | 
| copy\$1values | Ja | Prozessor und Eintrag | 
| delete\$1entries | Ja | Prozessor | 
| Schlüssel verschieben | Ja | Prozessor und Eintrag | 
| flatten | Ja | Prozessor | 
| lowercase\$1string | Ja | Prozessor | 
| Zeichenfolge in Großbuchstaben | Ja | Prozessor | 
| trim\$1string | Ja | Prozessor | 
| ersetzen\$1Zeichenfolge | Ja | Prozessor und Eintrag | 
| kürzen | Ja | Prozessor | 
| Wert extrahieren | Ja | Prozessor und Eintrag | 
| convert\$1entry\$1type | Ja | Prozessor | 
| date | Ja | Prozessor | 
| sezieren | Ja | Prozessor | 
| list\$1zu\$1map | Ja | Prozessor | 
| Schlüssel umbenennen | Ja | Prozessor und Eintrag | 
| select\$1entries | Ja | Prozessor | 
| translate | Ja | Prozessor | 
| Grok | Ja | Prozessor | 
| drop\$1events | Ja | Prozessor (erforderlich) | 
| OCSF, CSV, JSON, WAF KeyValue, Postgres, VPC, Route53 CloudFront | Nein | — | 

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


**Unterstützte Operatoren**  

| Kategorie | Betreiber | Beispiel | 
| --- | --- | --- | 
| Relational | <, <=, >, >= | status\$1code >= 200 and status\$1code < 300 | 
| Gleichheit | ==, \$1= | log.level == "ERROR" | 
| Bedingt | and, or, not | log.level == "ERROR" or log.level == "FATAL" | 
| Arithmetisch | \$1, -, \$1, / | response\$1time \$1 1000 > 5000 | 
| Mitgliedschaft festlegen | in, not in | environment in \$1"prod", "staging", "preprod"\$1 | 
| Regex-Abgleich | =\$1, \$1\$1 | message =\$1 "^ERROR.\$1timeout" | 

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

`length(value)`  
Gibt die Länge einer Zeichenfolge oder eines Arrays zurück. Beispiel: `length(message) > 100`

`contains(value, search)`  
Prüft, ob eine Zeichenfolge eine Teilzeichenfolge oder ein Array ein Element enthält. Beispiel: `contains(message, "error")`

`startsWith(field, prefix)`  
Prüft, ob eine Zeichenfolge mit einem angegebenen Präfix beginnt. Beispiel: `startsWith(message, "ERROR")`

## Beispiele für Ausdrücke
<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"
```

## Einschränkungen
<a name="expression-limitations"></a>
+ Die maximale Länge eines Ausdrucks beträgt 256 Zeichen.
+ Parser-Prozessoren (außer Grok) unterstützen keine bedingte Verarbeitung. Dazu gehören JSON-, CSV-, WAF- KeyValue, Postgres-, VPC- CloudFront, Route53- und OCSF-Parser.
+ Wenn der Grok-Prozessor als Parser (erster Prozessor) in einer Pipeline verwendet wird und sein `when` Zustand als falsch ausgewertet wird, wird die gesamte Pipeline für dieses Protokollereignis nicht ausgeführt.