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

? Зачем нужен 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]

Без 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-бота
Откройте @BotFather.
Отправьте команду
/newbot
.Следуйте инструкциям и получите токен.
Сохраните токен в
.env
:
TELEGRAM_BOT_TOKEN=your_bot_token
? 3. Подключение Mini App
/mybots
→ Выберите своего бота→ Bot Settings → Configure Mini App → Edit Mini App URL → Укажите:
https://rattle.example.com
→ Bot Settings → Menu Button → Edit 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)
Nowayrage
25.06.2025 07:55Здравствуйте, а можно узнать, почему, например, fluent bit не подошёл?
ilyxenc Автор
25.06.2025 07:55Здравствуйте! Мне нужно было быстрое и простое решение с уведомлениями в Telegram. Fluent Bit не предназначен для прямых уведомлений. Чтобы реализовать такое, нужно дополнительно настраивать стек. Для моей задачи это оказалось избыточным
Naum12345678
Спасибо за пошаговый гайд!