运行 docker 中的 Filebeat 作为 IoT Edge 模块

Run Filebeat in docker as IoT Edge module

我想 运行 Filebeat 作为 Azure IoT Edge 中的 Docker 容器。我希望 Filebeat 从其他 运行ning 容器中获取日志。

我已经能够 运行 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 文件,我能够为我设备上的每个 运行ning 容器收集日志。

现在我想将此配置部署为 Azure IoT Edge 模块。

我创建了一个 docker 图像,其中 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

我通过 运行ning 在本地

测试了这个 Docker 文件

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

这很好用,其他容器的日志会按应有的方式收集。

现在我的问题是:

--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \ 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"

为了收集日志?

从 Azure IoT Edge 门户中的另一个 SO post () 我尝试了以下操作:

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

这里有一篇文章描述了如何从主机挂载存储:https://docs.microsoft.com/en-us/azure/iot-edge/how-to-access-host-storage-from-module