如何控制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
是必需的在这里访问非字母数字字符的地图键