如何从Docker控制流畅的日志标记

时间:2016-08-05 20:45:19

标签: logging docker fluentd

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

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

这非常容易......将stdout发送到主机上本地运行的流畅系统。

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

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

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

此列表中的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"}}'

我想要提供相同的信息并将其输入log-opt tag=?

1 个答案:

答案 0 :(得分:4)

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

在直接的码头工具中,这看起来像:

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

你应该得到你的标签。

此处access map keys with non alpha numeric characters

需要

index