Je souhaite exécuter Filebeat en tant que conteneur Docker dans Azure IoT Edge. J'aimerais que Filebeat obtienne les journaux des autres conteneurs exécutant.

Je suis déjà capable d'exécuter filebeat en tant que conteneur Docker, à partir de la documentation (https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_volume_mount_configuration)

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="$(pwd)/filebeat.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:6.8.3 filebeat -e -strict.perms=false

Avec cette commande et avec le bon fichier filebeat.yml, je peux collecter des journaux pour tous les conteneurs en cours d'exécution sur mon appareil.

J'aimerais maintenant déployer cette configuration en tant que modules Azure IoT Edge.

J'ai créé une image Docker contenant le fichier filebeat.yml inclus avec le Dockerfile suivant :

FROM docker.elastic.co/beats/filebeat:6.8.3
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chmod go-w /usr/share/filebeat/filebeat.yml
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat

À partir de la documentation : https://www .elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_custom_image_configuration

J'ai testé ce Dockerfile en l'exécutant localement

docker build -t filebeat .

Et

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  filebeat:latest filebeat -e -strict.perms=false

Cela fonctionne bien, les journaux des autres conteneurs sont collectés comme ils le devraient.

Maintenant ma question est :

  • Dans Azure IoT Edge, comment puis-je monter des volumes pour accéder à d'autres conteneurs Docker s'exécutant sur les appareils, comme c'est fait avec
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \ 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"

Pour collecter les logs ?

À partir de cet autre article SO (Chemin de montage vers le module Azure IoT Edge) dans le portail Azure IoT Edge, j'ai essayé ce qui suit :

  "HostConfig": {
    "Mounts": [
      {
        "Target": "/var/lib/docker/containers",
        "Source": "/var/lib/docker/containers",
        "Type": "volume",
        "ReadOnly: true
      },
      {
        "Target": "/var/run/docker.sock",
        "Source": "/var/run/docker.sock",
        "Type": "volume",
        "ReadOnly: true
      }
    ]
  }
}

Mais lorsque je déploie ce module, j'ai l'erreur suivante :

2019-11-25T10:09:41Z [WARN] - Could not create module FilebeatAgent
2019-11-25T10:09:41Z [WARN] -         caused by: create /var/lib/docker/containers: "/var/lib/docker/containers" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path

Je ne comprends pas cette erreur. Comment puis-je spécifier un chemin en utilisant uniquement [a-zA-Z0-9][a-zA-Z0-9_.-] ?

Merci de votre aide.

MODIFIER

Dans le portail Azure IoT Edge, createOptions json :

{
  "HostConfig": {
    "Binds": [
      "/var/lib/docker/containers:/var/lib/docker/containers",
      "/var/run/docker.sock:/var/run/docker.sock"
    ]
  }
}
0
iAmoric 25 nov. 2019 à 13:18

1 réponse

Meilleure réponse

Il existe un article qui décrit comment monter le stockage à partir de l'hôte ici : https://docs.microsoft.com/en-us/azure/iot-edge/how-to-access-host-storage-from-module

1
silent 25 nov. 2019 à 11:26