View a markdown version of this page

parse - CloudWatch Journaux Amazon

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.

parse

parseUtilisez-le pour extraire des données d'un champ de journal et créer des champs extraits que vous pouvez traiter dans votre requête. La parse commande prend en charge quatre modes : expressions globales, expressions régulières, logfmt et CSV.

Si cette valeur fieldName est omise, elle @message est utilisée par défaut. Vous pouvez effectuer une analyse à partir de n'importe quel champ nommé en spécifiant le nom du champ comme premier argument.

Si un événement de journal ne correspond pas au modèle spécifié, il apparaît toujours dans les résultats, mais sans les champs extraits.

Mode globe

Utilisez des caractères génériques (*) comme espaces réservés pour les valeurs que vous souhaitez extraire et affectez-les à des champs nommés avec. as

Syntaxe

parse fieldName "pattern" as alias1, alias2

Le nombre de * caractères génériques doit être égal au nombre d'alias.

Exemples

parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user
parse @logStream "*/*/*/*" as env, service, instance, shard | stats count(*) by env, service

Analyse en chaîne

Extrayez un champ, puis analysez le champ extrait plus en profondeur.

parse @message "url=*" as url | parse url "/api/*/users/*" as apiVersion, userId | display apiVersion, userId

Mode Regex

Utilisez une expression régulière avec des groupes de capture nommés pour extraire des champs. Pour plus d'informations sur la syntaxe des expressions régulières, consultezSyntaxe des expressions régulières (regex) prise en charge.

Syntaxe

parse fieldName /regex/

Utilisez des groupes de capture nommés (?<name>...) pour définir les champs extraits.

Exemples

Utiliser des groupes de capture nommés pour extraire des champs

parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2

Utiliser un groupe de capture nommé pour extraire l'ENI d'un journal de flux VPC

parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message

Multi-match mode

Utilisez le mode multi-correspondance pour extraire toutes les correspondances d'une expression régulière d'un champ, en produisant plusieurs lignes par événement de journal. Ajoutez le mot clé multi après le modèle regex.

Syntaxe

parse fieldName /regex/ multi

Exemples

Extraire toutes les adresses IP d'une ligne de journal (correspondance multiple)

parse @message /(\d+\.\d+\.\d+\.\d+)/ as ip_addr multi | stats count(*) by ip_addr

Mode Logfmt

Permet d'parse logfmtanalyser les lignes de journal au format logfmt en paires clé-valeur. Logfmt est un format de journalisation structuré dans lequel chaque ligne contient des paires séparées par des espaceskey=value.

Syntaxe

parse fieldName logfmt as alias

Le résultat est une carte à laquelle vous accédez avec une notation par points (par exemplelf.level,lf.msg).

Exemples

parse @message logfmt as lf | filter lf.level = "error" | display lf.msg, lf.duration
parse @message logfmt as lf | stats count(*) by lf.host

Mode CSV

Permet d'parse csvanalyser les lignes de CSV-formatted journal dans des champs structurés. Chaque valeur séparée par des virgules est affectée à l'alias correspondant.

Syntaxe

parse fieldName csv as alias1, alias2, alias3

Exemples

parse @message csv as timestamp, level, message | filter level = "ERROR" | display timestamp, message
parse @message csv as host, method, path, status, duration | stats avg(duration) by method

Extraction de champs JSON

json field=fieldNameÀ utiliser pour l'extraction JSON en chaîne explicite à partir d'un champ d'objet préalablement analysé. Cela vous permet d'extraire des clés imbriquées d'un champ structuré sans réanalyser le message brut.

Syntaxe

json field=fieldName "key.subkey" as alias

Exemples

parse @message /(?<payload>\{.*\})/ as payload | json field=payload "user.name" as username | display username
json field=requestContext "identity.sourceIp" as caller_ip | stats count(*) by caller_ip