Qué es la suite ELK y cuál es el papel de Logstash
La suite ELK es un conjunto de herramientas desarrollado por Elastic que se ha convertido en referente para el análisis y la gestión de datos en tiempo real. Su nombre proviene de las siglas de sus tres componentes principales: Elasticsearch, Logstash y Kibana. En conjunto, ofrecen una solución potente y escalable para procesar grandes volúmenes de información de manera centralizada.
Componentes principales de ELK: Elasticsearch, Logstash y Kibana
- Elasticsearch: es el motor de búsqueda y análisis, diseñado para indexar datos y permitir consultas rápidas y flexibles. Su documentación oficial está disponible en la página de Elasticsearch.
- Logstash: es la herramienta encargada de la ingesta y transformación de datos. Actúa como un pipeline que conecta fuentes de información con Elasticsearch u otros destinos. Puedes consultar la documentación oficial de Logstash.
- Kibana: es la interfaz de visualización que permite explorar y representar los datos almacenados en Elasticsearch de manera gráfica. La guía oficial está en Kibana Documentation.
Cada uno de estos componentes cumple un rol específico, pero es la combinación de los tres lo que convierte a ELK en una solución completa de observabilidad y análisis.
Por qué Logstash es clave en el procesamiento de datos
El valor diferencial de Logstash reside en su capacidad para actuar como un intermediario inteligente entre las fuentes de datos y el sistema de almacenamiento. No solo recoge información, también la transforma mediante filtros que permiten limpiar, enriquecer y dar formato homogéneo a los datos.
Esto significa que, antes de llegar a Elasticsearch, la información ya está procesada de manera que los analistas y los sistemas pueden trabajar con ella sin inconsistencias ni ruido innecesario. En proyectos de observabilidad, seguridad o analítica, este paso marca la diferencia entre datos útiles y datos inservibles.
Casos de uso más comunes de ELK y Logstash
El ecosistema ELK, con Logstash como motor de ingesta, se aplica en múltiples escenarios:
- Monitorización de sistemas y aplicaciones: centralizar logs de servidores, contenedores y aplicaciones para detectar errores o anomalías en tiempo real.
- Análisis de seguridad (SIEM): recopilar y procesar eventos de red, firewalls o sistemas de detección de intrusos, mejorando la capacidad de respuesta frente a amenazas.
- Business Intelligence en tiempo real: integrar datos de distintas fuentes (bases de datos, APIs, aplicaciones internas) y analizarlos de forma centralizada.
- IoT y datos de sensores: procesar grandes volúmenes de datos procedentes de dispositivos conectados y transformarlos para su análisis.
Estos casos de uso muestran por qué ELK es una de las soluciones más extendidas para la gestión de información en entornos modernos: permite unificar datos dispersos y transformarlos en insights accionables.
Instalación básica de Logstash
Antes de crear un pipeline, el primer paso es instalar Logstash en tu sistema. La instalación es sencilla y está disponible para distintos entornos, lo que permite adaptarla tanto a entornos de desarrollo como de producción.
Requisitos previos y entorno recomendado
Para trabajar con Logstash necesitas un entorno que cumpla con algunos requisitos mínimos:
- Java: Logstash está desarrollado en Java, por lo que necesitas tener instalada una versión actualizada de Java 11 o superior.
- Sistema operativo: Logstash funciona en Linux, macOS y Windows, aunque en entornos de producción suele desplegarse en servidores Linux.
- Recursos: al menos 2 GB de RAM disponibles y espacio suficiente en disco para manejar los datos procesados.
Asegurarte de cumplir con estos requisitos evita problemas de rendimiento o errores en la instalación.
Descarga e instalación paso a paso
Elastic proporciona paquetes oficiales que facilitan la instalación en distintas plataformas. La forma más habitual es usar los paquetes precompilados o los repositorios oficiales:
- En Linux, puedes instalarlo desde los repositorios de Elastic.
- En Windows y macOS, puedes descargar los binarios directamente desde la página oficial de Logstash.
# Importar la clave GPG de Elastic
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# Instalar el repositorio de Elastic
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
# Actualizar repositorios e instalar Logstash
sudo apt-get update
sudo apt-get install logstash
Con esta instalación tendrás Logstash disponible en tu sistema y listo para configurarse.
Verificación de la instalación
Una vez instalado, conviene comprobar que Logstash se ha configurado correctamente. Para ello, ejecuta el comando de versión, que mostrará la información de la instalación.
# Comprobar la versión instalada de Logstash
logstash --version
Si el sistema responde mostrando la versión instalada, significa que Logstash está operativo y listo para ejecutar tu primer pipeline.
Estructura y gestión de archivos en Logstash
Para sacar el máximo partido a Logstash no basta con instalarlo: es importante conocer la estructura de archivos y directorios donde se guardan las configuraciones y logs. Esta organización facilita la gestión de proyectos reales y evita errores al desplegar pipelines.
Archivos principales de configuración
Logstash utiliza varios archivos clave que conviene identificar desde el principio:
- logstash.yml: archivo principal de configuración del servicio, donde se definen parámetros globales como la ruta de logs, pipelines por defecto, o la dirección de monitorización.
- pipelines.yml: permite gestionar múltiples pipelines de manera centralizada. Aquí se especifican los archivos
.confque se cargarán en paralelo. - jvm.options: archivo donde se ajustan las opciones de memoria y parámetros de la JVM que ejecuta Logstash.
Cada uno de estos archivos se encuentra normalmente en el directorio config dentro de la instalación de Logstash.
Directorio conf.d y archivos .conf
El directorio conf.d es el lugar habitual para guardar los archivos .conf que definen los pipelines. Cada archivo puede representar un flujo de procesamiento independiente, aunque en producción se recomienda estructurarlos con nombres claros:
input_syslog.conf: pipeline encargado de recoger y parsear logs de sistema.filter_enrichment.conf: pipeline que añade información adicional a los datos.output_elasticsearch.conf: pipeline que envía resultados a Elasticsearch.
Organizar los pipelines de esta manera permite escalar configuraciones y reutilizar bloques en distintos entornos.
Logs y monitorización básica
Logstash genera registros que ayudan a depurar y comprobar el estado de los pipelines. Los más importantes son:
- logs de ejecución: ubicados normalmente en el directorio
logs, muestran errores, advertencias y mensajes de depuración. - dead letter queue (DLQ): almacena eventos que no pudieron procesarse correctamente para su posterior revisión.
- API de monitoring: Logstash expone métricas a través de una API HTTP que permite consultar información sobre pipelines activos y rendimiento.
Conocer esta estructura básica es esencial para mantener entornos estables y facilitar el trabajo colaborativo en proyectos con varios pipelines.
Primer pipeline con Logstash: entrada, filtro y salida
Un pipeline de Logstash se compone de tres secciones: input, filter y output. La entrada define de dónde llegan los datos, los filtros transforman y enriquecen la información y la salida determina el destino final. La sintaxis se define en archivos .conf y la referencia oficial está en la documentación de Logstash.
Estructura de un pipeline en Logstash
La estructura mínima de un pipeline es declarativa. Cada bloque puede incluir varios plugins. Por ejemplo, input { stdin {} } para leer desde la consola, filter { grok { ... } mutate { ... } } para parsear y normalizar, y output { stdout {} elasticsearch { ... } } para enviar a varios destinos. Puedes consultar la guía de plugins en la referencia de plugins de Logstash.
Para tener una visión rápida de las opciones más habituales en Logstash, a continuación se muestra una tabla con ejemplos de inputs, filtros y outputs comunes. Esta referencia te servirá como guía práctica cuando empieces a diseñar tus propios pipelines.
| Tipo | Plugin común | Uso principal | Ejemplo de aplicación |
|---|---|---|---|
| Input | file |
Leer datos desde archivos locales | Ingestar logs de /var/log/syslog |
| Input | beats |
Recibir datos de Filebeat | Centralizar logs de múltiples servidores |
| Input | jdbc |
Consultar bases de datos SQL | Extraer registros periódicos para análisis |
| Filtro | grok |
Parsear texto mediante expresiones | Separar campos de un log de Apache |
| Filtro | mutate |
Renombrar, convertir o eliminar campos | Normalizar IDs y convertir valores numéricos |
| Filtro | date |
Parsear y estandarizar fechas | Convertir cadenas a formato ISO8601 |
| Output | stdout |
Mostrar resultados en consola | Debug en fase de desarrollo |
| Output | elasticsearch |
Indexar datos en Elasticsearch | Crear índices diarios para eventos |
| Output | file |
Guardar datos en un archivo | Exportar resultados procesados en CSV |
Esta tabla no sustituye la exploración de la lista oficial de plugins de Logstash, pero funciona como un mapa rápido de los recursos más usados en proyectos reales.
A continuación puedes ver un ejemplo básico de la estructura mínima de un pipeline en Logstash, que servirá como punto de partida para crear configuraciones más completas.
input {
stdin {}
}
filter {
# Filtros opcionales; se añadirán en el ejemplo práctico
}
output {
stdout { codec => rubydebug }
}
Esta estructura hace que Logstash sea muy flexible: puedes combinar múltiples entradas y salidas, encadenando filtros para limpiar y enriquecer los datos.
Ejemplo práctico de configuración de entrada, filtro y salida
Crearemos un pipeline sencillo que:
- Lee eventos JSON por
stdinpara facilitar las pruebas. - Normaliza tipos y campos con
mutate. - Añade un
timestampsi falta. - Imprime por
stdouty envía a Elasticsearch.
Usaremos filtros mutate y date; la referencia de mutate está en la documentación del filtro mutate y la de date en date filter.
input {
stdin { codec => json }
}
filter {
# Asegurar tipos y normalizaciones básicas
mutate {
convert => { "amount" => "float" }
rename => { "userId" => "user_id" }
strip => ["message"]
}
# Si llega un campo @timestamp como string, parsearlo
date {
match => ["@timestamp", "ISO8601", "yyyy-MM-dd HH:mm:ss,SSS"]
target => "@timestamp"
timezone => "UTC"
}
# Si no llega @timestamp, crear uno ahora
if !("@timestamp" in [@metadata]) and ![timestamp] {
mutate { add_field => { "ingested_at" => "%{@timestamp}" } }
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["http://localhost:9200"]
index => "events-%{+YYYY.MM.dd}"
action => "index"
}
}
Con este ejemplo tendrás un pipeline reproducible para validar tu entorno y la conexión con Elasticsearch.
Ejecución y validación del pipeline
Para ejecutar un pipeline, utiliza logstash -f pipeline.conf. Enviaremos un evento de prueba en formato JSON por la entrada estándar y verificaremos tanto la salida en consola como el índice creado en Elasticsearch. La salida a Elasticsearch usa el plugin oficial documentado en Elasticsearch output.
# Ejecutar el pipeline
logstash -f pipeline.conf
# En otra terminal, enviar un evento de prueba por stdin
echo '{"userId":"u-123","amount":"42.5","message":" purchase completed ","@timestamp":"2025-10-07T10:30:00Z"}' | logstash -f pipeline.conf
# Comprobar documentos en Elasticsearch (requiere curl)
curl -s "http://localhost:9200/events-*/_search?pretty&size=1"
Si ves el evento enriquecido en la consola y confirmas su indexación en Elasticsearch, tu entorno de ELK habrá procesado correctamente el primer flujo de datos.
Buenas prácticas para empezar con Logstash
Cuando empiezas a trabajar con Logstash es fácil cometer errores que afectan al rendimiento o a la claridad de las configuraciones. Adoptar buenas prácticas desde el inicio te permitirá mantener pipelines más estables y escalables.
Gestión de configuraciones y archivos .conf
Logstash permite ejecutar varios pipelines en paralelo, y cada uno se define en un archivo .conf. Para evitar confusiones:
- Guarda cada pipeline en un archivo independiente dentro de la carpeta
conf.d. - Usa nombres descriptivos como
input_syslog.confopipeline_elasticsearch.conf. - Documenta brevemente el propósito de cada pipeline en comentarios dentro del archivo.
La documentación oficial sobre configuración está en la guía de pipelines de Logstash.
Manejo de errores y logs en pipelines
Los pipelines de Logstash pueden generar errores silenciosos si no se monitorizan. Para evitarlo:
- Ejecuta Logstash en modo
--config.test_and_exitpara validar configuraciones antes de desplegar. - Activa logs en nivel
INFOoDEBUGcuando estés depurando un pipeline. - Usa el plugin
dead_letter_queuepara capturar eventos problemáticos sin interrumpir el flujo.
Más detalles sobre gestión de logs están disponibles en la documentación de monitoring de Logstash.
Extensiones y plugins más utilizados
Uno de los puntos fuertes de Logstash es su ecosistema de plugins. Los más habituales al empezar son:
- Input plugins:
file,beats,jdbc. - Filter plugins:
grok,mutate,date. - Output plugins:
stdout,elasticsearch,file.
La lista completa se encuentra en el catálogo oficial de plugins de Logstash.
Elegir los plugins adecuados desde el inicio te permitirá reducir la complejidad y mantener pipelines más fáciles de escalar.
Seguridad y rendimiento en pipelines de Logstash
Además de una buena organización y el uso correcto de plugins, es fundamental tener en cuenta aspectos de seguridad y rendimiento cuando se despliegan pipelines en entornos reales.
En el plano de la seguridad:
- Cifrado TLS/SSL: habilita comunicación segura entre Logstash, Elasticsearch y Beats para proteger los datos en tránsito. La configuración se realiza mediante certificados en los bloques
inputyoutput. - Autenticación con Elastic Security: aprovecha las capacidades de Elastic para asignar roles y credenciales a los pipelines, evitando accesos no autorizados.
- Protección de datos sensibles: evita almacenar credenciales en texto plano dentro de los archivos
.conf, utilizando gestores de secretos o variables de entorno.
En el plano del rendimiento:
- Asignación de memoria adecuada: ajusta el archivo
jvm.optionspara configurar la memoria de la JVM, garantizando que