Aide-mémoire Filebeat
Installation
| Plateforme | Commande |
|---|
| 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 |
Commandes de base
| Commande | Description |
|---|
sudo systemctl start filebeat | Démarrer le service Filebeat |
sudo systemctl stop filebeat | Arrêter le service Filebeat |
sudo systemctl restart filebeat | Redémarrer le service Filebeat |
sudo systemctl status filebeat | Vérifier le statut du service Filebeat |
sudo systemctl enable filebeat | Activer Filebeat au démarrage |
sudo filebeat -e | Exécuter Filebeat au premier plan avec une sortie console |
sudo filebeat -e -c /path/to/filebeat.yml | Exécuter avec un fichier de configuration spécifique |
sudo filebeat test config | Valider la syntaxe du fichier de configuration |
sudo filebeat test output | Tester la connectivité vers la sortie configurée |
sudo journalctl -u filebeat -f | Afficher les journaux du service Filebeat en temps réel |
sudo filebeat modules list | Lister tous les modules disponibles |
sudo filebeat modules enable apache | Activer un module spécifique (exemple Apache) |
sudo filebeat modules disable apache | Désactiver un module spécifique |
sudo filebeat setup | Charger le modèle d’index, les tableaux de bord et les pipelines |
sudo filebeat version | Afficher les informations de version de Filebeat |
Gestion des modules
| Commande | Description |
|---|
sudo filebeat modules list | Afficher tous les modules disponibles et leur statut |
sudo filebeat modules enable nginx mysql | Activer plusieurs modules simultanément |
sudo filebeat modules disable system | Désactiver un module |
| `sudo filebeat modules list \ | grep Enabled -A 10` |
sudo filebeat export config --modules apache | Exporter la configuration du module spécifique |
ls /etc/filebeat/modules.d/ | Fichiers de configuration du module List |
sudo vi /etc/filebeat/modules.d/nginx.yml | Modifier le fichier de configuration du module |
Configuration et initialisation
| Commande | Description |
|---|
sudo filebeat setup --index-management | Configuration du modèle d’index uniquement dans Elasticsearch |
sudo filebeat setup --dashboards | Configuration des tableaux de bord Kibana uniquement |
sudo filebeat setup --pipelines | Configuration 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=pass | Configuration avec des identifiants d’authentification |
sudo filebeat export template | Exporter le modèle d’index vers stdout |
sudo filebeat export ilm-policy | Exporter la politique ILM (Index Lifecycle Management) |
Utilisation avancée
| Commande | Description |
|---|
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=false | Désactiver la vérification stricte des permissions |
sudo filebeat -e -E http.enabled=true -E http.host=localhost -E http.port=5066 | Activer le point de terminaison de surveillance HTTP |
curl http://localhost:5066/stats | Point de surveillance de requête pour les statistiques |
curl http://localhost:5066/state | Obtenir 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=4 | Exécuter avec un nombre spécifique de workers |
sudo filebeat -e -E output.elasticsearch.bulk_max_size=100 | Ajuster la taille de l’indexation en masse |
sudo filebeat -e -E queue.mem.events=8192 | Définir la limite d’événements de mémoire de file d’attente |
sudo filebeat -e -E output.elasticsearch.compression_level=3 | Activer 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-registry | Migrer le registre à partir d’une version antérieure de Filebeat |
sudo filebeat export config | Exporter la configuration complète vers stdout |
curl http://localhost:5066/autodiscover | Vérifier le statut d’autodécouverte |
Gestion du keystore
| Commande | Description |
|---|
sudo filebeat keystore create | Créer un nouveau keystore pour les secrets |
sudo filebeat keystore add ES_PASSWORD | Ajouter un secret au keystore (invite à saisir la valeur) |
sudo filebeat keystore list | Lister toutes les clés dans le keystore |
sudo filebeat keystore remove ES_PASSWORD | Supprimer 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
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