Мониторинг Telegram-ботов: полное руководство
Зачем нужен мониторинг
Telegram-бот в продакшне — это сервис, от которого зависят пользователи. Без мониторинга вы узнаете о падении бота только когда пользователи начнут жаловаться. А это может быть через часы или дни.
Мониторинг решает три задачи:
- Доступность — бот запущен и отвечает на запросы
- Производительность — время ответа, потребление ресурсов
- Ошибки — отлов и уведомление о сбоях
Уровень 1: Базовый мониторинг через systemd
Если бот запущен как systemd-сервис, вы уже получаете базовый мониторинг:
# Статус бота
systemctl status mybot
# Логи за последний час
journalctl -u mybot --since "1 hour ago"
# Автоперезапуск при падении (в файле сервиса)
Restart=always
RestartSec=5
Это минимум, но у него есть ограничения:
- Нет уведомлений о падении
- Нет метрик (CPU, RAM, latency)
- Нет истории инцидентов
Уровень 2: Health checks
Добавьте HTTP-эндпоинт /health в бота:
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
// Проверяем подключение к БД
if err := db.Ping(); err != nil {
http.Error(w, "db down", 503)
return
}
w.WriteHeader(200)
w.Write([]byte("ok"))
})
Теперь можно мониторить HTTP-эндпоинт внешним сервисом (UptimeRobot, Healthchecks.io) и получать уведомления при недоступности.
Уровень 3: Метрики и алерты
Prometheus + Grafana
Стандартный стек для серьёзного мониторинга:
- Бот экспортирует метрики в формате Prometheus
- Prometheus собирает метрики каждые 15 секунд
- Grafana визуализирует дашборды
- Alertmanager отправляет уведомления
Полезные метрики для Telegram-бота:
bot_messages_total— количество обработанных сообщенийbot_errors_total— количество ошибокbot_response_duration_seconds— время ответаbot_active_users— активные пользователиprocess_resident_memory_bytes— потребление RAM
Настройка алертов
# prometheus/rules.yml
groups:
- name: bot-alerts
rules:
- alert: BotDown
expr: up{job="mybot"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Bot is down"
- alert: HighErrorRate
expr: rate(bot_errors_total[5m]) > 0.1
for: 5m
labels:
severity: warning
Отправка алертов в Telegram
Настройте Alertmanager для отправки уведомлений в Telegram через webhook:
# alertmanager.yml
receivers:
- name: telegram
webhook_configs:
- url: 'http://localhost:9087/alert'
Уровень 4: Централизованные логи
Для ботов в продакшне важно иметь централизованное хранилище логов:
Структурированное логирование
Используйте JSON-логи вместо plain text:
{"level":"error","msg":"failed to send message","chat_id":12345,"error":"timeout","ts":"2026-03-07T12:00:00Z"}
ELK Stack (Elasticsearch + Logstash + Kibana)
Тяжёлое решение для больших проектов. Позволяет:
- Полнотекстовый поиск по логам
- Визуализацию трендов ошибок
- Корреляцию событий
Loki + Grafana
Лёгкая альтернатива ELK. Работает с теми же Grafana-дашбордами, что и Prometheus.
Мониторинг в BotOps
BotOps предлагает мониторинг из коробки, без необходимости настраивать Prometheus, Grafana или ELK:
- Дашборд — CPU, RAM, uptime каждого бота в реальном времени
- Логи — просмотр с фильтрацией прямо в веб-интерфейсе
- Алерты — уведомления в Telegram при падении или высоком потреблении ресурсов
- Health checks — автоматическая проверка доступности
- История — все инциденты и перезапуски в аудит-логе
Всё это настраивается за минуту при деплое бота.
Чеклист мониторинга
Минимальный набор для продакшн-бота:
- [ ] Systemd с
Restart=always - [ ] Health check эндпоинт
- [ ] Уведомления о падении (Telegram/email)
- [ ] Мониторинг RAM и CPU
- [ ] Структурированные логи
- [ ] Регулярная проверка логов на ошибки
Заключение
Мониторинг — не опция, а необходимость для любого бота в продакшне. Начните с базового (systemd + health checks), затем добавляйте метрики и алерты по мере роста. Или используйте BotOps — и получите всё из коробки.
Попробуйте BotOps бесплатно — мониторинг включён в каждый план.