View a markdown version of this page

Ausdruckssyntax für die bedingte Verarbeitung - Amazon CloudWatch

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 when befindet 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_entries Prozessor 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 when wird innerhalb eines einzelnen Eintrags im entries Array 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 einem entries Array 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_entries Prozessor 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ägenJaProzessor und Eintrag
copy_valuesJaProzessor und Eintrag
löschen_EinträgeJaProzessor
Schlüssel verschiebenJaProzessor und Eingabe
flattenJaProzessor
lowercase_stringJaProzessor
Zeichenfolge in GroßbuchstabenJaProzessor
trim_stringJaProzessor
ersetzen_ZeichenfolgeJaProzessor und Eintrag
kürzenJaProzessor
Wert extrahierenJaProzessor und Eintrag
convert_entry_typeJaProzessor
dateJaProzessor
sezierenJaProzessor
_auf_zu_karteJaProzessor
Benennen Sie die Schlüssel umJaProzessor und Eingabe
select_entriesJaProzessor
translateJaProzessor
GrokJaProzessor
Ereignisse löschenJaProzessor (erforderlich)
OSF, CSV, JSON, WAF KeyValue, Postgres, VPC, Route53 CloudFrontNein

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 when Zustand als falsch ausgewertet wird, wird die gesamte Pipeline für dieses Protokollereignis nicht ausgeführt.