2015-09-09 15 views
9

Zgodnie z to the official Docker docs, możliwe jest uzyskanie wyjścia stdout i stderr pojemnika jako GELF messages, co jest formatem zrozumiałym na przykład przez. Graylog/Graylog2 i logstash.Korzystanie z funkcji dokowania z kierownikiem dziennika GELF

Działa to dobrze, gdy uruchamiam moje kontenery ręcznie z wiersza poleceń. Na przykład,

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

wyśle ​​wiadomość dziennika do mojego serwera Graylog2 działa na localhost, który ma UDP wejściowego słuchacza skonfigurowany na porcie 12201.

Teraz chcę użyć tych samych opcji dziennika z docker-compose który , zgodnie z dokumentami, should be possible in principle. Jednak docs nie wspomina o żadnych formatów dziennika, ale json-file, syslog i none i kiedy to coś podobnego

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

w moim pliku docker-compose.yml następnie docker-compose up nie powiedzie się z:

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) 

Dla przypomnienia, to był na docker-compose 1.4.0 i docker 1.8.1, build d12ea79.

Wygląda na to, że Docker i docker-compose nie znajdują się na tym samym poziomie implementacji. Właśnie stwierdziłem, że zostało to już rozwiązane i zawarte w Master branch na Github, zobacz https://github.com/docker/compose/issues/1869 i https://github.com/docker/docker-py/pull/724.

Czy istnieje jakakolwiek metoda ponownego zainstalowania modułu dokowanego z bieżącego katalogu głównego lub ręcznego dodania go do istniejącej instalacji? Nie mogłem znaleźć pliku, w którym zatwierdzenie trafia do dowolnego miejsca na moim hoście ...

+1

Zostało to naprawione w 'docker-py == 1.4.0' i zostanie naprawione w' docker-compose == 1.5.0' release – dnephin

+1

Tak, też to zobaczyłem. Jednak "docker-compose == 1.5.0" zostanie wydany w dniu [10/13/2015] (https://github.com/docker/compose/wiki/1.5.0-Milestone-Project-Page), więc Prawdopodobnie będę musiał trochę poczekać.Właśnie próbowałem zainstalować najnowszy 'master' z Github poprzez' pip install -U https: // github.com/docker/docker-py.git', a następnie 'docker-compose --version' podaje poprawne wyjście' 1.5 .0-dev'. Mimo to, wszystkie komendy do tworzenia dokerów, takie jak 'docker-compose up', nie działają z' raise ValueError ("Nie można zdekodować żadnego obiektu JSON") ValueError: Nie można zdekodować obiektu JSON'. Czy masz jakiś pomysł? – Dirk

+0

To powinno być naprawione na master teraz – dnephin

Odpowiedz

9

Problem został naprawiony.

właśnie testowane rejestrowanie do graylog2 użyciu docker-komponować 1.5.0rc2

Można spróbować z tym pracuje np 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" 

Kiedy pojemnik zaczyna tam jest ostrzeżeniem

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

Wygląda jednak na to, że wiadomości nie są wysyłane na graaloga.

+0

Nice. Teraz działa również sprawnie, jak opisano w pytaniu. – Dirk

+1

To ostrzeżenie jest uwzględniane, ponieważ wyświetlane dane wyjściowe są generowane z tego samego źródła co "dzienniki dokowane", które są niedostępne dla sterowników rejestrowania poza skrzynką. – allingeek

2

przypadku usług Döcker-komponować v2, składnia zmieniła się nieznacznie, to wszystko w ramach nowej sekcji „Logowanie” teraz:

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" 

Jedna ważna uwaga: adres dla gelf-address musi być adres zewnętrzny serwer, tak jak Docker rozwiązuje ten adres przez sieć hosta.