Introducción

En este módulo, aprenderemos cómo integrar Elasticsearch con Logstash, una herramienta de procesamiento de datos que permite la ingesta, transformación y almacenamiento de datos en Elasticsearch. Logstash es parte de la pila ELK (Elasticsearch, Logstash, Kibana) y es fundamental para la ingesta de datos en tiempo real.

¿Qué es Logstash?

Logstash es una herramienta de procesamiento de datos que permite la ingesta, transformación y almacenamiento de datos. Es altamente configurable y puede manejar una variedad de fuentes de datos, transformarlas y enviarlas a múltiples destinos, incluido Elasticsearch.

Características Clave de Logstash

  • Ingesta de Datos: Puede recibir datos de múltiples fuentes como archivos, bases de datos, servicios web, etc.
  • Transformación de Datos: Permite transformar y enriquecer los datos mediante filtros.
  • Salida de Datos: Puede enviar datos a múltiples destinos, siendo Elasticsearch uno de los más comunes.

Instalación de Logstash

Requisitos Previos

  • Tener Elasticsearch instalado y en funcionamiento.
  • Java 8 o superior instalado en el sistema.

Pasos de Instalación

  1. Descargar Logstash:

    wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0.tar.gz
    tar -xzf logstash-7.10.0.tar.gz
    cd logstash-7.10.0
    
  2. Configurar Logstash: Crear un archivo de configuración logstash.conf:

    nano logstash.conf
    

    Ejemplo de configuración básica:

    input {
      file {
        path => "/path/to/your/logfile.log"
        start_position => "beginning"
      }
    }
    
    filter {
      grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
      }
    }
    
    output {
      elasticsearch {
        hosts => ["localhost:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
      }
      stdout { codec => rubydebug }
    }
    
  3. Ejecutar Logstash:

    bin/logstash -f logstash.conf
    

Configuración de Logstash

Entradas (Inputs)

Logstash puede recibir datos de múltiples fuentes. Algunos de los plugins de entrada más comunes son:

  • file: Lee datos de archivos.
  • beats: Recibe datos de Beats.
  • http: Recibe datos a través de HTTP.

Ejemplo:

input {
  file {
    path => "/var/log/syslog"
    start_position => "beginning"
  }
}

Filtros (Filters)

Los filtros permiten transformar y enriquecer los datos. Algunos de los filtros más comunes son:

  • grok: Analiza y estructura datos no estructurados.
  • mutate: Modifica campos en los eventos.
  • date: Analiza fechas en los eventos.

Ejemplo:

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

Salidas (Outputs)

Logstash puede enviar datos a múltiples destinos. Algunos de los plugins de salida más comunes son:

  • elasticsearch: Envía datos a Elasticsearch.
  • stdout: Imprime datos en la consola.
  • file: Escribe datos en archivos.

Ejemplo:

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

Ejemplo Práctico

Configuración Completa

Supongamos que queremos procesar un archivo de logs de Apache y enviarlo a Elasticsearch. Nuestra configuración de Logstash sería:

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "apache-logs-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

Ejecución

Para ejecutar Logstash con esta configuración:

bin/logstash -f logstash.conf

Ejercicio Práctico

Ejercicio 1: Procesar Logs de Sistema

  1. Objetivo: Configurar Logstash para procesar logs del sistema y enviarlos a Elasticsearch.
  2. Pasos:
    • Crear un archivo de configuración syslog.conf.
    • Configurar la entrada para leer /var/log/syslog.
    • Usar el filtro grok para analizar los logs.
    • Configurar la salida para enviar los datos a Elasticsearch.

Solución

input {
  file {
    path => "/var/log/syslog"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{SYSLOGLINE}" }
  }
  date {
    match => [ "timestamp" , "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

Conclusión

En este módulo, hemos aprendido cómo integrar Elasticsearch con Logstash para la ingesta y procesamiento de datos. Hemos cubierto la instalación, configuración y ejecución de Logstash, así como un ejemplo práctico y un ejercicio para reforzar los conceptos aprendidos. Con esta base, estarás preparado para manejar la ingesta de datos en tiempo real y su almacenamiento en Elasticsearch, lo que es fundamental para cualquier aplicación de análisis de datos en tiempo real.

© Copyright 2024. Todos los derechos reservados