Hoja de Referencia de Filebeat¶
Instalación¶
| Platform | Comando |
|---|---|
| Ubuntu/Debian | wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch \ | sudo apt-key add -sudo apt-get install apt-transport-httpsecho "deb https://artifacts.elastic.co/packages/8.x/apt stable main" \ | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.listsudo apt-get update && sudo apt-get install filebeat |
| RHEL/CentOS | sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchsudo yum install filebeat |
| macOS | brew tap elastic/tapbrew 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.cohelm 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 |
Mostrar solo módulos habilitados |
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
Enable filestream input for application logs¶
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
yaml
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
filestreamsobre el tipo de entradaloglegacy 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.eventsyoutput.elasticsearch.bulk_max_sizepara 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 configyfilebeat test outputantes 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 configCheck service status: sudo systemctl status filebeatReview logs: sudo journalctl -u filebeat -n 50 |
| No data in Elasticsearch | Test output connectivity: sudo filebeat test outputCheck Elasticsearch is running: curl http://elasticsearch:9200Verify index exists: curl http://elasticsearch:9200/_cat/indices?v |
| Permission denied errors | Ensure Filebeat has read access: sudo chmod 644 /var/log/myapp/*.logCheck file ownership: ls -la /var/log/myapp/Run with proper user: sudo chown root:root /etc/filebeat/filebeat.yml |
| Duplicate events | Check registry file: /var/lib/filebeat/registry/filebeat/data.jsonEnsure unique input IDs in configuration Avoid multiple Filebeat instances reading same files |
| High memory usage | Reduce queue size: queue.mem.events: 2048Decrease harvester limit: filebeat.config.inputs.max_harvesters: 100Enable compression: output.elasticsearch.compression_level: 3 |
| Logs not being tailed | Check file paths are correct: ls -la /var/log/myapp/*.logVerify input is enabled in configuration Check close_inactive setting isn't too aggressive |
| Connection timeout to Elasticsearch | Increase timeout: output.elasticsearch.timeout: 90Check network connectivity: telnet elasticsearch 9200Verify credentials: curl -u elastic:password http://elasticsearch:9200 |
| Module not working | Verify module is enabled: sudo filebeat modules listCheck log paths in module config: cat /etc/filebeat/modules.d/nginx.ymlEnsure ingest pipelines loaded: sudo filebeat setup --pipelines |
| Multiline logs not parsing | Test pattern with sample logs Check multiline.negate and multiline.match settingsReview harvester debug logs: sudo filebeat -e -d "harvester" |
| SSL/TLS connection errors | Verify certificate paths and permissions Check certificate validity: openssl x509 -in cert.pem -text -nooutDisable SSL verification for testing: output.elasticsearch.ssl.verification_mode: none |
| Registry file corruption | Stop Filebeat: sudo systemctl stop filebeatBackup registry: sudo cp -r /var/lib/filebeat/registry /tmp/registry.bakRemove registry: sudo rm -rf /var/lib/filebeat/registryRestart (will reprocess logs): sudo systemctl start filebeat |
| Autodiscover not detecting containers | Check Docker socket permissions: ls -la /var/run/docker.sockVerify autodiscover config syntax 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 |