Procesadores configurables tipo analizador - 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.

Procesadores configurables tipo analizador

Esta sección contiene información sobre los procesadores analizadores de datos configurables que puede usar en un transformador de eventos de registro.

parseJSON

El procesador parseJSON analiza los eventos del registro JSON e inserta los pares clave-valor JSON extraídos en el destino. Si no se especifica un destino, el procesador coloca el par clave-valor debajo del nodo raíz. Si se utiliza parseJSON como primer procesador, debe analizar todo el evento de registro con @message como el campo de origen. Tras el análisis inicial de JSON, se pueden manipular campos específicos en los procesadores posteriores.

El contenido @message original no se modifica, las nuevas claves se añaden al mensaje.

Campo Description (Descripción) ¿Obligatorio? Predeterminado Límites de las s

origen

Ruta al campo del evento de registro que se analizará. Utilice la notación de puntos para acceder a los campos secundarios. Por ejemplo, store.book

No

@message

Longitud máxima: 128

Profundidad máxima de clave anidada: 3

destination

El campo de destino de JSON analizado

No

Parent JSON node

Longitud máxima: 128

Profundidad máxima de clave anidada: 3

Ejemplo

Supongamos que un evento de registro ingerido tiene un aspecto similar al siguiente:

{ "outer_key": { "inner_key": "inner_value" } }

Entonces, si tenemos este procesador parseJSON:

[ { "parseJSON": { "destination": "new_key" } } ]

El evento de registro transformado sería el siguiente.

{ "new_key": { "outer_key": { "inner_key": "inner_value" } } }

grok

Utilice el procesador grok para analizar y estructurar los datos no estructurados mediante la coincidencia de patrones. Este procesador también puede extraer campos de los mensajes de registro.

Campo Description (Descripción) ¿Obligatorio? Predeterminado Límites de las s Notas

origen

Ruta del campo al que se va a aplicar la coincidencia de grok

No

@message

Longitud máxima: 128

Profundidad máxima de clave anidada: 3

match

El patrón grok que coincide con el evento de registro

Longitud máxima: 512

Patrones grok máximos: 20

Algunos tipos de patrones grok tienen límites de uso individuales. Se puede usar cualquier combinación de los siguientes patrones hasta cinco veces: {URI, URIPARAM, URIPATHPARAM, SPACE, DATA, GREEDYDATA, GREEDYDATA_MULTILINE}

Los patrones grok no admiten conversiones de tipos.

Para los patrones de formato de registro comunes (APACHE_ACCESS_LOG, NGINX_ACCESS_LOG SYSLOG5424), solo se admite incluir los patrones DATA, GREEDYDATA o GREEDYDATA_MULTILINE después del patrón de registro común.

Consulte todos los patrones grok compatibles

Estructura de un patrón grok

Esta es la estructura del patrón grok compatible:

%{PATTERN_NAME:FIELD_NAME}
  • PATTERN_NAME: hace referencia a una expresión regular predefinida para hacer coincidir un tipo específico de datos. Solo se admiten los patrones grok predefinidos. No se permite crear patrones personalizados.

  • FIELD_NAME: asigna un nombre al valor extraído. FIELD_NAME es opcional, pero si no especifica este valor, los datos extraídos se eliminarán del evento de registro transformado. Si FIELD_NAME utiliza una notación punteada (p. ej., “parent.child”), se considera una ruta JSON.

  • Conversión de tipos: no se admiten las conversiones de tipos explícitos. Utilice el TypeConverter procesador para convertir el tipo de datos de cualquier valor extraído por grok.

Para crear expresiones coincidentes más complejas, puede combinar varios patrones grok. Se pueden combinar hasta 20 patrones grok para que coincidan con un evento de registro. Por ejemplo, esta combinación de patrones %{NUMBER:timestamp} [%{NUMBER:db} %{IP:client_ip}:%{NUMBER:client_port}] %{GREEDYDATA:data} se puede usar para extraer campos de una entrada de registro lenta de Redis como esta:

1629860738.123456 [0 127.0.0.1:6379] "SET" "key1" "value1"

Ejemplos de grok

Ejemplo 1: Utilice grok para extraer un campo de registros no estructurados

