Python ведение журнала из нескольких Docker контейнеров обратно на локальный хост - PullRequest
0 голосов
/ 15 января 2020

У меня есть сценарий, в котором я создал эмулятор в Python3 тестового узла, который можно запустить в контейнере Docker.

Таким образом, на одном сервере с Ubuntu 18.04 у меня есть 50 ~ 100 контейнеров, каждый из которых эмулирует узел и выполняет основную задачу c передачи файлов.

Каждый контейнер выполняет Python3 приложение, которое эмулирует узел. Для ведения журнала у меня есть следующее:

import logging

logging.basicConfig (format='%(asctime)s : %(message)s', filename='test.log', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG)

Таким образом, в основном, выполнив:

logging.error ("File transfer failed")

Я получаю файл журнала test.log с надлежащим образом отформатированной отметкой времени и сообщением об ошибке.

Проблема заключается в том, что это происходит внутри контейнера, и в этом отношении, внутри 50 ~ 100 контейнеров.

Есть ли способ заставить все контейнеры регистрироваться в одном файле журнала на локальном хосте, где существуют контейнеры? Я смотрел на обработчики журналов в Python, но, кажется, не могу обернуться, когда вылезал из контейнера и записывал в файл на локальном хосте.

Ответы [ 2 ]

1 голос
/ 15 января 2020

Как насчет использования тома docker. docker тома могут использоваться для сохранения данных во внешней файловой системе. Таким образом, ваши контейнеры будут иметь доступ для чтения и записи на ваш локальный жесткий диск вместо создания файлов журналов внутри самих контейнеров.

Но вам, возможно, придется найти способ избежать условий гонки, чтобы написать в общее местоположение.

Читайте о docker томах в их официальных документах . Это довольно просто.

0 голосов
/ 15 января 2020

Идиома по умолчанию для ведения журнала Docker заключается в записи на stdout. Так что просто не указывайте файл, когда вы делаете basicConfig(), и журналы будут go там по умолчанию.

Затем вы можете получить доступ к этим журналам с помощью команды docker logs.

...