Aller au contenu

Aide-mémoire Filebeat

Aide-mémoire Filebeat

Installation

PlateformeCommande
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

Commandes de base

CommandeDescription
sudo systemctl start filebeatDémarrer le service Filebeat
sudo systemctl stop filebeatArrêter le service Filebeat
sudo systemctl restart filebeatRedémarrer le service Filebeat
sudo systemctl status filebeatVérifier le statut du service Filebeat
sudo systemctl enable filebeatActiver Filebeat au démarrage
sudo filebeat -eExécuter Filebeat au premier plan avec une sortie console
sudo filebeat -e -c /path/to/filebeat.ymlExécuter avec un fichier de configuration spécifique
sudo filebeat test configValider la syntaxe du fichier de configuration
sudo filebeat test outputTester la connectivité vers la sortie configurée
sudo journalctl -u filebeat -fAfficher les journaux du service Filebeat en temps réel
sudo filebeat modules listLister tous les modules disponibles
sudo filebeat modules enable apacheActiver un module spécifique (exemple Apache)
sudo filebeat modules disable apacheDésactiver un module spécifique
sudo filebeat setupCharger le modèle d’index, les tableaux de bord et les pipelines
sudo filebeat versionAfficher les informations de version de Filebeat

Gestion des modules

CommandeDescription
sudo filebeat modules listAfficher tous les modules disponibles et leur statut
sudo filebeat modules enable nginx mysqlActiver plusieurs modules simultanément
sudo filebeat modules disable systemDésactiver un module
`sudo filebeat modules list \grep Enabled -A 10`
sudo filebeat export config --modules apacheExporter la configuration du module spécifique
ls /etc/filebeat/modules.d/Fichiers de configuration du module List
sudo vi /etc/filebeat/modules.d/nginx.ymlModifier le fichier de configuration du module

Configuration et initialisation

CommandeDescription
sudo filebeat setup --index-managementConfiguration du modèle d’index uniquement dans Elasticsearch
sudo filebeat setup --dashboardsConfiguration des tableaux de bord Kibana uniquement
sudo filebeat setup --pipelinesConfiguration des pipelines d’ingestion uniquement
sudo filebeat setup -E output.elasticsearch.hosts=['es:9200']Configuration avec un hôte Elasticsearch spécifique
sudo filebeat setup -E output.elasticsearch.username=elastic -E output.elasticsearch.password=passConfiguration avec des identifiants d’authentification
sudo filebeat export templateExporter le modèle d’index vers stdout
sudo filebeat export ilm-policyExporter la politique ILM (Index Lifecycle Management)

Utilisation avancée

CommandeDescription
sudo filebeat -e -d "*"Exécuter avec la journalisation de débogage pour tous les composants
sudo filebeat -e -d "publish,harvester"Déboguer uniquement des composants spécifiques
sudo filebeat -e --strict.perms=falseDésactiver la vérification stricte des permissions
sudo filebeat -e -E http.enabled=true -E http.host=localhost -E http.port=5066Activer le point de terminaison de surveillance HTTP
curl http://localhost:5066/statsPoint de surveillance de requête pour les statistiques
curl http://localhost:5066/stateObtenir des informations détaillées sur l’état
sudo filebeat -e -E output.console.enabled=true -E output.elasticsearch.enabled=falseÉvénements de sortie vers la console au lieu d’Elasticsearch
sudo filebeat -e -E filebeat.config.inputs.workers=4Exécuter avec un nombre spécifique de workers
sudo filebeat -e -E output.elasticsearch.bulk_max_size=100Ajuster la taille de l’indexation en masse
sudo filebeat -e -E queue.mem.events=8192Définir la limite d’événements de mémoire de file d’attente
sudo filebeat -e -E output.elasticsearch.compression_level=3Activer la compression pour la sortie Elasticsearch
sudo filebeat test config -e -d "processors"Configuration des processeurs de test avec sortie de débogage
sudo filebeat migrate-registryMigrer le registre à partir d’une version antérieure de Filebeat
sudo filebeat export configExporter la configuration complète vers stdout
curl http://localhost:5066/autodiscoverVérifier le statut d’autodécouverte

Gestion du keystore

CommandeDescription
sudo filebeat keystore createCréer un nouveau keystore pour les secrets
sudo filebeat keystore add ES_PASSWORDAjouter un secret au keystore (invite à saisir la valeur)
sudo filebeat keystore listLister toutes les clés dans le keystore
sudo filebeat keystore remove ES_PASSWORDSupprimer une clé du keystore

