Rattle — лёгкий инструмент для мониторинга логов Docker, который помогает оперативно
получать важные ошибки в Telegram до того, как о них напомнит клиент. Всё запускается через Docker Compose — без дополнительной инфраструктуры и сложной интеграции.

Rattle — Telegram уведомления из Docker
Rattle — Telegram уведомления из Docker

? Зачем нужен Rattle

Инструмент создан для разработчиков небольших проектов — когда нужно быстро получать важные ошибки и сообщения из Docker-контейнеров без развёртывания сложной инфраструктуры.

Всё, что требуется — подключить Telegram-бота и указать, какие логи отслеживать. Подписка на события, исключения, фильтрация — всё управляется через встроенное Mini App-приложение в Telegram.

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


? Как я к этому пришёл

Во время разработки своего проекта на dev-сервере я сталкивался с повторяющейся ситуацией: контейнер падал, ошибки уходили в логи, а узнавал о них слишком поздно — когда проблема уже дошла до пользователей.

Инструменты вроде Sentry, ELK, Prometheus не подходили: для небольшого проекта их настройка и сопровождение казались избыточными. Нужен был простой и надёжный способ отслеживать ошибки с минимальными зависимостями, с уведомлениями там, где я их точно увижу — в Telegram.

Так появилась идея создать свой лог-сканер, который подключается к контейнерам Docker, отслеживает нужные события в логах и сразу отправляет уведомления в Telegram-чат.


? Архитектура и стек

Архитектура Rattle максимально простая и легко разворачивается с помощью docker-compose. Каждый компонент работает в своём Docker-контейнере и взаимодействует с другими через внутреннюю Docker-сеть.

Общая схема взаимодействия компонентов
Общая схема взаимодействия компонентов

Состав системы:

  • ? Log Scanner (на Go) — читает логи всех отфильтрованных Docker-контейнеров и проверяет их на совпадение с заданными шаблонами. При срабатывании условия отправляет сообщение в указанные Telegram-чаты.

  • ?️‍♂️ Watcher — раз в 15 секунд проверяет обновления из базы данных (шаблоны, исключения, настройки) и применяет их к логике сканера.

  • ? Fiber API (на Go) — backend-сервер, обеспечивающий управление шаблонами логов, пользователями, фильтрацию контейнеров и чатов. Используется как API для Telegram Mini App.

  • ? Telegram Mini App (на Vue) — интерфейс для пользователей. Позволяет управлять подписками, просматривать список контейнеров и редактировать шаблоны.

  • ?️ PostgreSQL — хранилище всех данных: шаблоны логов, исключения для контейнеров и так далее.

  • ? Docker-контейнеры — отфильтрованные контейнеры, откуда собираются логи через stdout

Система не требует ручной настройки связей между сервисами — всё поднимается одной командой и готово к работе за несколько минут.


? Как работает на практике

Rattle успел принести пользу ещё до того, как я закончил эту статью.

Пока тестировал и запускал на сервере в процессе разработки, получил уведомление в Telegram, что сервис Dokploy внезапно перестал видеть свою базу данных. В логах всплыло:

Main Server Error [Error: getaddrinfo ENOTFOUND dokploy-postgres]
Пример сообщений, отправляемых в Telegram
Пример сообщений, отправляемых в Telegram

Без Rattle ошибка осталась бы незамеченной до момента, когда сервис уже отказал бы в работе.

⚙️ Настройка через Mini App

Rattle поставляется с собственным Telegram Mini App — компактное веб-приложение внутри Telegram, через которое можно управлять всеми настройками.

Ниже — пример настройки:

? 1. Добавление шаблона логов

Добавление шаблона логов
Добавление шаблона логов

В моём случае база использует русскую локализацию, поэтому я добавил паттерн со словом "ошибка". Шаблоны пишутся на Go-совместимом регулярном выражении (Golang regex).

? 2. Выбор контейнеров

Выбор контейнеров
Выбор контейнеров

Можно выбрать, какие контейнеры отслеживать для этого шаблона — например, только dokploy, или все без исключения.

? Что происходит дальше?

  • Сканер читает stdout всех запущенных контейнеров.

  • Если строка в логе совпадает с regex-шаблоном — формируется событие.

  • Telegram-бот отправляет уведомление в нужный чат.

  • Узнаёте о сбое прежде, чем он приведёт к последствиям.


⚖️ Лёгкая альтернатива тяжёлым инструментам

Инструменты вроде Sentry, ELK, Prometheus решают сложные и масштабные задачи. Они отлично подходят для продвинутой аналитики, мониторинга метрик и других задач — особенно в крупных проектах и командах.

Но когда вы работаете над небольшим сервисом или pet-проектом, хочется простого способа быстро узнавать об ошибках — без развёртывания тяжёлой инфраструктуры.

Rattle хорошо подходит для небольших команд, которым важно своевременно видеть сбои в логах и реагировать на них до того, как начнут поступать жалобы в поддержку.


? Полезные сценарии использования

Rattle не ограничивается только отслеживанием ошибок. Его можно настроить под самые разные типы событий:

? 1. Ошибки и исключения
Классический пример — лог-сообщения с ключевыми словами вроде error, panic, fatal. Несколько регулярных выражений встроены по умолчанию:

