如何控制Docker的fluentd日志标记

目前的安装程序正在用fluentd驱动程序运行Docker容器:

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

这很容易…将stdout发送到主机上本地运行的fluentd系统。

我想使用容器上的一些tag来控制fluentd tag 。 对于这个例子,假设一些标签( docker inspect snippet):

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

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

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

这些文档loggingExtraAttributes …但是我可以找出如何使用它来查找一个或多个标签。 通过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映射是Docker 日志logging中可用的项目之一, fluentd驱动程序支持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" }}' 

你应该得到你的标签。

index是必需的在这里访问非字母数字字符的地图键