如何从 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" }}'
你应该得到你的标签。
这里需要 index
到 access map keys with non alpha numeric characters
当前设置是 运行 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" }}'
你应该得到你的标签。
这里需要index
到 access map keys with non alpha numeric characters