defaultErrorPatterns := []string{
	`(?i)\berror\b`,
	`(?i)\bpanic\b`,
	`(?i)\bfailed\b`,
	`(?i)\bexception\b`,
	`(?i)\btraceback\b`,
	`(?i)\bunhandledpromiserejection\b`,
	`(?i)\bsegmentation fault\b`,
}

✅ 2. Успешный деплой или запуск
Rattle можно использовать и для позитивных уведомлений — например, при успешной инициализации. О запуске или остановке контейнера он уведомит автоматически.

? 3. Исключения
Чтобы не получать лишнего, можно:

  • Добавить исключающие шаблоны (тип exclude).

  • Указать только нужные контейнеры через whitelist. Это удобно, если в логах много "шума" от nginx, healthcheck`ов и прочего.

? 4. Совместная работа
Бота можно добавить в командную Telegram-группу — и тогда вся команда будет получать уведомления одновременно. Это особенно удобно для небольших проектов: всё в одном чате, без сложной настройки маршрутов и ролей. ID обычного и группового чата можно узнать через специальные боты, либо через web.telegram.org

Пример настройки чатов
Пример настройки чатов

? Предварительная подготовка

Прежде чем запускать Rattle, убедитесь, что у вас есть:
✅ 1. Домен и HTTPS

  • Зарегистрированный домен, направленный на ваш сервер (например, rattle.example.com).

  • Настроенный SSL-сертификат — Telegram Mini App работает только по HTTPS (подойдёт любой, можно Let's Encrypt).

Если вы используете Traefik или Nginx, позаботьтесь о том, чтобы сертификат был доступен на момент открытия Mini App.

? 2. Создание Telegram-бота

  1. Откройте @BotFather.

  2. Отправьте команду /newbot.

  3. Следуйте инструкциям и получите токен.

  4. Сохраните токен в .env:

TELEGRAM_BOT_TOKEN=your_bot_token

? 3. Подключение Mini App

  • /mybotsВыберите своего бота

  • Bot SettingsConfigure Mini AppEdit Mini App URL → Укажите: https://rattle.example.com

  • Bot SettingsMenu ButtonEdit menu button URL → Укажите: https://rattle.example.com ✅ Теперь Telegram покажет кнопку, открывающую интерфейс в чате с ботом.


? Установка и запуск

Начать работу с Rattle можно буквально за пару минут. Все образы уже опубликованы в Github Registry, поэтому достаточно docker-compose.yml и файла .env.

? 1. Скачайте docker-compose.yml
Вы можете использовать готовый файл из репозитория:

curl -O https://raw.githubusercontent.com/rattle-bot/rattle/main/docker-compose.yml

Или клонировать весь проект:

git clone https://github.com/rattle-bot/rattle.git
cd rattle

⚙️ 2. Создайте .env

На основе шаблона .env.example укажите нужные параметры:

curl -O https://raw.githubusercontent.com/rattle-bot/rattle/main/.env.example
mv .env.example .env

Минимально необходимы следующие параметры:

TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
TELEGRAM_CHAT_IDS=123456789
VITE_PUBLIC_API_HOST=https://rattle.example.com/api

Остальные переменные уже заполнены значениями по умолчанию — их можно оставить без изменений, если требуется.

Полный список переменных можно посмотреть в .env.example.

? 3. Запустите всё одной командой

docker-compose up -d

Система поднимется автоматически, и уже через несколько минут вы сможете открыть Mini App в Telegram, перейти к настройке шаблонов и начать получать уведомления.

Если вы хотите использовать только лог-сканер без интерфейса и API — в репозитории есть облегчённый файл: docker-compose.light.yml.

? Что дальше?

Rattle уже решает главную задачу — помогает узнавать об ошибках в логах Docker до того, как они становятся массовой проблемой. Этого достаточно, чтобы пользоваться им прямо сейчас.

В дальнейшем планируется развитие функциональности, ориентированной на практические сценарии использования. Среди возможных направлений:

  • Простая статистика по количеству событий, шаблонам, контейнерам.

  • Анализ последних логов и предложение пользователю наиболее популярных фраз в качестве шаблонов.

  • Добавить возможность в Mini App вставить лог и проверить, какие шаблоны на него сработают (например, для отладки).

  • Экспорт настроек и шаблонов — для удобной миграции между серверами.

Проект Rattle открыт и доступен на Github. Ссылка на репозиторий: github.com/rattle-bot/rattle.

Если идея оказалась полезной — ставьте ⭐, пробуйте в своих проектах, создавайте issues. Ваше мнение поможет сделать инструмент ещё удобнее.

Комментарии (4)


  1. Naum12345678
    25.06.2025 07:55

    Спасибо за пошаговый гайд!


  1. Nowayrage
    25.06.2025 07:55

    Здравствуйте, а можно узнать, почему, например, fluent bit не подошёл?


    1. ilyxenc Автор
      25.06.2025 07:55

      Здравствуйте! Мне нужно было быстрое и простое решение с уведомлениями в Telegram. Fluent Bit не предназначен для прямых уведомлений. Чтобы реализовать такое, нужно дополнительно настраивать стек. Для моей задачи это оказалось избыточным