⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Pilote de logging Fluentd

Le pilote de logging fluentd envoie les logs de conteneur au collecteur Fluentd comme données de log structurées. Ensuite, les utilisateurs peuvent utiliser n'importe lequel des divers plugins de sortie de Fluentd pour écrire ces logs vers diverses destinations.

En plus du message de log lui-même, le pilote de log fluentd envoie les métadonnées suivantes dans le message de log structuré :

Champ Description
container_id L'ID complet du conteneur de 64 caractères.
container_name Le nom du conteneur au moment où il a été démarré. Si vous utilisez docker rename pour renommer un conteneur, le nouveau nom n'est pas reflété dans les entrées du journal.
source stdout ou stderr
log Le log du conteneur

Utilisation

Certaines options sont supportées en spécifiant --log-opt autant de fois que nécessaire :

  • fluentd-address: spécifiez une adresse de socket pour se connecter au daemon Fluentd, ex fluentdhost:24224 ou unix:///path/to/fluentd.sock.
  • tag: spécifiez un tag pour les messages Fluentd. Supporte un certain balisage de modèle Go, ex {{.ID}}, {{.FullID}} ou {{.Name}} docker.{{.ID}}.

Pour utiliser le pilote fluentd comme pilote de logging par défaut, définissez les clés log-driver et log-opt aux valeurs appropriées dans le fichier daemon.json, qui se trouve dans /etc/docker/ sur les hôtes Linux ou C:\ProgramData\docker\config\daemon.json sur Windows Server. Pour plus d'informations sur la configuration de Docker en utilisant daemon.json, voir daemon.json.

L'exemple suivant définit le pilote de log à fluentd et définit l'option fluentd-address.

{
  "log-driver": "fluentd",
  "log-opts": {
    "fluentd-address": "fluentdhost:24224"
  }
}

Redémarrez Docker pour que les changements prennent effet.

Note

Les options de configuration log-opts dans le fichier de configuration daemon.json doivent être fournies sous forme de chaînes. Les valeurs booléennes et numériques (telles que la valeur pour fluentd-async ou fluentd-max-retries) doivent donc être entourées de guillemets (").

Pour définir le pilote de logging pour un conteneur spécifique, passez l'option --log-driver à docker run :

$ docker run --log-driver=fluentd ...

Avant d'utiliser ce pilote de logging, lancez un daemon Fluentd. Le pilote de logging se connecte à ce daemon via localhost:24224 par défaut. Utilisez l'option fluentd-address pour se connecter à une adresse différente.

$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224

Si le conteneur ne peut pas se connecter au daemon Fluentd, le conteneur s'arrête immédiatement sauf si l'option fluentd-async est utilisée.

Options

Les utilisateurs peuvent utiliser le drapeau --log-opt NAME=VALUE pour spécifier des options supplémentaires du pilote de logging Fluentd.

fluentd-address

Par défaut, le pilote de logging se connecte à localhost:24224. Fournissez l'option fluentd-address pour se connecter à une adresse différente. Les sockets tcp(par défaut) et unix sont supportés.

$ docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224
$ docker run --log-driver=fluentd --log-opt fluentd-address=tcp://fluentdhost:24224
$ docker run --log-driver=fluentd --log-opt fluentd-address=unix:///path/to/fluentd.sock

Deux des éléments ci-dessus spécifient la même adresse, car tcp est par défaut.

tag

Par défaut, Docker utilise les 12 premiers caractères de l'ID du conteneur pour marquer les messages de log. Référez-vous à la documentation des options de tag de log pour personnaliser le format de tag de log.

labels, labels-regex, env, et env-regex

Les options labels et env prennent chacune une liste séparée par des virgules de clés. S'il y a collision entre les clés label et env, la valeur de env prend la précédence. Les deux options ajoutent des champs supplémentaires aux attributs extra d'un message de logging.

Les options env-regex et labels-regex sont similaires et compatibles avec respectivement env et labels. Leurs valeurs sont des expressions régulières pour correspondre aux variables d'environnement et étiquettes liées au logging. C'est utilisé pour les options avancées de tag de log.

fluentd-async

Docker se connecte à Fluentd en arrière-plan. Les messages sont mis en mémoire tampon jusqu'à ce que la connexion soit établie. Par défaut false.

fluentd-async-reconnect-interval

Quand fluentd-async est activé, l'option fluentd-async-reconnect-interval définit l'intervalle, en millisecondes, auquel la connexion à fluentd-address est rétablie. Cette option est utile si l'adresse résout vers une ou plusieurs adresses IP, par exemple une adresse de service Consul.

fluentd-buffer-limit

Définit le nombre d'événements mis en mémoire tampon dans la mémoire. Les enregistrements seront stockés en mémoire jusqu'à ce nombre. Si la mémoire tampon est pleine, l'appel pour enregistrer les logs échouera. La valeur par défaut est 1048576. (https://github.com/fluent/fluent-logger-golang/tree/master#bufferlimit)

fluentd-retry-wait

Combien de temps attendre entre les tentatives. Par défaut 1 seconde.

fluentd-max-retries

Le nombre maximum de tentatives. Par défaut 4294967295 (2**32 - 1).

fluentd-sub-second-precision

Génère les logs d'événements en résolution nanoseconde. Par défaut false.

Gestion du daemon Fluentd avec Docker

À propos de Fluentd lui-même, voir la page web du projet et ses documents.

Pour utiliser ce pilote de logging, démarrez le daemon fluentd sur un hôte. Nous recommandons que vous utilisiez l'image docker Fluentd. Cette image est particulièrement utile si vous voulez agréger plusieurs logs de conteneur sur chaque hôte puis, plus tard, transférer les logs vers un autre nœud Fluentd pour créer un magasin d'agrégation.

Tester les loggers de conteneur

  1. Écrivez un fichier de configuration (test.conf) pour dumper les logs d'entrée :

    <source>
      @type forward
    </source>
    
    <match *>
      @type stdout
    </match>
  2. Lancez le conteneur Fluentd avec ce fichier de configuration :

    $ docker run -it -p 24224:24224 -v /path/to/conf/test.conf:/fluentd/etc/test.conf -e FLUENTD_CONF=test.conf fluent/fluentd:latest
    
  3. Démarrez un ou plusieurs conteneurs avec le pilote de logging fluentd :

    $ docker run --log-driver=fluentd your/application