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 viene eseguito. 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 ulteriori 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 del processore.

Condizioni a livello di processore e di livello base

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

A livello di processore when (livello esterno)

A when si trova 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 Condizione a livello di processore: salta l'intero processore

Il seguente delete_entries processore funziona solo quando l'ambiente è di produzione o di gestione temporanea. Se la condizione è falsa, nessuna delle chiavi viene eliminata.

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

A when inserito all'interno di una singola voce dell'entriesarray. Ogni voce viene valutata indipendentemente: se l'espressione è falsa, solo quella voce specifica viene saltata mentre le altre voci dello stesso processore continuano a essere eseguite. Solo i processori con un entries array supportano questo livello (ad esempioadd_entries,copy_values,rename_keys, move_keysextract_value, esubstitute_string).

Esempio Condizione di livello base: 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 di 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 un determinato livello, consultate la Supporto all'elaborazione condizionale sezione seguente.

Fallback con when_else

Supportano anche i processori che supportano le condizioni entry-level. when_else Una voce con when_else funge da fallback: viene eseguita solo quando nessuna delle altre when condizioni dello stesso processore soddisfa. 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 tutte le condizioni siano state valutate come false. Non esiste un controllo di negazione esplicito: la voce viene semplicemente eseguita quando nessun'altra corrisponde. when

Esempio Voce di fallback 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 (ad esempio, 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 all'elaborazione condizionale

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

Supporto condizionale del processore
Processore Supporto condizionale Livello
add_entryProcessore e ingresso
copy_valuesProcessore e ingresso
delete_entriesProcessore
move_keysProcessore e ingresso
flattenProcessore
lowercase_stringProcessore
stringa maiuscolaProcessore
trim_stringProcessore
sostituto_stringaProcessore e ingresso
troncareProcessore
valore_estrazioneProcessore e ingresso
convert_entry_typeProcessore
dataProcessore
sezionareProcessore
lista_su_mappaProcessore
rename_keysProcessore e ingresso
select_entryProcessore
translateProcessore
gruppoProcessore
drop_eventsProcessore (richiesto)
OCSF, CSV, JSON, WAF, Postgres KeyValue, VPC, Route 53 CloudFrontNo

Operatori

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'iscrizione 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 un array 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 dell'espressione è di 256 caratteri.

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

  • 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.