2016-08-05 3 views
3

Текущая установка работает контейнеры Docker с водителем fluentd:Как контролировать 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" 
    } 
} 

Как я могу установить fluentdtag путем извлечения из одного или нескольких из Labels?

докер документы в этом списке из поддерживаемых в настоящее время теги: 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=?

ответ

3

Карта 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" }}' 

Вы должны получить свой тег.

index требуется здесь, чтобы access map keys with non alpha numeric characters

+1

Красивая ... это именно то, что мне было нужно. Спасибо @Matt! – brianz

+0

Любые идеи, почему следующее: 'tag: '{{index .ContainerLabels" io.rancher.stack.name "}}' 'дает мне ошибку yaml:> нашел неожиданный конец потока? (работает на 'rancher 1.6.10') – pkaramol

+0

Это звучит как символ JSON не сбегает в TAG? – Matt

Смежные вопросы