tutoriales.com

Analizando Logs y Eventos en Tiempo Real con Elasticsearch y Filebeat

Este tutorial te guiará a través de la configuración de una solución robusta para la recolección y análisis de logs y eventos en tiempo real utilizando Filebeat y Elasticsearch. Descubrirás cómo transformar datos crudos en información útil para la monitorización y la resolución de problemas.

Intermedio25 min de lectura12 views
Reportar error

🚀 Introducción al Análisis de Logs con Elasticsearch y Filebeat

En el mundo moderno de la infraestructura y el desarrollo de software, la cantidad de datos de logs generados por aplicaciones, servidores y dispositivos de red es inmensa. Analizar estos logs de manera eficiente es crucial para la monitorización del rendimiento, la detección de anomalías, la resolución de problemas y la seguridad. Sin una herramienta adecuada, esta tarea puede volverse rápidamente abrumadora y manual.

Aquí es donde entra en juego la combinación de Elasticsearch y Filebeat. Elasticsearch es un motor de búsqueda y análisis distribuido, capaz de indexar grandes volúmenes de datos y realizar búsquedas complejas y agregaciones en tiempo real. Filebeat, por otro lado, es un shipper de logs ligero del ecosistema Elastic Stack, diseñado para recolectar y enviar logs a Elasticsearch (o Logstash) de manera eficiente y confiable.

Este tutorial te proporcionará una guía completa para configurar y utilizar estas herramientas juntas, creando un pipeline efectivo para el análisis de logs y eventos en tiempo real. Prepárate para transformar tus logs crudos en información valiosa.

💡 Consejo: El análisis de logs es fundamental para la observabilidad. Integrar Elasticsearch y Filebeat te dará una visión profunda del comportamiento de tus sistemas.

¿Por qué Filebeat y Elasticsearch? 🤔

La elección de Filebeat y Elasticsearch para el análisis de logs ofrece varias ventajas clave:

  • Eficiencia: Filebeat es extremadamente ligero y consume pocos recursos, lo que lo hace ideal para instalar en servidores de producción sin afectar el rendimiento.
  • Fiabilidad: Garantiza la entrega de logs, incluso en caso de interrupciones de red o de los servicios de destino.
  • Flexibilidad: Puede recolectar logs de diversas fuentes (archivos, módulos específicos como system, nginx, mysql, etc.).
  • Escalabilidad: Elasticsearch es un sistema distribuido que puede escalar horizontalmente para manejar petabytes de datos y miles de consultas por segundo.
  • Potencia de Búsqueda: Elasticsearch ofrece capacidades de búsqueda de texto completo y análisis estructurado avanzadas.
  • Visualización: Aunque este tutorial se centra en Elasticsearch y Filebeat, cabe mencionar que Kibana, otro componente del Elastic Stack, es la herramienta perfecta para visualizar y dashboardizar los datos recolectados.

🛠️ Requisitos Previos e Instalación

Antes de sumergirnos en la configuración, asegúrate de tener los siguientes componentes instalados y funcionando.

Requisitos del Sistema 💻

  • Un servidor o máquina virtual con un sistema operativo Linux (Ubuntu, CentOS, etc.) para instalar Filebeat. Puedes usar tu máquina local para pruebas.
  • Un servidor con Elasticsearch instalado y configurado. Para este tutorial, asumiremos que tienes una instancia de Elasticsearch accesible.
    • Si no lo tienes, puedes seguir la documentación oficial de Elastic para instalar Elasticsearch.

Instalación de Elasticsearch (Breve Recordatorio) 📦

Si necesitas una instalación rápida de Elasticsearch para pruebas:

  1. Importar la clave GPG de Elastic:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  1. Añadir el repositorio APT:
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
  1. Actualizar los paquetes e instalar Elasticsearch:
sudo apt update && sudo apt install elasticsearch
  1. Iniciar y habilitar Elasticsearch:
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Instalación de Filebeat 🚀

