Que son los GROK pattern en logstash

Que son los GROK pattern en logstash

Como funciona

Los groks pattern nos permiten separar u organizar un conjunto de datos mediante metodos de analisis gramatical, en pocas palabaras parseando.

En un grok pattern se define el tipo de dato que se deberia de recibir y con esto se asignan los valores a los diferentes campos que vayamos creando. La sintaxis del grok para separar algun dato es la siguiente :

%{PATTERN:nombre_del_campo}

Donde el PATTERN podria ser uno de los tantos patterns predefinidos en logstash o podriamos inclusive crear nuestros propios patterns en caso de necesitarlo

Para mas informaciones sobre todos los patterns podemos consultar la siguiente URL:
Documentacion de grok – logstash

Los GROK patterna tambien permiten expreciones regulaes del tipo UNIX/Linux, por ejemplo podriamos establecer dentro del pattern cadenas estaticas, por ejemplo:

Cantidad de transacciones = 32423

En el ejemplo anterior el unico campo que queremos separar es el campo numerico, esto lo podriamos hacer con el siguiente GROK pattern:

^Cantidad de transacciones = %{NUMBER:cantidad_transacciones}$

Ejemplos

Como ejemplo de GROK pattern, podriamos extraer los diferentes datos de una entrada de rsyslog de un equipo linux:

Oct  9 16:06:10 nodo1232 auditd[1041]: Audit daemon rotating log files

con el siguiente GROK pattern:

^%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(%{NUMBER:syslog_pid}): %{GREEDYDATA:syslog_message}$

Esto nos crearia un documento con los siguientes campos

syslog_timestamp: "Oct  9 16:06:10"
syslog_hostname: "nodo1232"
syslog_program: "auditd"
syslog_pid: "1041"
syslog_message: "Audit daemon rotating log files"

Dicho documento luego puede ser insertado a cualquiera de los outputs que soporta logstash, normalmente puede ser elasticsearch, para mas informacion sobre elasticsearch y logstash pueden consultar el siguiente HOW TO

Creando nuestro GROK pattern

Al momento de crear nuestros primer GROK patterns, todo sera prueba y error por lo que es tremendamente util utilizar una herramienta donde podamos probar de forma rapida. Para este proposito podemos utilizar la siguiente herramienta:

En dicha herramienta en el primer campo debemos agregar nuestros logos y en el siguiente campo ponemos nuestro GROK pattern

Utilizando GROK en logstash

Una vez que tenemos definido y probado nuestro GROK pattern podemos agregarlo a logstash como filter.

Para ejemplo utilizaremos el mismo ejemplo de rsyslog, el campo que queremos separar o filtrar es el campo message para luego insertarlo en elasticsearch, por lo tanto nuestro filtro de logstash deberia verse de la siguiente manera

filter {

  grok{
    match => { "message" => "^%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(%{NUMBER:syslog_pid}): %{GREEDYDATA:syslog_message}$" }
  }
  date {
    timezone => "America/Asuncion"
    match => ["timestamp", "YYYY-MM-dd HH:mm:ss"]
    target => "@timestamp"
  }
 }
}

Por ultimo, la seccion date que agregamos en el filter es para que tome como campo de tiempo el tiempo extraido del log, si no hacemos esto, se tomara como tiempo del log el horario en el que se inserto al elasticsearch