Appearance
Сбор логов при использовании Docker (без оркестраторов)
Подсистема ЖУРНАЛЛИСТ может принимать журналы от контейнеров Docker без использования дополнительных инструментов (Fluentd, Kubernetes и др.). Достаточно настроить стандартные механизмы Docker и/или системного syslog.
Общие варианты
При использовании Docker доступны два базовых подхода:
- Использование logging driver syslog (рекомендуется)
- Использование stdout/stderr + системный syslog (rsyslog/syslog-ng)
Вариант 1. Logging driver syslog
Docker поддерживает встроенный драйвер логирования syslog, который напрямую отправляет stdout/stderr контейнера в сервер ЖУРНАЛЛИСТ.
Пример запуска контейнера
bash
docker run -d \
--name myapp \
--log-driver=syslog \
--log-opt syslog-address="tcp://journalist-server:514" \
--log-opt tag="myapp" \
myapp:latestВариант с UDP
bash
docker run -d \
--name myapp \
--log-driver=syslog \
--log-opt syslog-address="udp://journalist-server:514" \
--log-opt tag="myapp" \
myapp:latestДополнительные параметры
bash
--log-opt syslog-format=rfc5424
--log-opt syslog-facility=daemonЧто происходит
- Docker перехватывает stdout/stderr контейнера
- преобразует в syslog-сообщения
- отправляет напрямую в ЖУРНАЛЛИСТ
Плюсы
- простая настройка
- нет дополнительных компонентов
- минимальная задержка
Ограничения
- ограниченные возможности фильтрации
- нет буферизации
- зависимость от сети (особенно при UDP)
Вариант 2. Через системный syslog узла
Контейнеры пишут в stdout/stderr, а Docker сохраняет логи локально (обычно в JSON-файлы). Далее системный syslog (rsyslog / syslog-ng) отправляет их в ЖУРНАЛЛИСТ.
Где лежат логи Docker
bash
/var/lib/docker/containers/<container-id>/<container-id>-json.logПример rsyslog
bash
# /etc/rsyslog.d/docker.conf
input(type="imfile"
File="/var/lib/docker/containers/*/*.log"
Tag="docker"
Facility="local0")
*.* @@journalist-server:514Перезапуск:
bash
systemctl restart rsyslogПлюсы
- гибкая фильтрация
- буферизация
- централизованное управление
Минусы
- дополнительная настройка
- небольшая задержка
Вариант 3. Отправка логов из приложения
Если приложение внутри контейнера поддерживает syslog, оно может отправлять сообщения напрямую:
bash
echo "<14>Test message from container" > /dev/udp/journalist-server/514или через logger:
bash
logger -n journalist-server "App message"Рекомендации
Для большинства сценариев:
- использовать logging driver syslog (TCP)
- задавать осмысленные
tag(имя сервиса) - контролировать объем логов
Для production:
- использовать TCP
- при необходимости — промежуточный syslog (rsyslog)
- разделять потоки по сервисам
Когда этого достаточно
Подход без Compose/Swarm/K8s подходит для:
- отдельных серверов
- простых сервисов
- edge-узлов
- тестовых и пилотных внедрений
Когда стоит усложнять
Дополнительные инструменты (Fluentd, Kafka и др.) могут понадобиться, если:
- большой поток данных
- сложная маршрутизация
- необходимость буферизации
- мультикластерная архитектура
Краткий вывод
Даже при использовании «чистого» Docker можно организовать полноценную интеграцию с подсистемой ЖУРНАЛЛИСТ — за счет встроенного syslog-драйвера или системных средств Linux.
Это позволяет быстро подключить контейнеры к централизованной системе анализа журналов без усложнения архитектуры.