【问题标题】:How to control fluentd log tag from Docker如何从 Docker 控制流利的日志标签
【发布时间】:2016-08-05 20:45:19
【问题描述】:

当前设置正在使用 fluentd 驱动程序运行 Docker 容器:

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

这很容易......将标准输出发送到主机上本地运行的 fluentd 系统。

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

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

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

此列表中的 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=?

【问题讨论】:

    标签: logging docker fluentd


    【解决方案1】:

    ContainerLabels 映射是 items available in dockers logging Contextfluentd 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

    【讨论】:

    • 美丽……这正是我所需要的。谢谢@Matt!
    • 任何想法为什么会出现以下情况:tag: '{{ index .ContainerLabels "io.rancher.stack.name" }}' 给了我一个 yaml 错误:> 发现流的意外结束? (在rancher 1.6.10工作)
    • 听起来好像没有在 TAG 中转义 JSON 字符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2020-01-23
    • 2014-09-07
    • 2020-08-02
    • 2013-11-16
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多