Filebeat Cheatsheet
Installazione
| Piattaforma | 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 |
Comandi di Base
| Comando | Descrizione |
|---|
sudo systemctl start filebeat | Avvia servizio Filebeat |
sudo systemctl stop filebeat | Arrestare il servizio Filebeat |
sudo systemctl restart filebeat | Riavvia servizio Filebeat |
sudo systemctl status filebeat | Controlla lo stato del servizio Filebeat |
sudo systemctl enable filebeat | Abilitare Filebeat all’avvio |
sudo filebeat -e | Esegui Filebeat in primo piano con output della console |
sudo filebeat -e -c /path/to/filebeat.yml | Esegui con file di configurazione specifico |
sudo filebeat test config | Convalidare la sintassi del file di configurazione |
sudo filebeat test output | Verifica connettività verso l’output configurato |
sudo journalctl -u filebeat -f | Visualizza i log del servizio Filebeat in tempo reale |
sudo filebeat modules list | Elenca tutti i moduli disponibili |
sudo filebeat modules enable apache | Abilitare un modulo specifico (esempio Apache) |
sudo filebeat modules disable apache | Disabilita un modulo specifico |
sudo filebeat setup | Carica template dell’indice, dashboard e pipeline |
sudo filebeat version | Visualizza informazioni sulla versione di Filebeat |
Gestione dei Moduli
| Comando | Descrizione |
|---|
sudo filebeat modules list | Mostra tutti i moduli disponibili e il loro stato |
sudo filebeat modules enable nginx mysql | Abilita più moduli contemporaneamente |
sudo filebeat modules disable system | Disabilita un modulo |
| `sudo filebeat modules list \ | grep Enabled -A 10` |
sudo filebeat export config --modules apache | Esporta configurazione modulo specifico |
ls /etc/filebeat/modules.d/ | Elenco dei file di configurazione del modulo |
sudo vi /etc/filebeat/modules.d/nginx.yml | Modifica file di configurazione del modulo |
Configurazione e Inizializzazione
| Comando | Descrizione |
|---|
sudo filebeat setup --index-management | Configura solo il template dell’indice in Elasticsearch |
sudo filebeat setup --dashboards | Configura solo dashboard di Kibana |
sudo filebeat setup --pipelines | Configura solo pipeline di ingest |
sudo filebeat setup -E output.elasticsearch.hosts=['es:9200'] | Configurazione con host Elasticsearch specifico |
sudo filebeat setup -E output.elasticsearch.username=elastic -E output.elasticsearch.password=pass | Configurazione con credenziali di autenticazione |
sudo filebeat export template | Esporta il template dell’indice su stdout |
sudo filebeat export ilm-policy | Esporta criteri ILM (Index Lifecycle Management) |
Utilizzo Avanzato
| Comando | Descrizione |
|---|
sudo filebeat -e -d "*" | Esegui con debug logging per tutti i componenti |
sudo filebeat -e -d "publish,harvester" | Esegui il debug di specifici componenti solo |
sudo filebeat -e --strict.perms=false | Disabilita il controllo rigoroso dei permessi |
sudo filebeat -e -E http.enabled=true -E http.host=localhost -E http.port=5066 | Abilita endpoint di monitoraggio HTTP |
curl http://localhost:5066/stats | Endpoint di monitoraggio query per statistiche |
curl http://localhost:5066/state | Ottieni informazioni dettagliate sullo stato |
sudo filebeat -e -E output.console.enabled=true -E output.elasticsearch.enabled=false | Invia gli eventi alla console invece che a Elasticsearch |
sudo filebeat -e -E filebeat.config.inputs.workers=4 | Esegui con un numero specifico di worker |
sudo filebeat -e -E output.elasticsearch.bulk_max_size=100 | Regola la dimensione dell’indicizzazione in blocco |
sudo filebeat -e -E queue.mem.events=8192 | Imposta limite di memoria degli eventi della coda |
sudo filebeat -e -E output.elasticsearch.compression_level=3 | Abilitare la compressione per l’output di Elasticsearch |
sudo filebeat test config -e -d "processors" | Configurazione dei processori di test con output di debug |
sudo filebeat migrate-registry | Migra il registro dalla versione precedente di Filebeat |
sudo filebeat export config | Esporta configurazione completa su stdout |
curl http://localhost:5066/autodiscover | Controlla lo stato di autodiscover |
Gestione del Keystore
| Comando | Descrizione |
|---|
sudo filebeat keystore create | Crea un nuovo keystore per segreti |
sudo filebeat keystore add ES_PASSWORD | Aggiungi un segreto al keystore (richiede il valore) |
sudo filebeat keystore list | Elenca tutte le chiavi nel keystore |
sudo filebeat keystore remove ES_PASSWORD | Rimuovi una chiave dal keystore |
Configurazione
File di Configurazione Principale
Posizione: /etc/filebeat/filebeat.yml(Linux) o C:\Program Files\filebeat\filebeat.yml(Windows)
# 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
# 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
# Docker container logs
filebeat.inputs:
- type: container
enabled: true
paths:
- /var/lib/docker/containers/*/*.log
processors:
- add_docker_metadata: ~
Output 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"
Output 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"
Output Kafka
output.kafka:
hosts: ["kafka1:9092", "kafka2:9092"]
topic: "filebeat"
partition.round_robin:
reachable_only: false
compression: gzip
max_message_bytes: 1000000
Configurazione Processori
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
Autodiscover per 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: ~
Autodiscover per 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
Esempio di Configurazione Modulo
# /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*"]
Casi d’Uso Comuni
Caso d’Uso 1: Raccolta Log Applicazione
Note: Since some sections were left blank in the original text, I’ve maintained the blank spaces in the Italian translation. If you’d like me to fill those with placeholder text or specific translations, please let me know.```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
```### Use Case 2: Configurazione della Raccolta di Log 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
```### Use Case 3: Raccolta di Log di Container 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
```### Use Case 4: Distribuzione Kubernetes DaemonSet
```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
```### Use Case 5: Parsing di Log Multilinea (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
```### Use Case 6: Invio di Log a Più Output
```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
```### Use Case 7: Filtraggio ed Arricchimento dei Log
```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"]
```## Best Practice
- **Utilizzare Filestream Input**: Preferire `filestream`rispetto al tipo di input legacy `log`per migliori prestazioni e affidabilità con la rotazione dei file
- **Abilitare Moduli**: Utilizzare moduli pre-costruiti (nginx, apache, mysql, ecc.) invece di configurazioni personalizzate quando possibile per una configurazione più rapida e un migliore parsing
- **Implementare la Gestione del Backpressure**: Configurare `queue.mem.events`e `output.elasticsearch.bulk_max_size`per gestire picchi di carico senza perdita di dati
- **Proteggere le Credenziali**: Archiviare informazioni sensibili (password, chiavi API) nel keystore di Filebeat invece che in file di configurazione in testo normale
- **Monitorare l'Utilizzo delle Risorse**: Abilitare l'endpoint HTTP (`http.enabled: true`) per monitorare le prestazioni di Filebeat e lo stato dell'harvester
- **Utilizzare Index Lifecycle Management (ILM)**: Configurare policy ILM per gestire automaticamente la conservazione degli indici e ridurre i costi di storage
- **Taggare ed Arricchire i Log**: Aggiungere campi personalizzati e metadati utilizzando processori per rendere i log più ricercabili e contestuali
- **Testare Prima della Produzione**: Utilizzare sempre `filebeat test config`e `filebeat test output`prima di distribuire modifiche di configurazione
- **Gestire Log Multilinea**: Configurare pattern multilinea per stack trace e log di applicazioni multilinea per prevenire la frammentazione dei log
- **Implementare Autodiscover**: Utilizzare autodiscover per ambienti dinamici (Docker, Kubernetes) per rilevare e configurare automaticamente nuovi container
- **Aggiornamenti Regolari**: Mantenere Filebeat aggiornato per la compatibilità con la versione di Elasticsearch e patch di sicurezza
- **Impostare Permessi Appropriati**: Assicurarsi che Filebeat abbia accesso in lettura ai file di log seguendo il principio del minimo privilegio
## Risoluzione dei Problemi
| Problema | Soluzione |
|-------|----------|
| **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"` |
## Riferimento Rapido: Posizioni Comuni dei File
| Elemento | Posizione (Linux) | Posizione (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\` |
## Parametri di Ottimizzazione delle Prestazioni
| Parametro | Predefinito | Descrizione | Intervallo Consigliato |
|-----------|---------|-------------|-------------------|
| `queue.mem.events` | 4096 | Numero di eventi che la coda può contenere | 2048-8192 |
| `queue.mem.flush.min_events` | 2048 | Eventi minimi prima dello scaricamento | 1024-4096 |
| `output.elasticsearch.bulk_max_size` | 50 | Eventi massimi per richiesta bulk | 50-1600 |
| `output.elasticsearch.worker` | 1 | Numero di worker di output | 1-4 |
| `filebeat.config.inputs.max_harvesters` | 0 (illimitato) | Lettori di file concorrenti massimi | 100-500 |
| `close_inactive` | 5m | Chiudi file dopo inattività | 1m-10m || `scan_frequency`| 10s | Frequenza di verifica nuovi file | 5s-30s |