README.md

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 приходили всем участникам.

  1. Добавьте бота в группу
  2. Назначьте бота администратором группы (в настройках группы в MAX). Без этого бот не сможет читать сообщения.
  3. В группе напишите /start — бот зарегистрирует группу и скажет, какую команду выполнить в личке
  4. В личных сообщениях с ботом выполните /bind ID_группы (ID подскажет бот в группе)
  5. Бот подтвердит привязку и покажет токен для настройки Zabbix. Уведомления пойдут в группу.

Чтобы отвязать группу: /bind off

В группе бот отвечает на команды:

  • /status — статистика за сегодня
  • /heartbeat — статус heartbeat
  • /help — справка

Токен в группе не показывается. На обычные сообщения бот не реагирует.

Документация

Лицензия

MIT

Описание
Бот уведомлений мониторинга в Макс
Конвейеры
0 успешных
0 с ошибкой
Разработчики