在Docker中作为IoT Edge模块运行Filebeat

问题描述 投票:0回答:1

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

我已经能够从文档(https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_volume_mounted_configuration)作为Docker容器运行filebeat

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模块。

[我创建了一个包含以下Dockerfile包含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"

为了收集日志?

[从Azure IoT Edge门户中的另一篇SO帖子(Mount path to Azure IoT Edge module),我尝试了以下操作:

  "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_.-]指定路径?

感谢您的帮助。

docker docker-compose filebeat azure-iot-edge
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.