Пост

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

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

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

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

логи

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

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

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

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

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

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

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

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

🔸 Заполняем compose

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 - отключаем сбор и отправку аналитики, потому что

1
2
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.

🔸 Запускаем

1
docker compose up -d

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

сплит

сплит

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

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