Запустите Filebeat в докере как модуль IoT Edge

Я хочу запустить Filebeat в качестве контейнера Docker в Azure IoT Edge. Я бы хотел, чтобы Filebeat получал журналы от других, работающих с контейнерами.

Я уже могу запустить filebeat как контейнер Docker из документации (https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_volume_mounted_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

С помощью этой команды и с правильным filebeat.yml файлом я могу собирать журналы для всех запущенных контейнеров на моем устройстве.

Теперь я хотел бы развернуть эту конфигурацию как модули Azure IoT Edge.

Я создал образ докера с файлом filebeat.yml, включенным в следующий файл Docker:

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

Из документации: https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_custom_image_configuration.

Я протестировал этот Dockerfile, запустив локально

docker build -t filebeat .

а также

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

Это нормально работает, журналы из других контейнеров собираются должным образом.

Теперь мой вопрос:

  • Как в Azure IoT Edge смонтировать тома для доступа к другим контейнерам Docker, запущенным на устройствах, как это делается с помощью
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \ 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"

для того, чтобы собирать логи?

Из этого другого сообщения SO (Путь подключения к модулю Azure IoT Edge) на портале Azure IoT Edge я попробовал следующее:

  "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
      }
    ]
  }
}

Но когда я развертываю этот модуль, у меня возникает следующая ошибка:

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

Я не понимаю эту ошибку. Как я могу указать путь, используя только [a-zA-Z0-9][a-zA-Z0-9_.-]?

Спасибо за вашу помощь.

ИЗМЕНИТЬ

На портале Azure IoT Edge createOptions json:

{
  "HostConfig": {
    "Binds": [
      "/var/lib/docker/containers:/var/lib/docker/containers",
      "/var/run/docker.sock:/var/run/docker.sock"
    ]
  }
}

person iAmoric    schedule 25.11.2019    source источник


Ответы (1)


Здесь есть статья, в которой описывается, как смонтировать хранилище с хоста: https://docs.microsoft.com/en-us/azure/iot-edge/how-to-access-host-storage-from-module

person silent    schedule 25.11.2019
comment
Спасибо! Теперь я могу развернуть Filebeat как модуль IoT Edge. Еще один вопрос: как указать на портале Azure параметр --user=root команды docker run? - person iAmoric; 25.11.2019
comment
попробуйте привилегированный параметр docker-py.readthedocs.io/en/1.8.1 / hostconfig Как правило, вся возможная конфигурация из объекта Docker HostConfig должна работать и в Edge. - person silent; 25.11.2019