2mon
Сервис для доставки уведомлений в мессенджер MAX.
Что делает
Принимает вебхуки от систем мониторинга (Zabbix, Prometheus, Grafana и других) и пересылает их в MAX — в личный чат с ботом. Пользователь регистрируется один раз, получает токен, подключает его в своей системе — и всё, уведомления пошли.
Возможности
- Приём вебхуков от Zabbix и других сервисов
- Heartbeat — мониторинг доступности Zabbix
- Единая очередь с соблюдением лимита MAX (30 сообщений/сек)
- Индивидуальные дневные лимиты для каждого пользователя
- Уведомление о превышении лимита
- Регистрация через бота в MAX —
/start - Повторная выдача токена —
/token - Проверка статистики —
/status - Статус heartbeat —
/heartbeat - Ежедневная рассылка статистики пользователям
- Админка для управления пользователями и лимитами
- Уведомления администратору о новых регистрациях
- Ежедневная статистика администратору с топом пользователей
Стек
| Компонент | Технология |
|---|---|
| Язык | Go |
| База данных | MongoDB |
| HTTP-роутер | chi |
| Очередь | chan + rate limiter |
| Cron | robfig/cron |
| Админка | HTML на серверном рендеринге |
Требования
- Docker и Docker Compose
- Токен бота MAX (получить в панели MAX для партнёров)
- Домен с настроенным HTTPS (для вебхуков MAX требуется SSL на 443 порту)
Быстрый старт
git clone https://gitflic.ru/project/piroman99/2mon.git
cd 2mon
cp .env.example .env
# заполнить .env своими данными
docker compose up -d
Деплой на сервер
Подробная инструкция по настройке HTTPS и Nginx: deploy/HTTPS.md
Кратко: 1. Установить Docker и Docker Compose 2. Склонировать репозиторий 3. Создать .env из .env.example 4. docker compose up -d 5. Настроить Nginx + Certbot (конфиг в deploy/nginx-2mon.conf) 6. Настроить вебхук в MAX на https://ваш-домен.ru/bot
Переменные окружения
| Переменная | Обязательно | По умолчанию | Описание |
|---|---|---|---|
MONGO_URI |
Да | — | Строка подключения к MongoDB |
MAX_BOT_TOKEN |
Да | — | Токен бота из панели MAX для партнёров |
ADMIN_PASSWORD |
Да | — | Пароль для входа в админку |
MAX_API_URL |
Нет | https://platform-api.max.ru |
URL API MAX |
RATE_LIMIT |
Нет | 30 |
Лимит сообщений в секунду |
QUEUE_SIZE |
Нет | 1000 |
Размер очереди сообщений |
PORT |
Нет | 8080 |
Порт сервера |
Подключение Zabbix
Полная инструкция по настройке Zabbix (webhook + heartbeat): ZABBIX.md
Кратко: 1. Зарегистрируйтесь у бота в MAX — команда /start 2. Получите токен — команда /token 3. В Zabbix создайте Media type Webhook (скрипт в ZABBIX.md) 4. Добавьте Media пользователю с токеном 5. Создайте Action для отправки уведомлений 6. Для heartbeat настройте Web scenario (см. ZABBIX.md)
Админка
Доступна по адресу /admin. После ввода пароля можно:
- Просматривать список пользователей
- Блокировать/разблокировать
- Изменять дневной лимит сообщений
- Видеть статус heartbeat
Первого администратора нужно создать вручную в MongoDB — установить is_admin: true.
API вебхуков
Отправка уведомления
POST /wh/{token}
Content-Type: application/json
{
"subject": "High CPU Load",
"message": "CPU usage is above 90%",
"severity": "critical"
}
Ответы
| Код | Значение |
|---|---|
| 200 | Сообщение поставлено в очередь |
| 404 | Неверный токен |
| 403 | Пользователь заблокирован |
| 429 | Дневной лимит превышен |
Команды бота в MAX
| Команда | Действие |
|---|---|
/start |
Регистрация и получение токена |
/token |
Повторно показать токен |
/status |
Статистика за сегодня |
/heartbeat |
Статус heartbeat |
/help |
Справка |
Работа в группах MAX
Бота можно добавить в группу, чтобы уведомления из Zabbix приходили всем участникам.
- Добавьте бота в группу
- Назначьте бота администратором группы (в настройках группы в MAX). Без этого бот не сможет читать сообщения.
- В группе напишите
/start— бот зарегистрирует группу и скажет, какую команду выполнить в личке - В личных сообщениях с ботом выполните
/bind ID_группы(ID подскажет бот в группе) - Бот подтвердит привязку и покажет токен для настройки Zabbix. Уведомления пойдут в группу.
Чтобы отвязать группу: /bind off
В группе бот отвечает на команды:
/status— статистика за сегодня/heartbeat— статус heartbeat/help— справка
Токен в группе не показывается. На обычные сообщения бот не реагирует.
Документация
- ARCHITECTURE.md — устройство сервиса
- API.md — эндпоинты и форматы
- DEVELOPMENT.md — разработка и добавление новых сервисов
- ZABBIX.md — настройка Zabbix
- deploy/HTTPS.md — настройка HTTPS
- SECURITY.md — результаты пентеста