Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Syntaxe d'expression pour le traitement conditionnel
CloudWatch les processeurs de pipeline qui prennent en charge le traitement conditionnel acceptent un when paramètre contenant une expression. Lorsque l'expression est vraie, le processeur ou l'entrée s'exécute. Les expressions utilisent la notation par points (.) pour accéder aux champs imbriqués. Par exemple, user.role accède au role champ situé à l'intérieur de l'userobjet. Pour plus de détails sur les processeurs qui prennent en charge le traitement conditionnel et leurs paramètres spécifiques, consultezCloudWatch pipelines et processeurs. Pour des exemples de configuration, consultezCas d'utilisation courants des processeurs.
Conditions au niveau du processeur et au niveau de l'entrée de gamme
Il existe deux niveaux auxquels vous pouvez appliquer une when condition, selon le processeur.
- Niveau processeur
when(niveau externe) -
A
whenplacé au niveau supérieur de la configuration du processeur. Si l'expression est fausse, l'ensemble du processeur est ignoré et aucune opération n'est exécutée au sein de celui-ci. Tous les processeurs qui prennent en charge le traitement conditionnel prennent en charge ce niveau.ExempleÉtat au niveau du processeur : ignorer l'intégralité du processeur
Le
delete_entriesprocesseur suivant ne s'exécute que lorsque l'environnement est en production ou en phase de préparation. Si la condition est fausse, aucune des clés n'est supprimée.processor: - delete_entries: with_keys: ["password", "api_key", "ssn"] when: "environment in {'prod', 'staging'}" - Niveau d'entrée
when(dans chaque entrée) -
A
whenplacé à l'intérieur d'une entrée individuelle duentriestableau. Chaque entrée est évaluée indépendamment : si l'expression est fausse, seule cette entrée spécifique est ignorée tandis que les autres entrées du même processeur continuent de s'exécuter. Seuls les processeurs dotés d'uneentriesbaie prennent en charge ce niveau (par exempleadd_entriescopy_valuesrename_keys,move_keys,extract_value,, etsubstitute_string).Exemple Condition d'entrée de gamme : ignorer les entrées individuelles
Le
add_entriesprocesseur suivant ajoute différentes clés en fonction de l'état de chaque entrée. La première entrée n'est ajoutée queseveritylorsque le niveau du journal est ERROR. La deuxième entrée est toujours ajoutéeprocessedcar elle ne contient aucune condition.processor: - add_entries: entries: - key: "severity" value: "high" when: "log.level == 'ERROR'" - key: "processed" value: "true"
Les processeurs compatibles avec les deux niveaux peuvent les utiliser ensemble. Lorsque les deux sont spécifiés, la condition au niveau du processeur est évaluée en premier. Si elle est fausse, l'ensemble du processeur est ignoré et aucune condition d'entrée de gamme n'est évaluée.
Exemple Les deux niveaux combinés
Le niveau du processeur when garantit que l'ensemble du processeur ne fonctionne que pour le trafic de production. Dans ce cadre, chaque entrée possède sa propre condition pour contrôler quelle clé est ajoutée.
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'"
Pour un tableau indiquant quels processeurs prennent en charge quel niveau, consultez la Assistance au traitement conditionnel section ci-dessous.
Fallback avec when_else
Les processeurs compatibles avec les conditions d'entrée de gamme sont également compatibles. when_else Une entrée avec when_else agit comme une solution de secours : elle ne s'exécute que lorsqu'aucune des autres when conditions du même processeur ne correspond. La valeur d'expression fournie à when_else identifie l'ensemble de when conditions à prendre en compte, mais l'entrée elle-même s'exécute uniquement en fonction de la valeur fausse de ces conditions. Il n'y a pas de contrôle de négation explicite : l'entrée est simplement exécutée lorsqu'aucune autre ne when correspond.
Exemple Entrée de secours avec when_else
La première entrée est exécutée lorsque le niveau du journal est ERROR. La deuxième entrée est utilisée when_else et exécutée uniquement lorsque la when condition de la première entrée ne correspond pas (c'est-à-dire que le niveau du journal est autre chose qu'ERROR).
processor: - add_entries: entries: - key: "alert_level" value: "critical" when: "log.level == 'ERROR'" - key: "alert_level" value: "info" when_else: "log.level == 'ERROR'"
Assistance au traitement conditionnel
Le tableau suivant indique quels processeurs prennent en charge le traitement conditionnel et à quel niveau.
| Processeur | Soutien conditionnel | Niveau |
|---|---|---|
| ajouter_entrées | Oui | Processeur et entrée |
| copy_values | Oui | Processeur et entrée |
| supprimer_entrées | Oui | Processeur |
| move_keys | Oui | Processeur et entrée |
| flatten | Oui | Processeur |
| chaîne_minuscule | Oui | Processeur |
| chaîne_majuscule | Oui | Processeur |
| trim_string | Oui | Processeur |
| chaîne_de substitution | Oui | Processeur et entrée |
| tronquer | Oui | Processeur |
| valeur_d'extraction | Oui | Processeur et entrée |
| convert_entry_type | Oui | Processeur |
| date | Oui | Processeur |
| disséquer | Oui | Processeur |
| liste_to_carte | Oui | Processeur |
| renommer les clés | Oui | Processeur et entrée |
| select_entrées | Oui | Processeur |
| translate | Oui | Processeur |
| grok | Oui | Processeur |
| drop_events | Oui | Processeur (obligatoire) |
| OCSF, CSV, JSON, WAF KeyValue, Postgres, CloudFront VPC, Route 53 | Non | — |
Opérateurs
| Catégorie | Opérateurs | Exemple |
|---|---|---|
| Relationnel | <, <=, >,
>= |
status_code >= 200 and status_code < 300 |
| Égalité | ==, != |
log.level == "ERROR" |
| Conditionnel | and, or, not |
log.level == "ERROR" or log.level == "FATAL" |
| Arithmétique | +, -, *,
/ |
response_time * 1000 > 5000 |
| Définir l'adhésion | in, not in |
environment in {"prod", "staging", "preprod"} |
| Correspondance Regex | =~, !~ |
message =~ "^ERROR.*timeout" |
Fonctions
length(value)-
Renvoie la longueur d'une chaîne ou d'un tableau. Exemple :
length(message) > 100 contains(value, search)-
Vérifie si une chaîne contient une sous-chaîne ou si un tableau contient un élément. Exemple :
contains(message, "error") startsWith(field, prefix)-
Vérifie si une chaîne commence par un préfixe spécifié. Exemple :
startsWith(message, "ERROR")
Exemples d'expressions
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"
Limitations
-
La longueur maximale de l'expression est de 256 caractères.
-
Les processeurs d'analyse (à l'exception de Grok) ne prennent pas en charge le traitement conditionnel. Cela inclut les analyseurs JSON, CSV KeyValue, WAF, Postgres, CloudFront VPC, Route53 et OCSF.
-
Si le processeur Grok est utilisé comme analyseur (premier processeur) dans un pipeline et que sa
whencondition est fausse, le pipeline entier ne s'exécute pas pour cet événement de journal.