Filebeat Cheatsheet¶
Installazione¶
| Piattaforma | 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 |
| ## 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 |
Mostra solo moduli abilitati |
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)
Configurazione Input di Base¶
# 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
Configurazione Input Log¶
# 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
Configurazione Input Container¶
# 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
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
```### 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
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"]## Best Practice
- Utilizzare Filestream Input: Preferire
filestreamrispetto al tipo di input legacylogper 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.eventseoutput.elasticsearch.bulk_max_sizeper 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 configefilebeat test outputprima 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 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" |
| ## 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 |