2015-09-09 33 views
9

to the official Docker docs अनुसार, यह जो वह स्वरूप है जैसे द्वारा समझा जाता है GELF messages के रूप में एक कंटेनर की stdout और stderr उत्पादन प्राप्त करने के लिए संभव है Graylog/Graylog2 और logstashका उपयोग डोकर-रचना GELF लॉग ड्राइवर के साथ

यह ठीक काम करता है जब मैं कमांड लाइन से मैन्युअल रूप से अपने कंटेनर चलाता हूं। उदाहरण के लिए,

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

मेरी Graylog2 सर्वर के लिए एक लॉग संदेश भेज देंगे स्थानीय होस्ट जो एक यूडीपी इनपुट श्रोता बंदरगाह पर कॉन्फ़िगर किया गया 12201.

अब, मैं docker-compose के साथ एक ही लॉग विकल्पों का उपयोग करना चाहते है पर चल रहा है जो , दस्तावेज़ों के अनुसार, 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-file, syslog और none और जब मैं अपने docker-compose.yml फ़ाइल में

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

की तरह कुछ में शामिल हैं तो docker-compose up के साथ विफल उल्लेख नहीं है डॉकर-कंपोज़ 1.4.0 और डॉकर 1.8.1 पर था, डी 12ea79 बनाएं।

जाहिर है, डॉकर और डॉकर-कंपोज़ कार्यान्वयन के समान स्तर पर नहीं हैं। मैंने पाया कि यह पहले ही हल हो चुका है और Master branch में गीथब पर शामिल है, https://github.com/docker/compose/issues/1869 और https://github.com/docker/docker-py/pull/724 देखें।

क्या मौजूदा मास्टर शाखा से या तो डॉकर-कंपोज़ को फिर से स्थापित करने या इसे मौजूदा स्थापना में मैन्युअल रूप से जोड़ने का कोई तरीका है? मुझे वह फ़ाइल नहीं मिली जहां मेरा होस्ट पर प्रतिबद्धता कहीं भी जाती है ...

+1

यह 'डॉकर-पीई == 1.4.0' में तय किया जा रहा है और इसे 'डॉकर-कंपोज़ == 1.5.0' रिलीज – dnephin

+1

हाँ में तय किया जाएगा, मैंने यह भी देखा। हालांकि, 'डॉकर-कंपोज़ == 1.5.0' को [10/13/2015] पर जारी किया जाएगा (https://github.com/docker/compose/wiki/1.5.0- मिलिस्टोन- प्रोजेक्ट- पेज), इसलिए मुझे शायद थोड़ा इंतजार करना पड़ेगा।मैंने अभी 'पीआईपी इंस्टॉल-यू https: // github.com/docker/docker-py.git' के माध्यम से गीथब से नवीनतम' मास्टर 'स्थापित करने का प्रयास किया और फिर' डॉकर-कंपोज़ - वर्जन 'सही आउटपुट '1.5 देता है .0-dev'। फिर भी, 'डॉकर-कंपोज़ अप' जैसे सभी डॉकर-कंपोज़ कमांड 'वैल्यूएरर को बढ़ाएं' ("कोई JSON ऑब्जेक्ट डीकोड नहीं किया जा सकता है") ValueError: कोई JSON ऑब्जेक्ट डीकोड नहीं किया जा सकता है। इस पर कोई विचार? – Dirk

+0

इसे मास्टर पर अब तय किया जाना चाहिए – dnephin

उत्तर

9

समस्या ठीक कर दी गई है।

मैं बस का उपयोग कर graylog2 करने के लिए लॉगिंग का परीक्षण किया है डोकर-रचना 1.5.0rc2

आप इस काम कर उदाहरण 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" 

जब कंटेनर शुरू होता है एक चेतावनी

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

है

लेकिन ऐसा लगता है कि संदेश ग्रेग्लॉग पर भेजे गए हैं।

+0

अच्छा। प्रश्न में वर्णित अनुसार अब सुचारू रूप से भी काम करता है। – 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 की जरूरत के लिए पता की बाहरी पता होना करने के लिए सर्वर, जैसे डॉकर होस्ट के नेटवर्क के माध्यम से इस पते को हल करता है।

संबंधित मुद्दे