2015-09-09 9 views
9

とドッカー-構成を用いて、例えばによって理解されるフォーマットであるGELF messagesとして容器のstdoutstderr出力を得ることが可能ですGraylog/Graylog2およびlogstash<a href="https://docs.docker.com/reference/logging/overview/">to the official Docker docs</a>よるGELFログドライバ

これは、コマンドラインから手動でコンテナを実行するとうまく動作します。例えば、

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

は12201.

は今、私はdocker-composeと同じログオプションを使用するポートで構成されたUDP入力リスナーを持っているローカルホスト上で実行されている私のGraylog2サーバーにログメッセージを送信しますました、ドキュメントによると、should be possible in principle。記録のために

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) 

、この:しかし、ドキュメントは、任意のログ形式が、json-filesyslognoneと私は私のdocker-compose.ymlファイルに

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

のようなものが含まれている場合、その後docker-compose upがで失敗を言及していませんdocker-compose 1.4.0およびdocke 1.8.1、build d12ea79にありました。

明らかに、Dockerとドッカーの作成は、ここでは同じ実装レベルではありません。私はちょうどそれが既に解明されており、Githubのに含まれていることがわかりました。 https://github.com/docker/compose/issues/1869https://github.com/docker/docker-py/pull/724を参照してください。

現在のMasterブランチからdocker-composeを再インストールする方法、またはこれを手動で既存のインストールに追加する方法はありますか?コミットがホスト上のどこにでもあるファイルを見つけることができませんでした...

+1

これは 'docker-py == 1.4.0'で修正され、' docker-compose == 1.5.0'リリースで修正されます – dnephin

+1

うん、私もそれを見ました。しかし、 'docker-compose == 1.5.0'は[10/13/2015](https://github.com/docker/compose/wiki/1.5.0-Milestone-Project-Page)でリリースされる予定です。私はおそらく少し待たなければならないでしょう。私はちょうど 'pip install -U https:// github.com/docker/docker-py.git'を介してGithubから最新の' master'をインストールしようとしました。そして 'docker-compose --version'は正しい出力を返します' 1.5 .0-dev'。それでも、すべてのようなコマンドをドッキングウィンドウは、作曲 'up'は' ValueErrorを送出し(「いいえJSONオブジェクトをデコードすることはできなかった」)とValueErrorで失敗ドッキングウィンドウ-作曲:いいえJSONオブジェクトがdecoded'であることができませんでした。 これに関するご意見はありますか? – Dirk

+0

それは、 – dnephin

答えて

9

この問題は修正されました。

私はちょうどあなたがこの実施例のYAMLで試すことができます1.5.0rc2

をドッキングウィンドウ-構成使用してgraylog2するロギングをテストしています

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" 

コンテナが起動すると警告

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

があります

しかし、メッセージがグライロッグに送信されることには影響していないようです。

+0

ニース。また、質問に記載されているようにスムーズに動作します。表示している出力をオフボックスログインするドライバでは使用できません 'ドッキングウィンドウのlogs'と同じソースから生成されるため、警告が含まれていることを – Dirk

+1

。 – allingeek

2

ドッカー-作曲v2のサービスの場合、構文は、それは今、すべての新しい「ログ」セクションの下ですが、少し変更されましたが:

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" 

一つの重要な注意事項:gelf-addressのアドレスが外部アドレスである必要がありますサーバーはDockerがホストのネットワークを通じてこのアドレスを解決するため、

関連する問題