View a markdown version of this page

Sintassi delle espressioni per l'elaborazione condizionale - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Sintassi delle espressioni per l'elaborazione condizionale

CloudWatch i processori di pipeline che supportano l'elaborazione condizionale accettano un parametro contenente un'whenespressione. Quando l'espressione restituisce true, il processore o la voce vengono eseguiti. Le espressioni utilizzano la notazione a punti (.) per l'accesso ai campi annidati. Ad esempio, user.role accede al role campo all'interno dell'oggetto. user Per maggiori dettagli sui processori che supportano l'elaborazione condizionale e i relativi parametri specifici, vedere. CloudWatch processori di pipeline Per esempi di configurazione, vedereCasi d'uso comuni dei processori.

Nota

L'elaborazione condizionale si applica solo alle pipeline di log. Le pipeline delle metriche non supportano il parametro. when

Processor-level e condizioni di livello base

Esistono due livelli ai quali è possibile applicare una when condizione, a seconda del processore.

Processor-level when(livello esterno)

A when collocato al livello più alto della configurazione del processore. Se l'espressione restituisce false, l'intero processore viene ignorato e non viene eseguita alcuna operazione al suo interno. Tutti i processori che supportano l'elaborazione condizionale supportano questo livello.

Esempio Processor-level condizione: salta l'intero processore

Il delete_entries processore seguente funziona solo quando l'ambiente è di produzione o di staging. Se la condizione è falsa, nessuna chiave viene eliminata.

processor: - delete_entries: with_keys: ["password", "api_key", "ssn"] when: "environment in {'prod', 'staging'}"
Entry-level when(all'interno di ogni voce)

Un when inserito all'interno di una singola voce dell'entriesarray. Ogni voce viene valutata in modo indipendente: se l'espressione è falsa, viene saltata solo quella voce specifica mentre le altre voci nello stesso processore sono ancora in esecuzione. Solo i processori con un entries array supportano questo livello (ad esempio add_entriescopy_values,,rename_keys, move_keysextract_value, esubstitute_string).

Esempio Entry-level condizione: salta le singole voci

Il seguente add_entries processore aggiunge chiavi diverse a seconda della condizione di ciascuna voce. La prima voce viene aggiunta solo severity quando il livello di registro è ERROR. La seconda voce viene sempre aggiunta processed perché non presenta alcuna condizione.

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

I processori che supportano entrambi i livelli possono utilizzarli insieme. Quando vengono specificati entrambi, la condizione a livello di processore viene valutata per prima. Se è falsa, l'intero processore viene ignorato e non viene valutata alcuna condizione di livello base.

Esempio Entrambi i livelli combinati

Il livello del processore when garantisce che l'intero processore funzioni solo per il traffico di produzione. All'interno di ciò, ogni voce ha una propria condizione per controllare quale chiave viene aggiunta.

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

Per una tabella che mostra quali processori supportano determinati livelli, consulta la Supporto per l'elaborazione condizionale sezione seguente.

Fallback con when_else

Supportano anche i processori che supportano condizioni entry-level. when_else Una voce con when_else funge da fallback: viene eseguita solo quando nessuna delle altre when condizioni nello stesso processore corrisponde. Il valore dell'espressione fornito when_else identifica l'insieme di when condizioni da considerare, ma la voce stessa viene eseguita esclusivamente in base al fatto che tali condizioni siano tutte valutate come false. Non è previsto un controllo esplicito della negazione: la voce viene semplicemente eseguita quando nessun'altra corrisponde. when

Esempio Inserimento alternativo con when_else

La prima voce viene eseguita quando il livello di registro è ERROR. La seconda voce viene utilizzata when_else ed eseguita solo quando la when condizione della prima voce non corrisponde (ovvero, il livello di registro è diverso da ERROR).

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

Supporto per l'elaborazione condizionale

La tabella seguente mostra quali processori supportano l'elaborazione condizionale e a quale livello.

Processore Supporto condizionale Livello
add_entriesProcessore e ingresso
copy_valuesProcessore e ingresso
delete_entriesProcessore
move_keysProcessore e ingresso
flattenProcessore
lowercase_stringProcessore
stringa_maiuscolaProcessore
trim_stringProcessore
stringa_sostitutivaProcessore e ingresso
troncareProcessore
valore_estrazioneProcessore e ingresso
convert_entry_typeProcessore
dataProcessore
sezionareProcessore
elenca_per_mappaProcessore
rename_keysProcessore e ingresso
select_entriesProcessore
translateProcessore
grokProcessore
drop_eventsProcessore (richiesto)
OCSF, CSV, JSON, WAF, Postgres KeyValue, VPC, Route 53 CloudFrontNo

Operatori

La tabella seguente elenca gli operatori supportati.

Categoria Operatori Esempio
Relazionale <, <=, >, >= status_code >= 200 and status_code < 300
Parità ==, != log.level == "ERROR"
Condizionale and, or, not log.level == "ERROR" or log.level == "FATAL"
Aritmetica +, -, *, / response_time * 1000 > 5000
Imposta l'appartenenza in, not in environment in {"prod", "staging", "preprod"}
Corrispondenza Regex =~, !~ message =~ "^ERROR.*timeout"

Funzioni

length(value)

Restituisce la lunghezza di una stringa o di un array. Ad esempio: length(message) > 100

contains(value, search)

Verifica se una stringa contiene una sottostringa o una matrice contiene un elemento. Ad esempio: contains(message, "error")

startsWith(field, prefix)

Verifica se una stringa inizia con un prefisso specificato. Ad esempio: startsWith(message, "ERROR")

Esempi di espressioni

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"

Limitazioni

  • La lunghezza massima delle espressioni è di 256 caratteri.

  • I processori parser (eccetto Grok) non supportano l'elaborazione condizionale. Sono inclusi i parser JSON, CSV, WAF KeyValue, Postgres, VPC, Route53 e OCSF. CloudFront

  • Se il processore Grok viene utilizzato come parser (primo processore) in una pipeline e la sua when condizione risulta falsa, l'intera pipeline non viene eseguita per quell'evento di registro.