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
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.roleGreift 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 unterCloudWatch Pipelines, Prozessoren. Konfigurationsbeispiele finden Sie unterAllgemeine Anwendungsfälle für Prozessoren.
Bedingungen auf Prozessor- und Einstiegsebene
Je nach Prozessor gibt es zwei Stufen, auf denen Sie eine when Bedingung anwenden können.
- Prozessorebene
when(äußere Ebene) -
A
whenbefindet 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.Beispiel Zustand auf Prozessorebene — Der gesamte Prozessor wird übersprungen
Der folgende
delete_entriesProzessor 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
whenwird in einem einzelnen Eintrag im Array platziert.entriesJeder 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 einementriesArray unterstützen diese Stufe (wieadd_entries,copy_values,rename_keys,move_keysextract_value, undsubstitute_string).Beispiel Zustand der Einstiegsklasse — einzelne Eingaben werden übersprungen
Der folgende
add_entriesProzessor fügt je nach Zustand der einzelnen Einträge unterschiedliche Schlüssel hinzu. Der erste Eintrag wird nur hinzugefügtseverity, wenn die Protokollebene ERROR ist. Der zweite Eintrag fügt immer hinzuprocessed, 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.
Beispiel 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 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 zutrifftwhen.
Beispiel Fallback-Eintrag mit when_else
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
Die folgende Tabelle zeigt, welche Prozessoren die bedingte Verarbeitung unterstützen und auf welcher Ebene.
| Prozessor | Bedingte Unterstützung | Level |
|---|---|---|
| add_entries | Ja | Prozessor und Eintrag |
| copy_values | Ja | Prozessor und Eintrag |
| delete_entries | Ja | Prozessor |
| Schlüssel verschieben | Ja | Prozessor und Eintrag |
| flatten | Ja | Prozessor |
| lowercase_string | Ja | Prozessor |
| Zeichenfolge in Großbuchstaben | Ja | Prozessor |
| trim_string | Ja | Prozessor |
| ersetzen_Zeichenfolge | Ja | Prozessor und Eintrag |
| kürzen | Ja | Prozessor |
| Wert extrahieren | Ja | Prozessor und Eintrag |
| convert_entry_type | Ja | Prozessor |
| date | Ja | Prozessor |
| sezieren | Ja | Prozessor |
| list_zu_map | Ja | Prozessor |
| Schlüssel umbenennen | Ja | Prozessor und Eintrag |
| select_entries | Ja | Prozessor |
| translate | Ja | Prozessor |
| Grok | Ja | Prozessor |
| drop_events | Ja | Prozessor (erforderlich) |
| OCSF, CSV, JSON, WAF KeyValue, Postgres, VPC, Route53 CloudFront | Nein | — |
Betreiber
| Kategorie | Betreiber | Beispiel |
|---|---|---|
| Relational | <, <=, >,
>= |
status_code >= 200 and status_code < 300 |
| Gleichheit | ==, != |
log.level == "ERROR" |
| Bedingt | and, or, not |
log.level == "ERROR" or log.level == "FATAL" |
| Arithmetisch | +, -, *,
/ |
response_time * 1000 > 5000 |
| Mitgliedschaft festlegen | in, not in |
environment in {"prod", "staging", "preprod"} |
| Regex-Abgleich | =~, !~ |
message =~ "^ERROR.*timeout" |
Funktionen
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
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
-
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
whenZustand als falsch ausgewertet wird, wird die gesamte Pipeline für dieses Protokollereignis nicht ausgeführt.