Pour déployer Filebeat dans un environnement conteneurisé moderne, il est souvent préférable de construire une image Docker sur mesure plutôt que d’utiliser l’image offciielle — notamment afin de réduire l’empreinte disque, d’ajuster la structure des chemins et de contrôler précisément les dépendances.
Cette procédure décrit la construction d’une image Filebeat version 7.6.2, basée sur Ubuntu 18.04, avec une configuration initiale minimaliste et une gestion robuste du démarrage via un script d’entrée personnalisé.
1. Préparation des ressources
Créez un répertoire dédié à la construction :
mkdir -p /opt/build/filebeat-762
Téléchargez le binaire Filebeat depuis le site Elastic (par exemple, filebeat-7.6.2-linux-x86_64.tar.gz) et placez-le dans ce dossier.
2. Définition de l’image Docker
Dans le même répertoire, créez le fichier Dockerfile :
FROM ubuntu:18.04
LABEL maintainer="devops-team"
ENV FILEBEAT_VERSION=7.6.2 \
DEBIAN_FRONTEND=noninteractive
WORKDIR /opt/filebeat
COPY filebeat-7.6.2-linux-x86_64.tar.gz .
RUN apt-get update && \
apt-get install -y tar gzip ca-certificates && \
rm -rf /var/lib/apt/lists/* && \
tar -xzf filebeat-7.6.2-linux-x86_64.tar.gz --strip-components=1 && \
rm filebeat-7.6.2-linux-x86_64.tar.gz && \
chmod +x filebeat
COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
EXPOSE 5066
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["filebeat", "-e", "-c", "/etc/filebeat/filebeat.yml"]
3. Script d’entrée personnalisé
Créez entrypoint.sh avec le contenu suivant :
#!/bin/bash
set -euo pipefail
# Affiche les variables d'environnement utiles
echo "[INFO] Environment variables loaded:"
env | grep -E '^(FILEBEAT|ES_|LOG_LEVEL)' | sort
# Vérifie l'existence de la configuration
if [[ ! -f /etc/filebeat/filebeat.yml ]]; then
echo "[ERROR] Configuration file missing at /etc/filebeat/filebeat.yml"
exit 1
fi
echo "[INFO] Validating configuration..."
./filebeat test config && ./filebeat test output
echo "[INFO] Starting Filebeat..."
exec "$@"
4. Construction de l’image
Exécutez la commande suivante depuis le répertoire source :
docker build --pull -t filebeat:7.6.2 .
L’option --pull garantit l’utilisation de la dernière version de l’image de base. Une fois terminée, vérifiez la nouvelle image avec :
docker images | grep filebeat
Vous pouvez désormais lancer un conteneur en montant une configuration personnalisée via un volume :
docker run -d \
--name=filebeat-prod \
--network=host \
-v $(pwd)/config/filebeat.yml:/etc/filebeat/filebeat.yml:ro \
-v /var/log:/var/log:ro \
filebeat:7.6.2