Registros de ejemplo:

293750 server-01.internal-network.local OK "[Thread-000] token generated"

Transformador utilizado:

[ { "grok": { "match": "%{NUMBER:version} %{HOSTNAME:hostname} %{NOTSPACE:status} %{QUOTEDSTRING:logMsg}" } } ]

Salida:

{ "version": "293750", "hostname": "server-01.internal-network.local", "status": "OK", "logMsg": "[Thread-000] token generated" }

Registros de ejemplo:

23/Nov/2024:10:25:15 -0900 172.16.0.1 200

Transformador utilizado:

[ { "grok": { "match": "%{HTTPDATE:timestamp} %{IPORHOST:clientip} %{NUMBER:response_status}" } } ]

Salida:

{ "timestamp": "23/Nov/2024:10:25:15 -0900", "clientip": "172.16.0.1", "response_status": "200" }

Ejemplo 2: Utilice grok en combinación con parseJSON para extraer campos de un evento de registro JSON

Registros de ejemplo:

{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1" }

Transformador utilizado:

[ { "parseJSON": {} }, { "grok": { "source": "logMsg", "match": "%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:http_version}" } } ]

Salida:

{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1", "http_method": "GET", "request": "/page.html", "http_version": "1.1" }

Ejemplo 3: patrón grok con anotación punteada en FIELD_NAME

Registros de ejemplo:

192.168.1.1 GET /index.html?param=value 200 1234

Transformador utilizado:

[ { "grok": { "match": "%{IP:client.ip} %{WORD:method} %{URIPATHPARAM:request.uri} %{NUMBER:response.status} %{NUMBER:response.bytes}" } } ]

Salida:

{ "client": { "ip": "192.168.1.1" }, "method": "GET", "request": { "uri": "/index.html?param=value" }, "response": { "status": "200", "bytes": "1234" } }

Patrones grok admitidos

En las siguientes tablas se enumeran los patrones que admite el procesador grok.

Patrones grok generales

Patrón grok Description (Descripción) Límite de patrones Ejemplo
NOMBRE DE USUARIO o USUARIO Coincide con uno o más caracteres que pueden incluir letras minúsculas (a-z), letras mayúsculas (A-Z), dígitos (0-9), puntos (.), guiones bajos (_) o guiones medios (-) 20

Entrada: user123.name-TEST

Patrón: %{USERNAME:name}

Salida: {"name": "user123.name-TEST"}

INT Coincide con un signo más o menos opcional seguido de uno o más dígitos. 20

Entrada: -456

Patrón: %{INT:num}

Salida: {"num": "-456"}

BASE10 NUM Coincide con un número entero o un número de punto flotante con signo y coma decimal opcionales 20

Entrada: -0.67

Patrón: %{BASE10NUM:num}

Salida: {"num": "-0.67"}

BASE16NUM Hace coincidir los números decimales y hexadecimales con un signo opcional (+ o -) y un prefijo 0x opcional 20

Entrada: +0xA1B2

Patrón: %{BASE16NUM:num}

Salida: {"num": "+0xA1B2"}

POSINT Coincide con números enteros positivos sin ceros a la izquierda, compuestos por uno o más dígitos (del 1 al 9 seguido del 0 al 9) 20

Entrada: 123

Patrón: %{POSINT:num}

Salida: {"num": "123"}

NONNEGINT Coincide con cualquier número entero (formado por uno o más dígitos del 0 al 9), incluido el cero y los números con ceros a la izquierda. 20

Entrada: 007

Patrón: %{NONNEGINT:num}

Salida: {"num": "007"}

WORD Coincide con palabras completas compuestas por uno o más caracteres verbales (\w), incluidas letras, dígitos y guiones bajos 20

Entrada: user_123

Patrón: %{WORD:user}

Salida: {"user": "user_123"}

NOTSPACE Coincide con uno o más caracteres que no sean espacios en blanco. 5

Entrada: hello_world123

Patrón: %{NOTSPACE:msg}

Salida: {"msg": "hello_world123"}

SPACE Coincide con 0 o más caracteres que son espacios en blanco. 5

Entrada: " "

Patrón: %{SPACE:extra}

Salida: {"extra": " "}

DATA Coincide con cualquier carácter (excepto la línea nueva) cero o más veces, no es codicioso. 5

Entrada: abc def ghi

Patrón: %{DATA:x} %{DATA:y}

Salida: {"x": "abc", "y": "def ghi"}

GREEDYDATA Coincide con cualquier carácter (excepto la línea nueva) cero o más veces, es codicioso. 5

Entrada: abc def ghi

Patrón: %{GREEDYDATA:x} %{GREEDYDATA:y}

Salida: {"x": "abc def", "y": "ghi"}

GREEDYDATA_MULTILINE Coincide con cualquier carácter (incluida la línea nueva) cero o más veces, es codicioso. 1

Input:

abc

def

ghi

Patrón: %{GREEDYDATA_MULTILINE:data}

Salida: {"data": "abc\ndef\nghi"}

QUOTEDSTRING Busca cadenas entre comillas (comillas simples o dobles) con caracteres de escape. 20

Entrada: "Hello, world!"

Patrón: %{QUOTEDSTRING:msg}

Salida: {"msg": "Hello, world!"}

UUID Coincide con un formato UUID estándar: 8 caracteres hexadecimales, seguidos de tres grupos de 4 caracteres hexadecimales y termina con 12 caracteres hexadecimales, todos separados por guiones medios. 20

Entrada: 550e8400-e29b-41d4-a716-446655440000

Patrón: %{UUID:id}

Salida: {"id": "550e8400-e29b-41d4-a716-446655440000"}

URN Coincide con la sintaxis URN (nombre uniforme de recurso). 20

Entrada: urn:isbn:0451450523

Patrón: %{URN:urn}

Salida: {"urn": "urn:isbn:0451450523"}

AWS patrones de grok

Patrón Description (Descripción) Límite de patrones Ejemplo

ARN

Hace coincidir los nombres de los recursos de AWS Amazon (ARNs) y captura la partición (awsaws-cn, oaws-us-gov), el servicio, la región, el ID de cuenta y hasta 5 identificadores jerárquicos de recursos separados por barras diagonales. No coincidirá con la información ARNs que falte entre dos puntos.

5

Entrada: arn:aws:iam:us-east-1:123456789012:user/johndoe

Patrón: %{ARN:arn}

Salida: {"arn": "arn:aws:iam:us-east-1:123456789012:user/johndoe"}

Patrones de grok de redes

Patrón grok Description (Descripción) Límite de patrones Ejemplo
CISCOMAC Coincide con una dirección MAC en formato hexadecimal 4-4-4. 20

Entrada: 0123.4567.89AB

Patrón: %{CISCOMAC:MacAddress}

Salida: {"MacAddress": "0123.4567.89AB"}

WINDOWS/MAC Coincide con una dirección MAC en formato hexadecimal con guiones medios 20

Entrada: 01-23-45-67-89-AB

Patrón: %{WINDOWSMAC:MacAddress}

Salida: {"MacAddress": "01-23-45-67-89-AB"}

COMMONMAC Coincide con una dirección MAC en formato hexadecimal con dos puntos. 20

Entrada: 01:23:45:67:89:AB

Patrón: %{COMMONMAC:MacAddress}

Salida: {"MacAddress": "01:23:45:67:89:AB"}

MAC Coincide con uno de los patrones grok de CISCOMAC, WINDOWSMAC o COMMONMAC 20

Entrada: 01:23:45:67:89:AB

Patrón: %{MAC:m1}

Salida: {"m1":"01:23:45:67:89:AB"}

IPV6 Coincide con IPv6 las direcciones, incluidos los formularios comprimidos y las direcciones IPv4 mapeadas IPv6 . 5

Entrada: 2001:db8:3333:4444:5555:6666:7777:8888

Patrón: %{IPV6:ip}

Salida: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

IPV4 Coincide con una IPv4 dirección. 20

Entrada: 192.168.0.1

Patrón: %{IPV4:ip}

Salida: {"ip": "192.168.0.1"}

IP Coincide con IPv6 las direcciones admitidas por% {IPv6} o con IPv4 las direcciones admitidas por% {IPv4} 5

Entrada: 192.168.0.1

Patrón: %{IP:ip}

Salida: {"ip": "192.168.0.1"}

HOSTNAME o HOST Coincide con los nombres de dominio, incluidos los subdominios 5

Entrada: server-01.internal-network.local

Patrón: %{HOST:host}

Salida: {"host": "server-01.internal-network.local"}

IPORHOST Coincide con un nombre de host o una dirección IP 5

Entrada: 2001:db8:3333:4444:5555:6666:7777:8888

Patrón: %{IPORHOST:ip}

Salida: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

HOSTPORT Coincide con una dirección IP o un nombre de host, tal como lo admite el patrón %{IPORHOST} seguido de dos puntos y un número de puerto, y captura el puerto como “PORT” en el resultado. 5

Entrada: 192.168.1.1:8080

Patrón: %{HOSTPORT:ip}

Salida: {"ip":"192.168.1.1:8080","PORT":"8080"}

URIHOST Coincide con una dirección IP o un nombre de host, tal como lo admite el patrón %{IPORHOST}, con opción de seguido de dos puntos y un número de puerto, y captura el puerto como “PORT” en el resultado. 5

Entrada: example.com:443 10.0.0.1

Patrón: %{URIHOST:host} %{URIHOST:ip}

Salida: {"host":"example.com:443","port":"443","ip":"10.0.0.1"}

Patrones grok de rutas

Patrón grok Description (Descripción) Límite de patrones Ejemplo
UNIXPATH Coincide con las rutas URL y puede incluir parámetros de consulta. 20

Entrada: /search?q=regex

Patrón: %{UNIXPATH:path}

Salida: {"path":"/search?q=regex"}

WINPATH Coincide con las rutas de archivos de Windows. 5

Entrada: C:\Users\John\Documents\file.txt

Patrón: %{WINPATH:path}

Salida: {"path": "C:\\Users\\John\\Documents\\file.txt"}

PATH Coincide con las rutas URL o de los archivos de Windows 5

Entrada: /search?q=regex

Patrón: %{PATH:path}

Salida: {"path":"/search?q=regex"}

TTY Coincide con las rutas de los dispositivos Unix para terminales y pseudoterminales. 20

Entrada: /dev/tty1

Patrón: %{TTY:path}

Salida: {"path":"/dev/tty1"}

URIPROTO Coincide con las letras, seguidas opcionalmente por un carácter más (+) y letras adicionales o caracteres más (+) 20

Entrada: web+transformer

Patrón: %{URIPROTO:protocol}

Salida: {"protocol":"web+transformer"}

URIPATH Coincide con el componente de ruta de un URI 20

Entrada: /category/sub-category/product_name

Patrón: %{URIPATH:path}

Salida: {"path":"/category/sub-category/product_name"}

URIPARAM Coincide con parámetros de consulta de URL 5

Entrada: ?param1=value1&param2=value2

Patrón: %{URIPARAM:url}

Salida: {"url":"?param1=value1&param2=value2"}

URIPATHPARAM Coincide con una ruta URI seguida, opcionalmente, de parámetros de consulta 5

Entrada: /category/sub-category/product?id=12345&color=red

Patrón: %{URIPATHPARAM:path}

Salida: {"path":"/category/sub-category/product?id=12345&color=red"}

URI Coincide con un URI completo 5

Entrada: https://user:password@example.com/path/to/resource?param1=value1&param2=value2

Patrón: %{URI:uri}

Salida: {"path":"https://user:password@example.com/path/to/resource?param1=value1&param2=value2"}

Patrones grok de fecha y hora

Patrón grok Description (Descripción) Límite de patrones Ejemplo
MONTH Hace coincidir los nombres de los meses completos o abreviados en inglés como palabras completas 20

Entrada: Jan

Patrón: %{MONTH:month}

Salida: {"month":"Jan"}

Entrada: January

Patrón: %{MONTH:month}

Salida: {"month":"January"}

MONTHNUM Coincide con los números de los meses del 1 al 12, con el cero inicial opcional para los meses de un solo dígito. 20

Entrada: 5

Patrón: %{MONTHNUM:month}

Salida: {"month":"5"}

Entrada: 05

Patrón: %{MONTHNUM:month}

Salida: {"month":"05"}

MONTHNUM2 Coincide con números mensuales de dos dígitos del 01 al 12. 20

Entrada: 05

Patrón: %{MONTHNUM2:month}

Salida: {"month":"05"}

MES/DÍA Coincide con el día del mes del 1 al 31, con el cero inicial opcional. 20

Entrada: 31

Patrón: %{MONTHDAY:monthDay}

Salida: {"monthDay":"31"}

YEAR Coincide con el año en dos o cuatro dígitos 20

Entrada: 2024

Patrón: %{YEAR:year}

Salida: {"year":"2024"}

Entrada: 24

Patrón: %{YEAR:year}

Salida: {"year":"24"}

DAY Coincide con los nombres de los días completos o abreviados. 20

Entrada: Tuesday

Patrón: %{DAY:day}

Salida: {"day":"Tuesday"}

HOUR Coincide con la hora en formato de 24 horas con un cero (0) 0-23 a la izquierda opcional. 20

Entrada: 22

Patrón: %{HOUR:hour}

Salida: {"hour":"22"}

MINUTE Coincide con los minutos (00-59). 20

Entrada: 59

Patrón: %{MINUTE:min}

Salida: {"min":"59"}

SECOND Coincide con un número que representa los segundos (0)0-60, seguido opcionalmente por una coma decimal o dos puntos y uno o más dígitos para las fracciones de minutos 20

Entrada: 3

Patrón: %{SECOND:second}

Salida: {"second":"3"}

Entrada: 30.5

Patrón: %{SECOND:minSec}

Salida: {"minSec":"30.5"}

Entrada: 30:5

Patrón: %{SECOND:minSec}

Salida: {"minSec":"30:5"}

TIME Coincide con un formato de hora con horas, minutos y segundos en el formato (H)H:mm:(s)s. Los segundos incluyen los segundos intercalares (0)0-60. 20

Entrada: 09:45:32

Patrón: %{TIME:time}

Salida: {"time":"09:45:32"}

DATE_US Coincide con una fecha con el formato de (M)M/(d)d/(yy)yy or (M)M-(d)d-(yy)yy. 20

Entrada: 11/23/2024

Patrón: %{DATE_US:date}

Salida: {"date":"11/23/2024"}

Entrada: 1-01-24

Patrón: %{DATE_US:date}

Salida: {"date":"1-01-24"}

DATE_EU Coincide con la fecha en el formato de (d)d/(M)M/(yy)yy, (d)d-(M)M-(yy)yy, or (d)d.(M)M.(yy)yy. 20

Entrada: 23/11/2024

Patrón: %{DATE_EU:date}

Salida: {"date":"23/11/2024"}

Entrada: 1.01.24

Patrón: %{DATE_EU:date}

Salida: {"date":"1.01.24"}

ISO8601_TIMEZONE Coincide con el desplazamiento UTC “Z” o el desplazamiento de zona horaria con dos puntos opcionales en el formato [+-] (H)H(:)mm. 20

Entrada: +05:30

Patrón: %{ISO8601_TIMEZONE:tz}

Salida: {"tz":"+05:30"}

Entrada: -530

Patrón: %{ISO8601_TIMEZONE:tz}

Salida: {"tz":"-530"}

Entrada: Z

Patrón: %{ISO8601_TIMEZONE:tz}

Salida: {"tz":"Z"}

ISO8601_SECOND Coincide con un número que representa los segundos (0)0-60, seguido opcionalmente por un punto decimal o dos puntos y uno o más dígitos para fracciones de segundo 20

Entrada: 60

Patrón: %{ISO8601_SECOND:second}

Salida: {"second":"60"}

TIMESTAMP_ 01 ISO86 Coincide con el formato de fecha y hora ISO86 01 (yy) yy- (M) M- (d) dT (H) H:mm :mm :( (s) s) (Z| [+-] (H) H:mm) con segundos y zona horaria opcionales. 20

Entrada: 2023-05-15T14:30:00+05:30

Patrón: %{TIMESTAMP_ISO8601:timestamp}

Salida: {"timestamp":"2023-05-15T14:30:00+05:30"}

Entrada: 23-5-1T1:25+5:30

Patrón: %{TIMESTAMP_ISO8601:timestamp}

Salida: {"timestamp":"23-5-1T1:25+5:30"}

Entrada: 23-5-1T1:25Z

Patrón: %{TIMESTAMP_ISO8601:timestamp}

Salida: {"timestamp":"23-5-1T1:25Z"}

DATE Coincide con una fecha en formato estadounidense usando %{DATE_US} o en formato UE usando %{DATE_EU} 20

Entrada: 11/29/2024

Patrón: %{DATE:date}

Salida: {"date":"11/29/2024"}

Entrada: 29.11.2024

Patrón: %{DATE:date}

Salida: {"date":"29.11.2024"}

DATESTAMP Coincide con el patrón %{DATE} seguido del patrón %{TIME}, separado por un espacio o un guion medio. 20

Entrada: 29-11-2024 14:30:00

Patrón: %{DATESTAMP:dateTime}

Salida: {"dateTime":"29-11-2024 14:30:00"}

TZ Coincide con las abreviaturas de zonas horarias habituales (PST, PDT, MST, MDT, CST CDT, EST, EDT, UTC). 20

Entrada: PDT

Patrón: %{TZ:tz}

Salida: {"tz":"PDT"}

DATESTAMP_ RFC822 Coincide con la fecha y la hora en el formato: Día MonthName (D) D (YY) YY (H) H:mm :( s) s Zona horaria 20

Entrada: Monday Jan 5 23 1:30:00 CDT

Patrón: %{DATESTAMP_RFC822:dateTime}

Salida: {"dateTime":"Monday Jan 5 23 1:30:00 CDT"}

Entrada: Mon January 15 2023 14:30:00 PST

Patrón: %{DATESTAMP_RFC822:dateTime}

Salida: {"dateTime":"Mon January 15 2023 14:30:00 PST"}

DATESTAMP_ RFC2822 RFC2822 Coincide con el formato de fecha y hora: Día, (d) d MonthName (yy) yy (H) H:mm :( s) s Z| [+-] (H) H:mm 20

Entrada: Mon, 15 May 2023 14:30:00 +0530

Patrón: %{DATESTAMP_RFC2822:dateTime}

Salida: {"dateTime":"Mon, 15 May 2023 14:30:00 +0530"}

Entrada: Monday, 15 Jan 23 14:30:00 Z

Patrón: %{DATESTAMP_RFC2822:dateTime}

Salida: {"dateTime":"Monday, 15 Jan 23 14:30:00 Z"}

DATESTAMP_OTHER Coincide con la fecha y la hora en el formato: Día MonthName (d) d (H) H:mm :( s) s Zona horaria (yy) yy 20

Entrada: Mon May 15 14:30:00 PST 2023

Patrón: %{DATESTAMP_OTHER:dateTime}

Salida: {"dateTime":"Mon May 15 14:30:00 PST 2023"}

DATESTAMP_EVENTLOG Coincide con el formato compacto de fecha y hora sin separadores: (yy)yyMM(d)d(H)Hmm(s)s 20

Entrada: 20230515143000

Patrón: %{DATESTAMP_EVENTLOG:dateTime}

Salida: {"dateTime":"20230515143000"}

Patrones grok largos

Patrón grok Description (Descripción) Límite de patrones Ejemplo
LOGLEVEL Coincide con los niveles de registros estándar en distintas mayúsculas y abreviaturas, incluidas las siguientes: Alert/ALERT, Trace/TRACE, Debug/DEBUG, Notice/NOTICE, Info/INFO, Warn/Warning/WARN/WARNING, Err/Error/ERR/ERROR, Crit/Critical/CRIT/CRITICAL, Fatal/FATAL, Severe/SEVERE, Emerg/Emergency/EMERG/EMERGENCY 20

Entrada: INFO

Patrón: %{LOGLEVEL:logLevel}

Salida: {"logLevel":"INFO"}

HTTPDATE Coincide con el formato de fecha y hora que se utiliza con frecuencia en los archivos de registro. Formato: (d) MonthName d/ (yy) yy :( H) H:mm :( s) s Zona horaria: coincide con los nombres de los meses en inglés completos o abreviados (ejemplo MonthName: «enero» o «enero») Zona horaria: coincide con el patrón% {INT} grok 20

Entrada: 23/Nov/2024:14:30:00 +0640

Patrón: %{HTTPDATE:date}

Salida: {"date":"23/Nov/2024:14:30:00 +0640"}

SYSLOGTIMESTAMP Coincide con el formato de fecha con MonthName (d) d (H) H:mm :( s) s MonthName: Coincide con los nombres de los meses completos o abreviados en inglés (por ejemplo: «enero» o «enero») 20

Entrada: Nov 29 14:30:00

Patrón: %{SYSLOGTIMESTAMP:dateTime}

Salida: {"dateTime":"Nov 29 14:30:00"}

PROG Coincide con el nombre de un programa compuesto por una cadena de letras, dígitos, puntos, guiones bajos, barras diagonales, signos porcentuales y guiones. 20

Entrada: user.profile/settings-page

Patrón: %{PROG:program}

Salida: {"program":"user.profile/settings-page"}

SYSLOGPROG Coincide con el patrón grok PROG seguido opcionalmente de un identificador de proceso entre corchetes. 20

Entrada: user.profile/settings-page[1234]

Patrón: %{SYSLOGPROG:programWithId}

Salida: {"programWithId":"user.profile/settings-page[1234]","program":"user.profile/settings-page","pid":"1234"}

SYSLOGHOST Coincide con un patrón %{HOST} o %{IP} 5

Entrada: 2001:db8:3333:4444:5555:6666:7777:8888

Patrón: %{SYSLOGHOST:ip}

Salida: {"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}

SYSLOGFACILITY Coincide con la prioridad de syslog en formato decimal. El valor debe estar entre corchetes angulares (<>). 20

Entrada: <13.6>

Patrón: %{SYSLOGFACILITY:syslog}

Salida: {"syslog":"<13.6>","facility":"13","priority":"6"}

Patrones grok de registros comunes

Se pueden utilizar patrones grok personalizados y predefinidos para que coincidan con los formatos de registro de Apache, NGINX y Syslog Protocol (RFC 5424). Al usar estos patrones específicos, deben ser los primeros patrones de la configuración coincidente y ningún otro patrón puede precederlos. Además, solo puede seguirlos con exactamente un DATO. Patrón GREEDYDATA o GREEDYDATA_MULTILINE.

Patrón de Grok Description (Descripción) Límite de patrones

APACHE_ACCESS_LOG

Coincide con los registros de acceso de Apache

1

NGINX_ACCESS_LOG

Coincide con los registros de acceso de NGINX

1

SYSLOG5424

Coincide con los registros del protocolo Syslog (RFC 5424)

1

A continuación se muestran ejemplos válidos y no válidos del uso de estos patrones de formato de registro comunes.

"%{NGINX_ACCESS_LOG} %{DATA}" // Valid "%{SYSLOG5424}%{DATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{GREEDYDATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{SYSLOG5424}" // Invalid (multiple common log patterns used) "%{NGINX_ACCESS_LOG} %{NUMBER:num}" // Invalid (Only GREEDYDATA and DATA patterns are supported with common log patterns) "%{GREEDYDATA:logMsg} %{SYSLOG5424}" // Invalid (GREEDYDATA and DATA patterns are supported only after common log patterns)

Ejemplos de formatos de registro

Ejemplo de registro de Apache

Registros de ejemplo:

127.0.0.1 - - [03/Aug/2023:12:34:56 +0000] "GET /page.html HTTP/1.1" 200 1234

Transformador:

[ { "grok": { "match": "%{APACHE_ACCESS_LOG}" } } ]

Salida:

{ "request": "/page.html", "http_method": "GET", "status_code": 200, "http_version": "1.1", "response_size": 1234, "remote_host": "127.0.0.1", "timestamp": "2023-08-03T12:34:56Z" }
Ejemplo de registro de NGINX

Registros de ejemplo:

192.168.1.100 - Foo [03/Aug/2023:12:34:56 +0000] "GET /account/login.html HTTP/1.1" 200 42 "https://www.amazon.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"

Transformador:

[ { "grok": { "match": "%{NGINX_ACCESS_LOG}" } } ]

Salida:

{ "request": "/account/login.html", "referrer": "https://www.amazon.com/", "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", "http_method": "GET", "status_code": 200, "auth_user": "Foo", "http_version": "1.1", "response_size": 42, "remote_host": "192.168.1.100", "timestamp": "2023-08-03T12:34:56Z" }
Ejemplo de registro del protocolo Syslog (RFC 5424)

Registros de ejemplo:

<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"]

Transformador:

[ { "grok": { "match": "%{SYSLOG5424}" } } ]

Salida:

{ "pri": 165, "version": 1, "timestamp": "2003-10-11T22:14:15.003Z", "hostname": "mymachine.example.com", "app": "evntslog", "msg_id": "ID47", "structured_data": "exampleSDID@32473 iut=\"3\" eventSource= \"Application\" eventID=\"1011\"", "message": "[examplePriority@32473 class=\"high\"]" }

csv

El procesador de csv analiza los valores separados por comas (CSV) de los eventos del registro en columnas.

Campo Description (Descripción) ¿Obligatorio? Predeterminado Límites de las s

origen

Ruta al campo del evento de registros que se analizará

No

@message

Longitud máxima: 128

Profundidad máxima de clave anidada: 3

delimiter

El carácter utilizado para separar cada columna del evento de registro de valores original separado por comas

No

,

Longitud máxima: 1, a menos que el valor sea \t o \s

quoteCharacter

Carácter utilizado como calificador de texto para una sola columna de datos

No

"

Longitud máxima: 1

columns

Lista de nombres que se utilizarán en las columnas del evento de registro transformado.

No

[column_1, column_2 ...]

Número máximo de columnas de CSV: 100

Longitud máxima: 128

Profundidad máxima de clave anidada: 3

Si delimiter se establece en \t, se separará cada columna en un carácter de tabulación y \t separará cada columna en un solo carácter de espacio.

Ejemplo

Supongamos que parte de un evento de registro ingerido tiene este aspecto:

'Akua Mansa':28:'New York: USA'

Supongamos que utilizamos solo el procesador csv:

[ { "csv": { "delimiter": ":", "quoteCharacter": "'" } } ]

El evento de registro transformado sería el siguiente.

{ "column_1": "Akua Mansa", "column_2": "28", "column_3": "New York: USA" }

parseKeyValue

Utilice el parseKeyValueprocesador para analizar un campo específico en pares clave-valor. Puede personalizar el procesador para analizar la información del campo con las siguientes opciones.

Campo Description (Descripción) ¿Obligatorio? Predeterminado Límites de las s

origen

Ruta al campo del evento de registros que se analizará

No

@message

Longitud máxima: 128

Profundidad máxima de clave anidada: 3

destination

El campo de destino en el que se van a colocar los pares clave-valor extraídos

No

Longitud máxima: 128

fieldDelimiter

La cadena delimitadora de campo que se utiliza entre los pares clave-valor en los eventos de registro originales

No

&

Longitud máxima: 128

keyValueDelimiter

La cadena delimitadora que se utilizará entre la clave y el valor de cada par del evento de registro transformado

No

=

Longitud máxima: 128

nonMatchValue

Un valor para insertar en el campo de valores del resultado cuando un par clave-valor no se divide correctamente.

No

Longitud máxima: 128

keyPrefix

Si se desea añadir un prefijo a todas las claves transformadas, especifíquelo aquí.

No

Longitud máxima: 128

overwriteIfExists

Si se debe sobrescribir el valor si la clave de destino ya existe

No

false

Ejemplo

Ejemplo de evento de registro de muestra:

key1:value1!key2:value2!key3:value3!key4

Supongamos que se utiliza la siguiente configuración de procesador:

[ { "parseKeyValue": { "destination": "new_key", "fieldDelimiter": "!", "keyValueDelimiter": ":", "nonMatchValue": "defaultValue", "keyPrefix": "parsed_" } } ]

El evento de registro transformado sería el siguiente.

{ "new_key": { "parsed_key1": "value1", "parsed_key2": "value2", "parsed_key3": "value3", "parsed_key4": "defaultValue" } }