View a markdown version of this page

parse - Amazon CloudWatch Logs

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

parse

Se utiliza parse para extraer datos de un campo de registro y crear campos extraídos que pueda procesar en la consulta. El parse comando admite cuatro modos: expresiones globales, expresiones regulares, logfmt y CSV.

Si fieldName se omite, se @message utiliza de forma predeterminada. Puede analizar cualquier campo con nombre especificando el nombre del campo como primer argumento.

Si un evento de registro no coincide con el patrón especificado, se seguirá viendo en los resultados, pero sin los campos extraídos.

Modo global

Utilice caracteres comodín (*) como marcadores de posición para los valores que desee extraer y asígnelos a los campos con nombre asignado. as

Sintaxis

parse fieldName "pattern" as alias1, alias2

El número de * caracteres comodín debe ser igual al número de alias.

Ejemplos

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

Análisis encadenado

Extraiga un campo y, a continuación, analice aún más el campo extraído.

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

Modo regex

Utilice una expresión regular con grupos de captura con nombre para extraer campos. Para obtener información acerca de la sintaxis de la expresión regular, consulte Sintaxis de expresiones regulares (regex) compatibles.

Sintaxis

parse fieldName /regex/

Utilice grupos de captura con nombre (?<name>...) para definir los campos extraídos.

Ejemplos

Utilice grupos de captura con nombre para extraer campos

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

Utilice un grupo de captura con nombre para extraer el ENI de un registro de flujo de VPC

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

Multi-match mode

Utilice el modo de coincidencia múltiple para extraer todas las coincidencias de una expresión regular de un campo, lo que generará varias filas por evento de registro. Añada la palabra clave multi después del patrón de expresiones regulares.

Sintaxis

parse fieldName /regex/ multi

Ejemplos

Extraiga todas las direcciones IP de una línea de registro (coincidencia múltiple)

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

Modo Logfmt

Se utiliza parse logfmt para analizar las líneas de registro con formato logfmt en pares clave-valor. Logfmt es un formato de registro estructurado en el que cada línea contiene pares separados por espacios. key=value

Sintaxis

parse fieldName logfmt as alias

El resultado es un mapa al que se accede con notación de puntos (por ejemplo,,). lf.level lf.msg

Ejemplos

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

Modo CSV

Se utiliza parse csv para analizar las líneas de CSV-formatted registro en campos estructurados. Cada valor separado por comas se asigna al alias correspondiente.

Sintaxis

parse fieldName csv as alias1, alias2, alias3

Ejemplos

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

Extracción de campos JSON

Se utiliza json field=fieldName para la extracción explícita de JSON encadenado de un campo de objeto previamente analizado. Esto le permite extraer claves anidadas de un campo estructurado sin tener que volver a analizar el mensaje sin procesar.

Sintaxis

json field=fieldName "key.subkey" as alias

Ejemplos

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