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 die 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 der 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 Pipeline-Prozessoren. Konfigurationsbeispiele finden Sie unterHäufige Anwendungsfälle für Prozessoren.
Anmerkung
Die bedingte Verarbeitung gilt nur für Log-Pipelines. Metrik-Pipelines unterstützen den when Parameter nicht.
Processor-level und Einstiegsbedingungen
Je nach Prozessor gibt es zwei Stufen, auf denen Sie eine when Bedingung anwenden können.
- Processor-level
when(äußere Ebene) -
A
whenbefindet sich auf der obersten Ebene der Prozessorkonfiguration. Wenn der Ausdruck als falsch ausgewertet wird, wird der gesamte Prozessor übersprungen und keine Operationen innerhalb des Prozessors ausgeführt. Alle Prozessoren, die bedingte Verarbeitung unterstützen, unterstützen diese Stufe.Beispiel Processor-level Bedingung — überspringe den gesamten Prozessor
Der folgende
delete_entriesProzessor läuft nur in der Produktions- oder Staging-Umgebung. 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'}" - Entry-level
when(in jedem Eintrag) -
A
whenwird innerhalb eines einzelnen Eintrags imentriesArray platziert. Jeder Eintrag wird unabhängig ausgewertet. Wenn der Ausdruck falsch ist, wird nur dieser bestimmte Eintrag übersprungen, während andere Einträge im selben Prozessor weiterhin ausgeführt werden. Nur Prozessoren mit einementriesArray unterstützen diese Stufe (z. B.add_entriescopy_values,rename_keys,move_keysextract_value, undsubstitute_string).Beispiel Entry-level Bedingung — einzelne Einträge überspringen
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 wird immer hinzugefügtprocessed, da 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 ausgewertet. Wenn der Wert falsch ist, wird der gesamte Prozessor übersprungen und es werden keine Bedingungen auf Einstiegsebene ausgewertet.
Beispiel Beide Stufen kombiniert
Die Prozessorebene when stellt sicher, dass der gesamte Prozessor nur für den Produktionsdatenverkehr läuft. Dabei hat jeder Eintrag seine eigene Bedingung, anhand derer 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 desselben Prozessors erfüllt ist. Der angegebene Ausdruckswert when_else gibt an, welche when Bedingungen berücksichtigt werden müssen, aber der Eintrag selbst wird ausschließlich auf der Grundlage ausgeführt, ob diese Bedingungen alle als falsch ausgewertet wurden. Es gibt keine explizite Negationsprüfung — der Eintrag wird einfach ausgeführt, wenn kein anderer Eintrag zutrifftwhen.
Beispiel Fallback-Eintrag mit when_else
Der erste Eintrag wird ausgeführt, wenn das Log-Level ERROR ist. Der zweite Eintrag wird nur verwendet when_else und ausgeführt, wenn die when Bedingung des ersten Eintrags nicht zutrifft (das heißt, die Protokollebene ist etwas anderes als ERROR).
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 |
|---|---|---|
| Hinzufügen von Einträgen | Ja | Prozessor und Eintrag |
| copy_values | Ja | Prozessor und Eintrag |
| löschen_Einträge | Ja | Prozessor |
| Schlüssel verschieben | Ja | Prozessor und Eingabe |
| 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 |
| _auf_zu_karte | Ja | Prozessor |
| Benennen Sie die Schlüssel um | Ja | Prozessor und Eingabe |
| select_entries | Ja | Prozessor |
| translate | Ja | Prozessor |
| Grok | Ja | Prozessor |
| Ereignisse löschen | Ja | Prozessor (erforderlich) |
| OSF, CSV, JSON, WAF KeyValue, Postgres, VPC, Route53 CloudFront | Nein | — |
Betreiber
In der folgenden Tabelle sind die unterstützten Operatoren aufgeführt.
| Kategorie | Operatoren | 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 enthält 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 des Ausdrucks beträgt 256 Zeichen.
-
Parser-Prozessoren (außer Grok) unterstützen keine bedingte Verarbeitung. Dazu gehören JSON-, CSV-, WAF- KeyValue, Postgres-, VPC-, Route53- CloudFront 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.