Найти в Дзене
DeSoft.ru

Система мониторинга логов Docker контейнеров Dozzle

Для централизованного сбора, управления и аналитики логов существуют серьезные решения, целые стеки, такие как PLG (Promtail, Loki, Grafana) или EFK / ELK (Elasticsearch, Kibana, Fluentd / Logstash). Однако, всегда стоит вопрос в целесообразности их применения, а также действительная необходимость в такой обширной функциональности в относительно небольших проектах. 💻 Мне зачастую не хватало простого и быстрого решения для элементарного просмотра логов с нескольких совместно трудящихся сервисов. И такое решение нашлось - легковесная self-hosted система мониторинга логов из Docker контейнеров - dozzle. Одиночный контейнер с доступом к docker.sock и все логи начинают сыпаться в кучу в реальном времени с удобным представлением в едином окне веб приложения. 📌 Стоит отметить, что возможности собирать логи из файлов нет - только из sysout syserr потоков контейнеров по аналогии с командой docker logs. 📌 Хранилища логов тоже нет, поэтому проанализировать полную историю не получится. Генериру
Оглавление

Для централизованного сбора, управления и аналитики логов существуют серьезные решения, целые стеки, такие как PLG (Promtail, Loki, Grafana) или EFK / ELK (Elasticsearch, Kibana, Fluentd / Logstash). Однако, всегда стоит вопрос в целесообразности их применения, а также действительная необходимость в такой обширной функциональности в относительно небольших проектах.

💻 Мне зачастую не хватало простого и быстрого решения для элементарного просмотра логов с нескольких совместно трудящихся сервисов. И такое решение нашлось - легковесная self-hosted система мониторинга логов из Docker контейнеров - dozzle.

Одиночный контейнер с доступом к docker.sock и все логи начинают сыпаться в кучу в реальном времени с удобным представлением в едином окне веб приложения.

-2

📌 Стоит отметить, что возможности собирать логи из файлов нет - только из sysout syserr потоков контейнеров по аналогии с командой docker logs.

📌 Хранилища логов тоже нет, поэтому проанализировать полную историю не получится.

🔸 Готовим пользователя

Генерируем параметры доступа для базовой аутентификации в dozzle

docker run -it --rm amir20/dozzle generate testuser --password testpassword --email test@test.test --name "Test User" > data/users.yml

Получаем в выходном файле структуру вида

users:
testuser:
email: test@test.test
name: Test User
password: $2a$11$GstVlSugO7SmT0EV/RkU2ubm2qhXfuC1lWGd8FYIrV/Lg2cjKnro.
filter: ""

где password - bcrypt hash от пароля.

🔸 Заполняем compose

Итоговый compose будет выглядеть следующим образом

services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${HOME}/services/dozzle/data:/data
ports:
- 8080:8080
environment:
DOZZLE_AUTH_PROVIDER: simple
DOZZLE_ENABLE_ACTIONS: true
DOZZLE_NO_ANALYTICS: true
healthcheck:
test: ["CMD", "/dozzle", "healthcheck"]
interval: 3s
timeout: 30s
retries: 5
start_period: 30s

${HOME}/services/dozzle/data - каталог с созданным ранее users.yml

DOZZLE_AUTH_PROVIDER: simple - базовая аутентификация

DOZZLE_ENABLE_ACTIONS: true - включаем кнопки управления контейнерами (старт, стоп, перезапуск) в ui

DOZZLE_NO_ANALYTICS: true - отключаем сбор и отправку аналитики, потому что

Dozzle collects anonymous user configurations using a simple beacon written in Go.
Dozzle sends anonymous data to DigitalOcean, where it is written to a flat file for processing.

🔸 Запускаем

docker compose up -d

Идем в веб приложение на 8080 и наблюдаем статистику использования ресурсов, ленту логов с поиском и даже сплит-окна.

-3
-4

🔎 Дополнительные возможности

Больше полезной информации в моем Telegram-канале.