Configuration

Fichier de configuration principal

Emplacement : /etc/filebeat/filebeat.yml(Linux) ou C:\Program Files\filebeat\filebeat.yml(Windows)

Configuration d’entrée de 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

Configuration d’entrée de journal

# 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

Configuration d’entrée de conteneur

# Docker container logs
filebeat.inputs:
- type: container
  enabled: true
  paths:
    - /var/lib/docker/containers/*/*.log
  processors:
    - add_docker_metadata: ~

Sortie 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"

Sortie 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"

Sortie Kafka

output.kafka:
  hosts: ["kafka1:9092", "kafka2:9092"]
  topic: "filebeat"
  partition.round_robin:
    reachable_only: false
  compression: gzip
  max_message_bytes: 1000000

Configuration des processeurs

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

Découverte automatique pour 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: ~

Découverte automatique pour 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

Exemple de configuration de module

# /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*"]

Cas d’utilisation courants

Cas d’utilisation 1 : Collecte des journaux d’application

Note: Since some sections (3-20) were left blank in the original text, I’ve kept them blank in the translation as well. If you’d like me to fill those in with placeholder text or have specific content to translate, please provide those details.```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 : Configuration de la Collecte des Logs 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 : Collecte des Logs de Conteneurs 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 : Déploiement de DaemonSet 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
```### Use Case 5 : Analyse de Logs Multiligne (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 : Envoi de Logs vers Plusieurs Sorties
```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 : Filtrage et Enrichissement des Logs
```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"]
```## Meilleures Pratiques

- **Utiliser l'Entrée Filestream** : Préférer `filestream`plutôt que l'ancien type d'entrée `log`pour de meilleures performances et fiabilité avec la rotation des fichiers
- **Activer les Modules** : Utiliser les modules pré-construits (nginx, apache, mysql, etc.) au lieu de configurations personnalisées pour une configuration plus rapide et un meilleur analyse
- **Implémenter la Gestion de la Contre-Pression** : Configurer `queue.mem.events`et `output.elasticsearch.bulk_max_size`pour gérer les pics de charge sans perte de données
- **Sécuriser les Identifiants** : Stocker les informations sensibles (mots de passe, clés API) dans le keystore Filebeat plutôt que dans des fichiers de configuration en texte brut
- **Surveiller l'Utilisation des Ressources** : Activer le point de terminaison HTTP (`http.enabled: true`) pour surveiller les performances de Filebeat et le statut du harvester
- **Utiliser la Gestion du Cycle de Vie des Index (ILM)** : Configurer des politiques ILM pour gérer automatiquement la rétention des index et réduire les coûts de stockage
- **Étiqueter et Enrichir les Logs** : Ajouter des champs personnalisés et des métadonnées à l'aide de processeurs pour rendre les logs plus recherchables et contextuels
- **Tester Avant la Production** : Toujours utiliser `filebeat test config`et `filebeat test output`avant de déployer des modifications de configuration
- **Gérer les Logs Multiligne** : Configurer des modèles multiligne pour les stack traces et les logs d'application multiligne pour éviter la fragmentation des logs
- **Implémenter la Découverte Automatique** : Utiliser la découverte automatique pour les environnements dynamiques (Docker, Kubernetes) pour détecter et configurer automatiquement les nouveaux conteneurs
- **Mises à Jour Régulières** : Garder Filebeat à jour pour correspondre à votre version Elasticsearch pour la compatibilité et les correctifs de sécurité
- **Définir des Permissions Appropriées** : S'assurer que Filebeat a un accès en lecture aux fichiers de logs tout en suivant le principe du moindre privilège

| Problème | Solution |
|-------|----------|
| **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"` |Filestream
| Item | Emplacement (Linux) | Emplacement (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\` |input
| Paramètre | Défaut | Description | Plage Recommandée |
|-----------|---------|-------------|-------------------|
| `queue.mem.events` | 4096 | Nombre d'événements que la file d'attente peut contenir | 2048-8192 |
| `queue.mem.flush.min_events` | 2048 | Événements minimum avant vidage | 1024-4096 |
| `output.elasticsearch.bulk_max_size` | 50 | Événements max par requête en bloc | 50-1600 |
| `output.elasticsearch.worker` | 1 | Nombre de workers de sortie | 1-4 |
| `filebeat.config.inputs.max_harvesters` | 0 (illimité) | Lecteurs de fichiers concurrents max | 100-500 |
| `close_inactive` | 5m | Fermer le fichier après inactivité | 1m-10m || `scan_frequency`queue size