当前设置正在运行带有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=?
答案 0 :(得分:4)
ContainerLabels
地图是items available in dockers logging Context和fluentd 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