2015-09-09 33 views
9

In base a to the official Docker docs, è possibile ottenere l'output stdout e stderr di un contenitore come GELF messages che è un formato compreso ad es. Graylog/Graylog2 e logstash.Utilizzo della finestra mobile-comporre con il driver di registro GELF

Questo funziona correttamente quando eseguo i miei contenitori manualmente dalla riga di comando. Per esempio,

docker run --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 busybox echo This is my message. 

invierà un messaggio di log al server Graylog2 attivo sulla macchina locale, che ha un ascoltatore di ingresso UDP configurato sulla porta 12201.

Ora, voglio usare le stesse opzioni di registrazione con cui docker-compose , secondo i documenti, should be possible in principle. Tuttavia, la documentazione non menzionano alcun formati di log ma json-file, syslog e none e quando includo qualcosa come

my-container: 
    container_name: ... 
    build: ... 
    ports: ... 
    log_driver: "gelf" 
    log_opt: 
    gelf-address: "udp://localhost:12201" 

nel mio file docker-compose.yml poi docker-compose up fallisce con:

Traceback (most recent call last): 
    File "<string>", line 3, in <module> 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 39, in main 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 27, in dispatch 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 24, in dispatch 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 59, in perform_command 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 495, in up 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.project", line 265, in up 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 369, in execute_convergence_plan 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 270, in create_container 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 643, in _get_container_create_options 
    File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 656, in _get_container_host_config 
    File "/code/build/docker-compose/out00-PYZ.pyz/docker.utils.types", line 27, in __init__ 
ValueError: LogConfig.type must be one of (json-file, syslog, none) 

Per la cronaca, questo era su docker-compose 1.4.0 e docker 1.8.1, compilare d12ea79.

Apparentemente, Docker e docker-compose non sono allo stesso livello di implementazione qui. Ho appena scoperto che questo è già stato risolto e incluso nello Master branch su Github, vedere https://github.com/docker/compose/issues/1869 e https://github.com/docker/docker-py/pull/724.

Esiste un modo per reinstallare la finestra mobile-compose dal ramo master corrente o per aggiungerlo manualmente a un'installazione esistente? Non riesco a trovare il file in cui il commit va ovunque sul mio host ...

+1

Questo problema viene risolto in 'docker-py == 1.4.0' e verrà risolto nella versione' docker-compose == 1.5.0' – dnephin

+1

Sì, l'ho visto anch'io. Tuttavia, 'docker-compose == 1.5.0' sarà rilasciato il [13/10/2015] (https://github.com/docker/compose/wiki/1.5.0-Milestone-Project-Page), quindi Probabilmente dovrò aspettare un po '.Ho appena provato a installare l'ultimo 'master' da Github tramite' pip install -U https: // github.com/docker/docker-py.git' e quindi 'docker-compose --version' fornisce l'output corretto' 1.5 0,0-dev'. Tuttavia, tutti i comandi di composizione del docker come 'docker-compose up' falliscono con' raise ValueError ("Nessun oggetto JSON può essere decodificato") ValueError: Nessun oggetto JSON può essere decodificato. Qualche idea su questo? – Dirk

+0

Dovrebbe essere corretto sul master ora – dnephin

risposta

9

Il problema è stato risolto.

ho appena testato la registrazione di graylog2 utilizzando finestra mobile-comporre 1.5.0rc2

Si può provare con questo esempio funzionante YAML:

example: 
container_name: example 
image: debian:wheezy 
    command: /bin/sh -c "while true; do date && echo "hello"; sleep 1; done" 
ports: 
    - "1234:1234" 
log_driver: "gelf" 
log_opt: 
    gelf-address: "udp://graylog.example.com:12201" 
    gelf-tag: "first-logs" 

Quando contenitore inizia c'è un avviso

example | WARNING: no logs are available with the 'gelf' log driver

Ma non sembra influire sul fatto che i messaggi vengano inviati a Graylog.

+0

Bello. Ora funziona anche correttamente come descritto nella domanda. – Dirk

+1

Questo avviso è incluso poiché l'output che si sta visualizzando viene generato dalla stessa origine di "registri docker" che non è disponibile per i driver di registrazione off-box. – allingeek

2

Per i servizi Docker-Compose v2, la sintassi è cambiato un po ', è tutto sotto una nuova sezione "registrazione" ora:

version: "2" 

services: 
    example: 
    container_name: example 
    image: debian:wheezy 
    command: /bin/sh -c "while true; do date && echo "hello"; sleep 1; done" 
    ports: 
     - "1234:1234" 
    logging: 
     driver: "gelf" 
     options: 
     gelf-address: "udp://graylog.example.com:12201" 
     tag: "first-logs" 

Una nota importante: L'indirizzo per gelf-address deve essere l'indirizzo esterno di il server, poiché Docker risolve questo indirizzo attraverso la rete dell'host.

Problemi correlati