Ausdruckssyntax für 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 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 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.

Beispiel 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 (wieadd_entries,copy_values,rename_keys, move_keysextract_value, undsubstitute_string).

Beispiel 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ü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.

Bedingte Unterstützung für Prozessoren
Prozessor Bedingte Unterstützung Level
add_entriesJaProzessor und Eintrag
copy_valuesJaProzessor und Eintrag
delete_entriesJaProzessor
Schlüssel verschiebenJaProzessor und Eintrag
flattenJaProzessor
lowercase_stringJaProzessor
Zeichenfolge in GroßbuchstabenJaProzessor
trim_stringJaProzessor
ersetzen_ZeichenfolgeJaProzessor und Eintrag
kürzenJaProzessor
Wert extrahierenJaProzessor und Eintrag
convert_entry_typeJaProzessor
dateJaProzessor
sezierenJaProzessor
list_zu_mapJaProzessor
Schlüssel umbenennenJaProzessor und Eintrag
select_entriesJaProzessor
translateJaProzessor
GrokJaProzessor
drop_eventsJaProzessor (erforderlich)
OCSF, CSV, JSON, WAF KeyValue, Postgres, VPC, Route53 CloudFrontNein

Betreiber

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