Logstash - Filtros

Logstash usa filtros en el medio de la canalización entre la entrada y la salida. Los filtros de las medidas de Logstash manipulan y crean eventos comoApache-Access. Muchos complementos de filtro se utilizan para administrar los eventos en Logstash. Aquí, en un ejemplo delLogstash Aggregate Filter, estamos filtrando la duración de cada transacción SQL en una base de datos y calculamos el tiempo total.

Instalación del complemento de filtro agregado

Instalación del complemento de filtro agregado mediante la utilidad de complemento Logstash. El complemento Logstash es un archivo por lotes para Windows enbin folder en Logstash.

>logstash-plugin install logstash-filter-aggregate

logstash.conf

En esta configuración, puede ver tres declaraciones 'if' para Initializing, Incrementing, y generating la duración total de la transacción, es decir, la sql_duration. El complemento agregado se utiliza para agregar sql_duration, presente en cada evento del registro de entrada.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - 
            %{NOTSPACE:taskid} - %{NOTSPACE:logger} - 
            %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"    
   }
}

Ejecutar Logstash

Podemos ejecutar Logstash usando el siguiente comando.

>logstash –f logstash.conf

input.log

El siguiente bloque de código muestra los datos del registro de entrada.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

output.log

Como se especifica en el archivo de configuración, la última instrucción 'if' donde está el registrador - TRANSACTION_END, que imprime el tiempo total de la transacción o sql_duration. Esto se ha resaltado en color amarillo en el output.log.

{
   "path":"C:/tpwork/logstash/bin/log/input.log","@timestamp": "2016-12-22T19:04:37.214Z",
   "loglevel":"INFO","logger":"TRANSACTION_START","@version": "1","host":"wcnlab-PC",
   "message":"8566 - TRANSACTION_START - start\r","tags":[]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.366Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.373Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.380Z","loglevel":"INFO","logger":"TRANSACTION_END",
   "@version":"1","host":"wcnlab-PC","label":"end",
   "message":" INFO - 48566 - TRANSACTION_END - end\r","taskid":"48566","tags":[]
}