2016-08-05 25 views
3

Aktuelle Setup läuft Docker-Container mit dem fluentd Fahrer kontrollieren:Wie fluentd Protokoll Tag von Docker

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

Die ganz einfach funktioniert ... sendet stdout an das lokal fluentd System auf dem Host ausgeführt.

Ich möchte die fluentd tag mit einigen der Etiketten, die auf dem Container festgelegt sind, steuern. Für dieses Beispiel sei angenommen, einige Etiketten (docker inspect Snippet):

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

Wie kann ich die fluentdtag durch Extraktion aus einem oder mehreren der Labels?

Die Docker docs auf dieser Liste aus den aktuell unterstützten Tags: https://docs.docker.com/engine/admin/logging/log_tags/

Diese Dokumente zur Kenntnis ExtraAttributes machen ... aber ich kann herausfinden, wie zu bedienen, dass man nachschlagen oder mehr Etiketten. Beim Durchlesen der Docker Code ist es mir nicht klar: https://github.com/docker/docker/blob/master/daemon/logger/context.go#L29

Diese trivial ist mit docker inspect zu tun:

docker inspect --format '{{index .ContainerLabels "com.amazonaws.ecs.container-name"}}' 

Ich möchte grep, um die gleichen Informationen und bekommen es in log-opt tag=?

Antwort

3

Die ContainerLabels Karte ist eine der items available in dockers logging Context und die fluentd driver supports ParseLogTag, so dass Sie go Vorlagenformatierung verwenden können.

In gerade Docker würde dies wie folgt aussehen:

docker run \ 
    --label alabel=1value \ 
    --log-driver=fluentd \ 
    --log-opt tag="{{ .ContainerLabels.alabel }}" \ 
    busybox \ 
    echo "$(date) test log" 

Wenn Sie also ein --log-opt in Ihr ECS Start injizieren lassen sich wie folgt:

--log-opt tag='{{ index .ContainerLabels "com.amazonaws.ecs.container-name" }}' 

Sie Ihren Tag erhalten sollten.

index ist hier erforderlich, um access map keys with non alpha numeric characters

+1

Schöne ... das ist genau das, was ich brauchte. Danke @Matt! – brianz

+0

Irgendwelche Ideen, warum das Folgende: 'tag: '{{index .ContainerLabels" io.rancher.stack.name "}}' 'gibt mir einen Yaml-Fehler:> unerwartetes Ende des Streams gefunden? (Arbeiten an 'Rancher 1.6.10') – pkaramol

+0

Das klingt wie ein JSON-Charakter wird nicht in der TAG entkommen? – Matt