如何从 Docker 控制流利的日志标签

How to control fluentd log tag from Docker

当前设置是 运行 Docker 个带有 fluentd 驱动程序的容器:

docker run --log-driver=fluentd my-container

这很容易工作...将标准输出发送到主机上的本地 运行 fluentd 系统。

我想使用容器上设置的一些标签来控制 fluentd tag。对于此示例,假设一些标签(docker inspect 片段):

"Config": {
    "Labels": {
       "com.amazonaws.ecs.container-name": "web",
       "com.amazonaws.ecs.task-definition-version": "3"
    }
}

如何通过提取一个或多个 Labels 来设置 fluentd tag

此列表中的 Docker 文档列出了当前支持的标签:https://docs.docker.com/engine/admin/logging/log_tags/

那些文档记录了 ExtraAttributes...但是我可以弄清楚如何使用它来查找一个或多个标签。通读 Docker 代码,我不清楚:https://github.com/docker/docker/blob/master/daemon/logger/context.go#L29

这对docker inspect来说很简单:

docker inspect --format '{{index .ContainerLabels "com.amazonaws.ecs.container-name"}}'

我想 grep 出相同的信息并将其放入 log-opt tag=?

ContainerLabels 地图是 items available in dockers logging Context and the fluentd driver supports ParseLogTag 地图之一,因此您可以使用 go 模板格式化。

直接 docker 这看起来像:

docker run \
  --label alabel=1value \
  --log-driver=fluentd \
  --log-opt tag="{{ .ContainerLabels.alabel }}" \
  busybox \
  echo "$(date) test log"

因此,如果您可以按如下方式将 --log-opt 注入到您的 ECS 启动中:

--log-opt tag='{{ index .ContainerLabels "com.amazonaws.ecs.container-name" }}' 

你应该得到你的标签。

这里需要

indexaccess map keys with non alpha numeric characters