Vai al contenuto

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-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" \ | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
sudo apt-get update && sudo apt-get install filebeat
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 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 legacy logper 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.eventse output.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 confige filebeat 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 config
Check service status: sudo systemctl status filebeat
Review logs: sudo journalctl -u filebeat -n 50
No data in Elasticsearch Test output connectivity: sudo filebeat test output
Check Elasticsearch is running: curl http://elasticsearch:9200
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
Check 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.json
Ensure unique input IDs in configuration
Avoid multiple Filebeat instances reading same files
High memory usage Reduce queue size: queue.mem.events: 2048
Decrease harvester limit: filebeat.config.inputs.max_harvesters: 100
Enable compression: output.elasticsearch.compression_level: 3
Logs not being tailed Check file paths are correct: ls -la /var/log/myapp/*.log
Verify input is enabled in configuration
Check close_inactive setting isn't too aggressive
Connection timeout to Elasticsearch Increase timeout: output.elasticsearch.timeout: 90
Check network connectivity: telnet elasticsearch 9200
Verify credentials: curl -u elastic:password http://elasticsearch:9200
Module not working Verify module is enabled: sudo filebeat modules list
Check log paths in module config: cat /etc/filebeat/modules.d/nginx.yml
Ensure ingest pipelines loaded: sudo filebeat setup --pipelines
Multiline logs not parsing Test pattern with sample logs
Check multiline.negate and multiline.match settings
Review 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 -noout
Disable SSL verification for testing: output.elasticsearch.ssl.verification_mode: none
Registry file corruption Stop Filebeat: sudo systemctl stop filebeat
Backup registry: sudo cp -r /var/lib/filebeat/registry /tmp/registry.bak
Remove registry: sudo rm -rf /var/lib/filebeat/registry
Restart (will reprocess logs): sudo systemctl start filebeat
Autodiscover not detecting containers Check Docker socket permissions: ls -la /var/run/docker.sock
Verify 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