Hoja de Referencia de Filebeat
Instalación
| Platform | Comando |
|---|
| Ubuntu/Debian | `wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch \ |
| RHEL/CentOS | sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo yum install filebeat |
| macOS | brew tap elastic/tap
brew install elastic/tap/filebeat-full |
| Windows | Download from https://artifacts.elastic.co/downloads/beats/filebeat/ Extract and run: .\install-service-filebeat.ps1 |
| Docker | docker pull docker.elastic.co/beats/filebeat:8.11.0 |
| Kubernetes (Helm) | helm repo add elastic https://helm.elastic.co
helm install filebeat elastic/filebeat |
Comandos Básicos
| Comando | Descripción |
|---|
sudo systemctl start filebeat | Iniciar servicio Filebeat |
sudo systemctl stop filebeat | Detener servicio Filebeat |
sudo systemctl restart filebeat | Reiniciar servicio Filebeat |
sudo systemctl status filebeat | Verificar estado del servicio Filebeat |
sudo systemctl enable filebeat | Habilitar Filebeat para iniciar al arranque |
sudo filebeat -e | Ejecutar Filebeat en primer plano con salida por consola |
sudo filebeat -e -c /path/to/filebeat.yml | Ejecutar con archivo de configuración específico |
sudo filebeat test config | Validar sintaxis de archivo de configuración |
sudo filebeat test output | Probar conectividad con la salida configurada |
sudo journalctl -u filebeat -f | Ver registros de servicio de Filebeat en tiempo real |
sudo filebeat modules list | Enumerar todos los módulos disponibles |
sudo filebeat modules enable apache | Habilitar un módulo específico (ejemplo de Apache) |
sudo filebeat modules disable apache | Deshabilitar un módulo específico |
sudo filebeat setup | Cargar plantilla de índice, dashboards y pipelines |
sudo filebeat version | Mostrar información de la versión de Filebeat |
Gestión de Módulos
| Comando | Descripción |
|---|
sudo filebeat modules list | Mostrar todos los módulos disponibles y su estado |
sudo filebeat modules enable nginx mysql | Habilitar varios módulos a la vez |
sudo filebeat modules disable system | Deshabilitar un módulo |
| `sudo filebeat modules list \ | grep Enabled -A 10` |
sudo filebeat export config --modules apache | Exportar configuración de módulo específico |
ls /etc/filebeat/modules.d/ | Archivos de configuración del módulo de lista |
sudo vi /etc/filebeat/modules.d/nginx.yml | Editar archivo de configuración de módulo |
Configuración e Inicialización
| Comando | Descripción |
|---|
sudo filebeat setup --index-management | Configurar solo plantilla de índice en Elasticsearch |
sudo filebeat setup --dashboards | Configurar solo paneles de Kibana |
sudo filebeat setup --pipelines | Configurar solo pipelines de ingest |
sudo filebeat setup -E output.elasticsearch.hosts=['es:9200'] | Configuración con host de Elasticsearch específico |
sudo filebeat setup -E output.elasticsearch.username=elastic -E output.elasticsearch.password=pass | Configuración con credenciales de autenticación |
sudo filebeat export template | Exportar plantilla de índice a stdout |
sudo filebeat export ilm-policy | Exportar política de ILM (Index Lifecycle Management) |
Uso Avanzado
| Comando | Descripción |
|---|
sudo filebeat -e -d "*" | Ejecutar con registro de depuración para todos los componentes |
sudo filebeat -e -d "publish,harvester" | Depurar componentes específicos solamente |
sudo filebeat -e --strict.perms=false | Deshabilitar la verificación estricta de permisos |
sudo filebeat -e -E http.enabled=true -E http.host=localhost -E http.port=5066 | Habilitar punto de monitoreo HTTP |
curl http://localhost:5066/stats | Punto final de monitoreo de consultas para estadísticas |
curl http://localhost:5066/state | Obtener información detallada del estado |
sudo filebeat -e -E output.console.enabled=true -E output.elasticsearch.enabled=false | Enviar eventos a la consola en lugar de Elasticsearch |
sudo filebeat -e -E filebeat.config.inputs.workers=4 | Ejecutar con un número específico de workers |
sudo filebeat -e -E output.elasticsearch.bulk_max_size=100 | Ajustar tamaño de indexación masiva |
sudo filebeat -e -E queue.mem.events=8192 | Establecer límite de eventos de memoria de cola |
sudo filebeat -e -E output.elasticsearch.compression_level=3 | Habilitar compresión para la salida de Elasticsearch |
sudo filebeat test config -e -d "processors" | Configurar procesadores de prueba con salida de depuración |
sudo filebeat migrate-registry | Migrar registro de una versión anterior de Filebeat |
sudo filebeat export config | Exportar configuración completa a stdout |
curl http://localhost:5066/autodiscover | Verificar estado de autodescubrimiento |
Gestión de Keystore
| Comando | Descripción |
|---|
sudo filebeat keystore create | Crear un nuevo keystore para secretos |
sudo filebeat keystore add ES_PASSWORD | Agregar un secreto al keystore (solicita un valor) |
sudo filebeat keystore list | Enumerar todas las claves en el keystore |
sudo filebeat keystore remove ES_PASSWORD | Eliminar una clave del keystore |
Configuración
Archivo de Configuración Principal
Ubicación: /etc/filebeat/filebeat.yml(Linux) o C:\Program Files\filebeat\filebeat.yml(Windows)
Configuración Básica de Entrada
# Filestream input (recommended for log files)
filebeat.inputs:
- type: filestream
id: my-app-logs
enabled: true
paths:
- /var/log/myapp/*.log
fields:
app: myapp
environment: production
fields_under_root: true
Configuración de Entrada de Registro
# Log input (legacy, but still supported)
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
exclude_lines: ['^DEBUG']
include_lines: ['^ERR', '^WARN']
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after
Configuración de Entrada de Contenedor
# Docker container logs
filebeat.inputs:
- type: container
enabled: true
paths:
- /var/lib/docker/containers/*/*.log
processors:
- add_docker_metadata: ~
Salida a Elasticsearch
output.elasticsearch:
hosts: ["elasticsearch:9200"]
username: "elastic"
password: "${ES_PASSWORD}" # From keystore
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
pipeline: "filebeat-%{[agent.version]}-apache-access-default"
Salida a Logstash
output.logstash:
hosts: ["logstash:5044"]
loadbalance: true
ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
ssl.certificate: "/etc/pki/client/cert.pem"
ssl.key: "/etc/pki/client/cert.key"
Salida a Kafka
output.kafka:
hosts: ["kafka1:9092", "kafka2:9092"]
topic: "filebeat"
partition.round_robin:
reachable_only: false
compression: gzip
max_message_bytes: 1000000
Configuración de Procesadores
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
- drop_fields:
fields: ["agent.ephemeral_id", "agent.id"]
- decode_json_fields:
fields: ["message"]
target: "json"
overwrite_keys: true
Autodescubrimiento para Docker
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
templates:
- condition:
contains:
docker.container.image: nginx
config:
- type: container
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
processors:
- add_docker_metadata: ~
Autodescubrimiento para Kubernetes
filebeat.autodiscover:
providers:
- type: kubernetes
node: ${NODE_NAME}
hints.enabled: true
hints.default_config:
type: container
paths:
- /var/log/containers/*${data.kubernetes.container.id}.log
Ejemplo de Configuración de Módulo
# /etc/filebeat/modules.d/nginx.yml
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log*"]
Casos de Uso Comunes
Caso de Uso 1: Recolección de Registros de Aplicaciones
Would you like me to continue with the remaining translations?```bash
sudo vi /etc/filebeat/filebeat.yml
```yaml
filebeat.inputs:
- type: filestream
id: myapp-logs
enabled: true
paths:
- /var/log/myapp/*.log
fields:
app: myapp
env: production
# Test configuration and restart
sudo filebeat test config
sudo systemctl restart filebeat
```### Caso de Uso 2: Configuración de Recolección de Logs de Nginx
```bash
# Enable Nginx module
sudo filebeat modules enable nginx
# Configure module
sudo vi /etc/filebeat/modules.d/nginx.yml
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log*"]
# Setup dashboards and restart
sudo filebeat setup --dashboards
sudo systemctl restart filebeat
```### Caso de Uso 3: Recolección de Logs de Contenedores Docker
```bash
# Run Filebeat in Docker to collect container logs
docker run -d \
--name=filebeat \
--user=root \
--volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker.elastic.co/beats/filebeat:8.11.0
```### Caso de Uso 4: Despliegue de DaemonSet en Kubernetes
```bash
# Deploy Filebeat as DaemonSet using Helm
helm repo add elastic https://helm.elastic.co
helm repo update
# Create values file
cat > filebeat-values.yaml <<EOF
daemonset:
enabled: true
filebeatConfig:
filebeat.yml: |
filebeat.autodiscover:
providers:
- type: kubernetes
node: \${NODE_NAME}
hints.enabled: true
output.elasticsearch:
hosts: ["elasticsearch:9200"]
EOF
# Install Filebeat
helm install filebeat elastic/filebeat \
--namespace logging --create-namespace \
-f filebeat-values.yaml
```### Caso de Uso 5: Análisis de Logs Multilínea (Stack Traces)
```bash
# Configure multiline pattern for Java stack traces
sudo vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: filestream
id: java-app
enabled: true
paths:
- /var/log/java-app/*.log
parsers:
- multiline:
type: pattern
pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
negate: false
match: after
# Test and restart
sudo filebeat test config
sudo systemctl restart filebeat
```### Caso de Uso 6: Envío de Logs a Múltiples Salidas
```bash
# Configure Logstash output for processing and Elasticsearch for backup
sudo vi /etc/filebeat/filebeat.yml
output.logstash:
hosts: ["logstash:5044"]
loadbalance: true
# Note: Only one output can be active at a time in Filebeat
# For multiple outputs, use Logstash as intermediary
```### Caso de Uso 7: Filtrado y Enriquecimiento de Logs
```bash
# Add processors to enrich and filter logs
sudo vi /etc/filebeat/filebeat.yml
processors:
- drop_event:
when:
regexp:
message: "^DEBUG"
- add_fields:
target: ''
fields:
datacenter: us-east-1
team: platform
- decode_json_fields:
fields: ["message"]
target: "json"
overwrite_keys: true
- drop_fields:
fields: ["agent.ephemeral_id", "ecs.version"]
```## Mejores Prácticas
- **Usar Entrada de Filestream**: Preferir `filestream`sobre el tipo de entrada `log`legacy para un mejor rendimiento y fiabilidad con rotación de archivos
- **Habilitar Módulos**: Usar módulos predefinidos (nginx, apache, mysql, etc.) en lugar de configuraciones personalizadas cuando sea posible para una configuración más rápida y un mejor análisis
- **Implementar Manejo de Sobrecarga**: Configurar `queue.mem.events`y `output.elasticsearch.bulk_max_size`para manejar picos de carga sin pérdida de datos
- **Asegurar Credenciales**: Almacenar información sensible (contraseñas, claves API) en el almacén de claves de Filebeat en lugar de texto plano en archivos de configuración
- **Monitorear Uso de Recursos**: Habilitar punto final HTTP (`http.enabled: true`) para monitorear el rendimiento de Filebeat y el estado del recolector
- **Usar Gestión de Ciclo de Vida de Índices (ILM)**: Configurar políticas de ILM para gestionar automáticamente la retención de índices y reducir costos de almacenamiento
- **Etiquetar y Enriquecer Logs**: Añadir campos personalizados y metadatos usando procesadores para hacer los logs más buscables y contextuales
- **Probar Antes de Producción**: Siempre usar `filebeat test config`y `filebeat test output`antes de implementar cambios de configuración
- **Manejar Logs Multilínea**: Configurar patrones multilínea para stack traces y logs de aplicaciones multilínea para prevenir fragmentación de logs
- **Implementar Autodescubrimiento**: Usar autodescubrimiento para entornos dinámicos (Docker, Kubernetes) para detectar y configurar automáticamente nuevos contenedores
- **Actualizaciones Regulares**: Mantener Filebeat actualizado para coincidir con su versión de Elasticsearch para compatibilidad y parches de seguridad
- **Establecer Permisos Apropiados**: Asegurar que Filebeat tenga acceso de lectura a archivos de logs pero siguiendo el principio de mínimo privilegio
## Resolución de Problemas
| Problema | Solución |
|-------|----------|
| **Filebeat not starting** | Check configuration syntax: `sudo filebeat test config`<br>Check service status: `sudo systemctl status filebeat`<br>Review logs: `sudo journalctl -u filebeat -n 50` |
| **No data in Elasticsearch** | Test output connectivity: `sudo filebeat test output`<br>Check Elasticsearch is running: `curl http://elasticsearch:9200`<br>Verify index exists: `curl http://elasticsearch:9200/_cat/indices?v` |
| **Permission denied errors** | Ensure Filebeat has read access: `sudo chmod 644 /var/log/myapp/*.log`<br>Check file ownership: `ls -la /var/log/myapp/`<br>Run with proper user: `sudo chown root:root /etc/filebeat/filebeat.yml` |
| **Duplicate events** | Check registry file: `/var/lib/filebeat/registry/filebeat/data.json`<br>Ensure unique input IDs in configuration<br>Avoid multiple Filebeat instances reading same files |
| **High memory usage** | Reduce queue size: `queue.mem.events: 2048`<br>Decrease harvester limit: `filebeat.config.inputs.max_harvesters: 100`<br>Enable compression: `output.elasticsearch.compression_level: 3` |
| **Logs not being tailed** | Check file paths are correct: `ls -la /var/log/myapp/*.log`<br>Verify input is enabled in configuration<br>Check close_inactive setting isn't too aggressive |
| **Connection timeout to Elasticsearch** | Increase timeout: `output.elasticsearch.timeout: 90`<br>Check network connectivity: `telnet elasticsearch 9200`<br>Verify credentials: `curl -u elastic:password http://elasticsearch:9200` |
| **Module not working** | Verify module is enabled: `sudo filebeat modules list`<br>Check log paths in module config: `cat /etc/filebeat/modules.d/nginx.yml`<br>Ensure ingest pipelines loaded: `sudo filebeat setup --pipelines` |
| **Multiline logs not parsing** | Test pattern with sample logs<br>Check `multiline.negate` and `multiline.match` settings<br>Review harvester debug logs: `sudo filebeat -e -d "harvester"` |
| **SSL/TLS connection errors** | Verify certificate paths and permissions<br>Check certificate validity: `openssl x509 -in cert.pem -text -noout`<br>Disable SSL verification for testing: `output.elasticsearch.ssl.verification_mode: none` |
| **Registry file corruption** | Stop Filebeat: `sudo systemctl stop filebeat`<br>Backup registry: `sudo cp -r /var/lib/filebeat/registry /tmp/registry.bak`<br>Remove registry: `sudo rm -rf /var/lib/filebeat/registry`<br>Restart (will reprocess logs): `sudo systemctl start filebeat` |
| **Autodiscover not detecting containers** | Check Docker socket permissions: `ls -la /var/run/docker.sock`<br>Verify autodiscover config syntax<br>Enable debug: `sudo filebeat -e -d "autodiscover"` |
## Referencia Rápida: Ubicaciones Comunes de Archivos
| Ítem | Ubicación (Linux) | Ubicación (Windows) |
|------|------------------|-------------------|
| **Main config** | `/etc/filebeat/filebeat.yml` | `C:\Program Files\filebeat\filebeat.yml` |
| **Module configs** | `/etc/filebeat/modules.d/` | `C:\Program Files\filebeat\modules.d\` |
| **Registry** | `/var/lib/filebeat/registry/` | `C:\ProgramData\filebeat\registry\` |
| **Logs** | `/var/log/filebeat/` | `C:\ProgramData\filebeat\logs\` |
| **Binary** | `/usr/share/filebeat/bin/filebeat` | `C:\Program Files\filebeat\filebeat.exe` |
| **Data directory** | `/var/lib/filebeat/` | `C:\ProgramData\filebeat\` |
## Parámetros de Optimización de Rendimiento
| Parámetro | Predeterminado | Descripción | Rango Recomendado |
|-----------|---------|-------------|-------------------|
| `queue.mem.events` | 4096 | Número de eventos que la cola puede contener | 2048-8192 |
| `queue.mem.flush.min_events` | 2048 | Eventos mínimos antes de flush | 1024-4096 |
| `output.elasticsearch.bulk_max_size` | 50 | Eventos máximos por solicitud de bulk | 50-1600 |
| `output.elasticsearch.worker` | 1 | Número de trabajadores de salida | 1-4 |
| `filebeat.config.inputs.max_harvesters` | 0 (ilimitado) | Lectores de archivos concurrentes máximos | 100-500 |
| `close_inactive` | 5m | Cerrar archivo después de inactividad | 1m-10m || `scan_frequency`| 10s | Cada cuánto revisar archivos nuevos | 5s-30s |