Instalar Filebeat es un proceso sencillo. Sigue los pasos según tu sistema operativo.

En Sistemas Basados en Debian/Ubuntu:

  1. Importar la clave GPG de Elastic (si no lo hiciste para Elasticsearch):
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
  1. Añadir el repositorio APT:
echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
  1. Actualizar e instalar Filebeat:
sudo apt update && sudo apt install filebeat

En Sistemas Basados en RHEL/CentOS:

  1. Añadir el repositorio YUM en /etc/yum.repos.d/filebeat.repo:
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
  1. Instalar Filebeat:
sudo yum install filebeat

⚙️ Configuración Básica de Filebeat

El archivo de configuración principal de Filebeat es filebeat.yml, generalmente ubicado en /etc/filebeat/filebeat.yml.

Estructura del Archivo filebeat.yml 📄

El archivo YAML está dividido en secciones. Las más importantes son:

  • filebeat.inputs: Define qué logs recolectar y cómo.
  • output.elasticsearch o output.logstash: Define dónde enviar los logs.
  • setup.kibana: Configuración para Kibana (opcional, pero muy recomendable).

Paso 1: Configurar filebeat.inputs 📝

Aquí le indicamos a Filebeat qué archivos de log debe monitorear. Cada input es una lista de opciones. Un input básico para logs de sistema podría verse así:

filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /var/log/auth.log
    - /var/log/syslog
    - /var/log/*.log
  fields:
    log_type: syslog
  json.keys_under_root: true # Si tus logs son JSON, procesa como campos de nivel superior
  json.add_error_key: true    # Añade un campo de error si falla el parseo JSON

- type: filestream
  enabled: false # Deshabilita por defecto, activa si tienes logs de Nginx
  paths:
    - /var/log/nginx/access.log
  fields:
    log_type: nginx_access
  # Ejemplo de procesador para logs de Nginx, requiere módulos
  # procesors:
  # - grok:
  #     patterns:
  #       - '%{COMBINEDAPACHELOG}'
  #     field: message
  #     target_fields: parsed_nginx
  #     remove_original: true
📌 Nota: `type: filestream` es el tipo de input recomendado para la mayoría de los casos modernos, reemplazando a `log`. Es más eficiente y robusto.
  • type: Define el tipo de input. filestream para archivos.
  • enabled: true para activar el input, false para desactivarlo.
  • paths: Una lista de rutas de archivos a monitorear. Puedes usar comodines (*).
  • fields: Campos personalizados que se añadirán a cada evento de log de este input. Útil para categorizar. Por ejemplo, log_type: syslog.
  • json.keys_under_root: Si tus logs son JSON y quieres que los campos JSON se añadan directamente al nivel raíz del documento en Elasticsearch.

Paso 2: Configurar la Salida a Elasticsearch 📤

Ahora, le decimos a Filebeat dónde enviar los logs. Debes comentar la sección de output.logstash (si está presente) y descomentar output.elasticsearch.

# ============================== Outputs ===============================

# Configure a writer to write events to the network.

# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

  # Protocol - either `http` (default) or `https`.
  protocol: "http"

  # Username and password for basic auth.
  #username: "elastic"
  #password: "changeme"

  # Certificate for SSL/TLS if using HTTPS with self-signed certs
  #ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
  • hosts: La dirección IP y el puerto de tu clúster de Elasticsearch. Si usas un clúster, puedes listar varios hosts.
  • protocol: http o https (si Elasticsearch está configurado con seguridad).
  • username y password: Si tu clúster de Elasticsearch tiene X-Pack Security habilitado, necesitarás credenciales. Asegúrate de crear un usuario con los permisos adecuados para write en los índices de Filebeat.
⚠️ Advertencia: Para entornos de producción, se recomienda encarecidamente usar `https` y credenciales de usuario para proteger la comunicación con Elasticsearch.

Paso 3: Configurar Kibana (Opcional, pero Recomendado) 📊

Filebeat puede cargar dashboards y index patterns predefinidos en Kibana. Esto es increíblemente útil, especialmente cuando usas módulos de Filebeat.

# =============================== Kibana ===============================

# Starting with Beats 6.0.0, the dashboards are loaded by default. 
# If you still want to load them manually, uncomment the following config.
setup.kibana:
  # Kibana host. Default: localhost:5601
  host: "localhost:5601"

  # Kibana protocol (http or https). Default: http
  #protocol: "http"

  # Username and password for basic auth.
  #username: "elastic"
  #password: "changeme"
  • host: La dirección de tu instancia de Kibana.

Paso 4: Habilitar Módulos de Filebeat (Opcional, pero muy potente) ✨

Filebeat viene con una serie de módulos prediseñados para recolectar, parsear y enriquecer logs de servicios comunes como Nginx, Apache, MySQL, System, Auditd, etc. Estos módulos simplifican enormemente la configuración.

Para ver los módulos disponibles:

sudo filebeat modules list

Para habilitar un módulo, por ejemplo, el módulo system (para logs del sistema como syslog, auth.log):

sudo filebeat modules enable system

Esto activará la configuración predeterminada del módulo en /etc/filebeat/modules.d/system.yml. Puedes editar este archivo para personalizar rutas o añadir campos. Por ejemplo, system.yml podría tener:

- module: system
  syslog:
    enabled: true
    var.paths: ["/var/log/syslog"]
  auth:
    enabled: true
    var.paths: ["/var/log/auth.log"]
🔥 Importante: Cuando usas módulos, Filebeat ya sabe qué *index patterns* y dashboards cargar en Kibana, lo que agiliza mucho la visualización.

🚀 Arrancando Filebeat y Verificando Datos

Una vez que hayas configurado filebeat.yml (y posiblemente los módulos), es hora de iniciar Filebeat y verificar que los datos lleguen a Elasticsearch.

Paso 1: Probar la Configuración 🧪

Siempre es buena práctica probar la configuración antes de iniciar el servicio:

sudo filebeat test config
sudo filebeat test output

Si todo está correcto, deberías ver mensajes como Config OK y Connection to Elasticsearch... OK.

Paso 2: Cargar Plantillas y Dashboards 📊

Antes de empezar a enviar datos, es crucial cargar la plantilla de índice de Elasticsearch y los dashboards de Kibana (si estás usando Kibana) que Filebeat necesita.

sudo filebeat setup --index-management -E setup.kibana.host="localhost:5601"

Este comando:

  • Carga la plantilla de índice de Elasticsearch (index template). Esta plantilla define el mapping para tus logs, asegurando que los campos se indexen correctamente (por ejemplo, timestamp como date, message como text).
  • Carga los index patterns y dashboards predefinidos en Kibana (si setup.kibana.host está configurado y Filebeat tiene módulos habilitados).

Paso 3: Iniciar Filebeat 🟢

Ahora puedes iniciar y habilitar el servicio de Filebeat:

sudo systemctl start filebeat
sudo systemctl enable filebeat

Para verificar el estado del servicio:

sudo systemctl status filebeat

Deberías ver que está active (running).

Paso 4: Verificación en Elasticsearch y Kibana ✅

  1. En Elasticsearch: Puedes verificar que se están creando índices. Los índices de Filebeat suelen seguir el patrón filebeat-8.x-YYYY.MM.DD o, si usas módulos, filebeat-8.x-MODULE_NAME-YYYY.MM.DD.
curl -X GET "localhost:9200/_cat/indices?v"
Busca índices que empiecen con `filebeat-`.

2. En Kibana: * Accede a Kibana (normalmente http://localhost:5601). * Ve a Management (o Stack Management en versiones más recientes) -> Index Patterns. * Deberías ver un index pattern como filebeat-* (o más específicos si usas módulos, como filebeat-*-system-*). * Si usaste filebeat setup, los index patterns ya deberían estar creados. Si no, créalo manualmente con el patrón adecuado. * Una vez que tengas un index pattern, ve a Analytics -> Discover (o Discover en versiones más recientes). Aquí podrás ver tus logs en tiempo real.

Servidor / App Genera Logs Filebeat Recopila Elasticsearch Indexa y Almacena Kibana Visualiza

🔍 Análisis de Logs y Eventos en Kibana

Una vez que tus logs están en Elasticsearch, Kibana se convierte en tu panel de control para explorarlos, visualizarlos y crear dashboards.

Explorando Datos con Discover 📖

La sección Discover de Kibana es el punto de partida para analizar tus logs:

  1. Selecciona tu Index Pattern: Asegúrate de tener seleccionado el index pattern correcto (ej. filebeat-*).
  2. Rango de Tiempo: Ajusta el rango de tiempo en la esquina superior derecha para ver los logs más recientes o históricos.
  3. Filtrado y Búsqueda: Utiliza la barra de búsqueda para aplicar consultas Lucene o KQL (Kibana Query Language). Por ejemplo:
    • message: "error" para buscar logs que contengan la palabra "error".
    • system.syslog.program: "sshd" AND system.syslog.message: "Failed password" para encontrar intentos fallidos de inicio de sesión SSH.
    • log_type: nginx_access AND http.response.status_code: 500 para ver errores 500 de Nginx.
  4. Campos Disponibles: En el panel izquierdo, puedes ver todos los campos disponibles en tus documentos. Haz clic en un campo para ver sus valores más comunes y añadirlo a la tabla principal.
💡 Consejo: Aprender KQL y Lucene te dará un gran poder para filtrar y analizar tus logs. Empieza con búsquedas simples y explora los operadores lógicos (`AND`, `OR`, `NOT`).

Creando Visualizaciones y Dashboards 📊

Kibana te permite crear visualizaciones y combinarlas en dashboards para tener una visión general de tus sistemas.

  1. Visualizar: En la sección Visualize, puedes crear gráficos de barras, gráficos circulares, tablas de datos, mapas de calor, etc.
    • Ejemplo: Un gráfico de barras que muestre el recuento de logs por system.syslog.program a lo largo del tiempo para identificar qué aplicaciones generan más logs.
    • Ejemplo: Un gráfico circular que muestre el porcentaje de errores (level: error) frente a otros niveles de log.
  2. Dashboard: Una vez creadas tus visualizaciones, puedes añadirlas a un Dashboard para una visión consolidada. Esto es ideal para monitorizar métricas clave como errores por minuto, uso de CPU (si Filebeat también recolecta métricas con el módulo metricbeat), o intentos de acceso fallidos.
Discover Explorar Visualize Añadir Dashboard

🧩 Procesadores de Filebeat para Enriquecimiento de Datos

Filebeat no solo recolecta logs; también puede transformarlos y enriquecerlos antes de enviarlos a Elasticsearch. Esto se logra mediante procesadores.

Los procesadores se configuran dentro de cada input o globalmente. Algunos procesadores comunes incluyen:

  • drop_fields: Elimina campos no deseados para ahorrar espacio.
  • include_fields: Incluye solo los campos especificados.
  • add_fields: Añade campos estáticos a los eventos.
  • add_host_metadata: Añade información del host (IP, nombre de host) al evento.
  • add_docker_metadata / add_kubernetes_metadata: Añade metadatos de contenedores si Filebeat se ejecuta en esos entornos.
  • decode_json_fields: Parsear campos JSON anidados dentro de un mensaje.
  • rename: Renombra campos.

Ejemplo de Uso de Procesadores 🛠️

Consideremos un escenario donde nuestros logs contienen información sensible en un campo user.password que queremos eliminar, y queremos añadir un campo environment: production.

filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /var/log/my_app/app.log
  fields:
    log_type: application
  processors:
    - drop_fields:
        fields: ["user.password", "temp_id"]
    - add_fields:
        target: '' # Añade campos en el nivel raíz
        fields:
          environment: production
          app_version: 1.2.3
    - decode_json_fields:
        fields: ["message"] # Si el campo 'message' es una cadena JSON, lo parsea
        target: "json_parsed"
        overwrite_keys: false

En este ejemplo:

  • drop_fields elimina los campos user.password y temp_id.
  • add_fields añade environment: production y app_version: 1.2.3 a cada documento.
  • decode_json_fields intenta parsear el contenido del campo message como JSON y coloca los resultados en un nuevo campo json_parsed.
⚠️ Advertencia: Usa los procesadores con moderación. Demasiados procesadores complejos pueden aumentar el consumo de CPU de Filebeat. Para transformaciones muy complejas, Logstash puede ser una opción más adecuada.

Pipeline de Ingesta en Elasticsearch (Ingest Node) 🚀

Para transformaciones aún más potentes y centralizadas, puedes usar los Pipelines de Ingesta de Elasticsearch. Estos permiten preprocesar documentos antes de la indexación.

  1. Crear un Pipeline en Elasticsearch:
PUT _ingest/pipeline/my_custom_pipeline
{
"description": "My custom log pipeline",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"%{COMBINEDAPACHELOG}"
]
}
},
{
"set": {
"field": "@metadata.pipeline",
"value": "my_custom_pipeline"
}
},
{
"remove": {
"field": "message",
"if": "ctx.parsed_apache"
}
}
]
}
  1. Configurar Filebeat para usar el Pipeline: En tu filebeat.yml:
output.elasticsearch:
hosts: ["localhost:9200"]
pipeline: my_custom_pipeline # Especifica el pipeline de ingesta a usar

Esto delegará el parseo complejo a Elasticsearch, aliviando la carga de Filebeat y centralizando la lógica de procesamiento.


📈 Escalabilidad y Consideraciones Avanzadas

A medida que tu volumen de logs crece, necesitarás considerar la escalabilidad y otras configuraciones avanzadas.

Gestión del Ciclo de Vida de Índices (ILM) 🗓️

Los logs pueden consumir rápidamente grandes cantidades de almacenamiento. La Gestión del Ciclo de Vida de Índices (ILM) en Elasticsearch te permite definir políticas para mover índices a tiers de almacenamiento más económicos o eliminarlos automáticamente después de cierto tiempo.

Filebeat crea índices diarios. ILM puede automáticamente:

  • Mover índices de "caliente" a "cálido" (hardware más lento) y luego a "frío" (almacenamiento de objetos).
  • Eliminar índices antiguos.
Ejemplo de Política ILM
PUT _ilm/policy/filebeat_policy
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0s",
        "actions": {
          "rollover": {
            "max_age": "1d",
            "max_docs": 10000000,
            "max_size": "50gb"
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {
            "delete_searchable_snapshot": true
          }
        }
      }
    }
  }
}

Este ejemplo rota el índice cada día o 50GB, y lo elimina después de 30 días. Para aplicar esta política a tus índices de Filebeat, debes modificar la plantilla de índice (index template) que usa Filebeat. Esto se hace en Kibana en Stack Management -> Index Management -> Index Templates o directamente vía API. Los módulos de Filebeat ya vienen con plantillas que puedes modificar.

Alta Disponibilidad de Filebeat 🧘

Para asegurar que no pierdas logs, incluso si un servidor de Filebeat cae:

  • Múltiples instancias de Filebeat: Ejecuta Filebeat en cada servidor del cual necesitas recolectar logs. Cada instancia enviará sus logs a Elasticsearch.
  • Clúster de Elasticsearch: Un clúster de Elasticsearch distribuido con múltiples nodos de datos y nodos maestros garantiza la alta disponibilidad y la resiliencia de los datos.

Monitoreo de Filebeat 📈

Es crucial monitorizar el rendimiento de Filebeat. Puedes usar el módulo monitoring de Filebeat para enviar métricas internas a Elasticsearch, o usar herramientas externas de monitoreo.

# =============================== Xpack Monitoring ===============================
# Filebeat autoconfigures the X-Pack monitoring output. If you want to change this,
# you can override it here.
xpack.monitoring:
  enabled: true
  elasticsearch:
    hosts: ["localhost:9200"]
    username: "elastic_monitoring"
    password: "your_password"

Esto enviará métricas de Filebeat (eventos procesados, errores, estado) a tu clúster de Elasticsearch, permitiéndote monitorizar su salud y rendimiento a través de los dashboards de X-Pack Monitoring en Kibana.


🎯 Consejos para la Optimización y Buenas Prácticas

  • Filtrado Temprano: Utiliza procesadores de Filebeat para drop_fields o include_fields para eliminar datos irrelevantes lo antes posible. Esto reduce el tráfico de red, el almacenamiento en Elasticsearch y acelera las búsquedas.
  • Parseo Preciso: Asegúrate de que tus logs estén correctamente parseados. Utiliza módulos de Filebeat o pipelines de ingesta para extraer campos significativos (fechas, niveles de log, IDs de usuario, códigos de error). Los campos sin parsear son difíciles de buscar y analizar.
  • Mapping Correcto: Un mapping adecuado en Elasticsearch es vital. Asegúrate de que los campos numéricos se indexen como long o integer, fechas como date y texto como text o keyword según sea necesario para búsquedas y agregaciones.
  • Recursos del Servidor: Monitorea el uso de CPU y memoria en los servidores que ejecutan Filebeat. Aunque es ligero, un alto volumen de logs o procesadores complejos pueden aumentar su consumo.
  • Seguridad: Implementa HTTPS y autenticación en todas las comunicaciones entre Filebeat y Elasticsearch, y entre tu navegador y Kibana.
  • Backup y Restauración: Planifica tus estrategias de backup para Elasticsearch, incluyendo snapshots y restauraciones. Los logs son datos críticos.
CaracterísticaDescripciónBeneficioDificultad
------------
Módulos FilebeatConfiguraciones predefinidas para logs comunes.Facilita la ingesta, incluye dashboards.Fácil
Procesadores FilebeatTransformaciones básicas en el origen.Reducción de datos, enriquecimiento local.Intermedio
------------
Pipelines IngestaTransformaciones avanzadas en Elasticsearch.Centraliza lógica de procesamiento, libera a Filebeat.Intermedio
ILMGestión automática del ciclo de vida de índices.Optimización del almacenamiento y rendimiento.Avanzado
------------
MonitoringRecolección de métricas de Filebeat.Visibilidad del rendimiento de Filebeat.Intermedio
90% Visibilidad de Logs

Conclusión 🎉

Has llegado al final de esta guía completa sobre cómo configurar Filebeat y Elasticsearch para el análisis de logs y eventos en tiempo real. Ahora tienes las herramientas y el conocimiento para:

  • Instalar y configurar Filebeat para recolectar logs de diversas fuentes.
  • Enviar esos logs a tu clúster de Elasticsearch de forma fiable.
  • Explorar y visualizar tus datos de logs en Kibana.
  • Enriquecer y transformar tus logs con procesadores de Filebeat o pipelines de ingesta de Elasticsearch.
  • Considerar estrategias de escalabilidad y optimización para tu solución de logs.

La monitorización y el análisis de logs son esenciales para mantener la salud de tus sistemas y diagnosticar problemas rápidamente. Con el Elastic Stack, tienes un conjunto de herramientas potente y flexible a tu disposición. ¡Empieza a explorar tus datos y a obtener información valiosa de ellos!

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!