Salta ai contenuti

Filebeat Cheatsheet

Filebeat Cheatsheet

Installazione

PiattaformaComando
Ubuntu/Debian`wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch \
RHEL/CentOSsudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo yum install filebeat
macOSbrew tap elastic/tap
brew install elastic/tap/filebeat-full
WindowsDownload from https://artifacts.elastic.co/downloads/beats/filebeat/
Extract and run: .\install-service-filebeat.ps1
Dockerdocker 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

ComandoDescrizione
sudo systemctl start filebeatAvvia servizio Filebeat
sudo systemctl stop filebeatArrestare il servizio Filebeat
sudo systemctl restart filebeatRiavvia servizio Filebeat
sudo systemctl status filebeatControlla lo stato del servizio Filebeat
sudo systemctl enable filebeatAbilitare Filebeat all’avvio
sudo filebeat -eEsegui Filebeat in primo piano con output della console
sudo filebeat -e -c /path/to/filebeat.ymlEsegui con file di configurazione specifico
sudo filebeat test configConvalidare la sintassi del file di configurazione
sudo filebeat test outputVerifica connettività verso l’output configurato
sudo journalctl -u filebeat -fVisualizza i log del servizio Filebeat in tempo reale
sudo filebeat modules listElenca tutti i moduli disponibili
sudo filebeat modules enable apacheAbilitare un modulo specifico (esempio Apache)
sudo filebeat modules disable apacheDisabilita un modulo specifico
sudo filebeat setupCarica template dell’indice, dashboard e pipeline
sudo filebeat versionVisualizza informazioni sulla versione di Filebeat

Gestione dei Moduli

ComandoDescrizione
sudo filebeat modules listMostra tutti i moduli disponibili e il loro stato
sudo filebeat modules enable nginx mysqlAbilita più moduli contemporaneamente
sudo filebeat modules disable systemDisabilita un modulo
`sudo filebeat modules list \grep Enabled -A 10`
sudo filebeat export config --modules apacheEsporta configurazione modulo specifico
ls /etc/filebeat/modules.d/Elenco dei file di configurazione del modulo
sudo vi /etc/filebeat/modules.d/nginx.ymlModifica file di configurazione del modulo

Configurazione e Inizializzazione

ComandoDescrizione
sudo filebeat setup --index-managementConfigura solo il template dell’indice in Elasticsearch
sudo filebeat setup --dashboardsConfigura solo dashboard di Kibana
sudo filebeat setup --pipelinesConfigura 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=passConfigurazione con credenziali di autenticazione
sudo filebeat export templateEsporta il template dell’indice su stdout
sudo filebeat export ilm-policyEsporta criteri ILM (Index Lifecycle Management)

Utilizzo Avanzato

ComandoDescrizione
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=falseDisabilita il controllo rigoroso dei permessi
sudo filebeat -e -E http.enabled=true -E http.host=localhost -E http.port=5066Abilita endpoint di monitoraggio HTTP
curl http://localhost:5066/statsEndpoint di monitoraggio query per statistiche
curl http://localhost:5066/stateOttieni informazioni dettagliate sullo stato
sudo filebeat -e -E output.console.enabled=true -E output.elasticsearch.enabled=falseInvia gli eventi alla console invece che a Elasticsearch
sudo filebeat -e -E filebeat.config.inputs.workers=4Esegui con un numero specifico di worker
sudo filebeat -e -E output.elasticsearch.bulk_max_size=100Regola la dimensione dell’indicizzazione in blocco
sudo filebeat -e -E queue.mem.events=8192Imposta limite di memoria degli eventi della coda
sudo filebeat -e -E output.elasticsearch.compression_level=3Abilitare 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-registryMigra il registro dalla versione precedente di Filebeat
sudo filebeat export configEsporta configurazione completa su stdout
curl http://localhost:5066/autodiscoverControlla lo stato di autodiscover

Gestione del Keystore

ComandoDescrizione
sudo filebeat keystore createCrea un nuovo keystore per segreti
sudo filebeat keystore add ES_PASSWORDAggiungi un segreto al keystore (richiede il valore)
sudo filebeat keystore listElenca tutte le chiavi nel keystore
sudo filebeat keystore remove ES_PASSWORDRimuovi 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
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 |