Création d'une image Docker personnalisée pour Filebeat

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

Étiquettes: Docker filebeat elk Ubuntu log-shipping

Publié le 10 août à 04h12