Files

6.1 KiB

🔍 MikroTik Monitor

Мониторинг IP-адресов через MikroTik API с уведомлениями в Telegram и MAX (VK Teams).
Список адресов берётся прямо с MikroTik из /ip firewall address-list.
Деплой через Portainer Stack — без лишних зависимостей.


Как это работает

[Docker Container]
      │
      ├─→ Подключается к MikroTik по API (порт 8728)
      │         ├─→ Читает адреса из /ip firewall address-list
      │         └─→ Выполняет /ping для каждого IP
      │
      ├─→ Если хост не отвечает N раз подряд → уведомление DOWN
      └─→ Когда хост восстановился → уведомление UP

Уведомления отправляются параллельно в:

  • 📱 Telegram
  • 💬 MAX (VK Teams) — опционально

Логика уведомлений:

  • 🔴 DOWN — хост не ответил FAILURE_THRESHOLD раз подряд
  • UP — хост восстановился после даунтайма
  • ⚠️ ERROR — не удалось подключиться к MikroTik

Структура репозитория

.
├── Dockerfile       # Docker-образ
├── monitor.py       # Основной скрипт мониторинга
├── stack.yml        # Portainer Stack
├── .env.example     # Шаблон переменных окружения
└── README.md

Быстрый старт

1. Настройте MikroTik

Включите API и создайте пользователя с минимальными правами:

/ip service enable api

/user group add name=monitor policy=api,read,test
/user add name=monitor password=StrongPass group=monitor

Добавьте адреса для мониторинга в address-list:

/ip firewall address-list
add list=monitor address=192.168.1.1  comment="Роутер"
add list=monitor address=192.168.1.10 comment="Камера 1"

2. Создайте Telegram-бота

  1. @BotFather/newbot → скопируйте токен
  2. Добавьте бота в чат, напишите любое сообщение
  3. Получите chat_id:
    https://api.telegram.org/bot<TOKEN>/getUpdates
    

3. Создайте бота в MAX (опционально)

  1. Зайдите на dev.max.ru → создайте бота → скопируйте токен
  2. Получите chat_id списка чатов бота:
    https://platform-api.max.ru/chats?access_token=<TOKEN>
    

4. Соберите Docker-образ на сервере

git clone https://gitea.example.com/yourname/mikrotik-monitor.git
cd mikrotik-monitor
docker build -t mikrotik-monitor:latest .

5. Задеплойте через Portainer

  1. StacksAdd Stack
  2. Имя: mikrotik-monitor
  3. Web editor → вставьте содержимое stack.yml
  4. Заполните переменные окружения
  5. Deploy the stack

Переменные окружения

MikroTik

Переменная Обязательная По умолчанию Описание
MIKROTIK_HOST IP или hostname MikroTik
MIKROTIK_PORT 8728 API-порт (8729 для SSL)
MIKROTIK_USER Логин
MIKROTIK_PASSWORD Пароль
ADDRESS_LIST_NAME Имя списка в /ip firewall address-list

Telegram (опционально)

Переменная Обязательная По умолчанию Описание
TELEGRAM_BOT_TOKEN Токен бота от @BotFather
TELEGRAM_CHAT_ID ID чата/группы/канала
TELEGRAM_API_URL https://api.telegram.org URL API (замените на прокси если заблокирован)

Если TELEGRAM_BOT_TOKEN или TELEGRAM_CHAT_ID не заданы — уведомления в Telegram не отправляются.

MAX (VK Teams, опционально)

Переменная Обязательная По умолчанию Описание
MAX_BOT_TOKEN Токен бота MAX
MAX_CHAT_ID ID чата в MAX
MAX_API_URL https://platform-api.max.ru URL API MAX

Если MAX_BOT_TOKEN или MAX_CHAT_ID не заданы — уведомления в MAX не отправляются.

⚠️ Хотя бы один канал уведомлений должен быть настроен.

Мониторинг

Переменная Обязательная По умолчанию Описание
CHECK_INTERVAL 60 Интервал проверок (сек)
PING_COUNT 3 Кол-во пинг-пакетов
PING_TIMEOUT_MS 1000 Таймаут пинга (мс)
FAILURE_THRESHOLD 2 Провалов подряд → DOWN
TZ Europe/Moscow Временная зона

Обновление

cd /opt/mikrotik-monitor
git pull
docker build -t mikrotik-monitor:latest .

Затем в Portainer: Stacks → mikrotik-monitor → Update the stack.


Просмотр логов

docker logs -f mikrotik-monitor

Пример вывода:

2026-05-18 12:42:28 [INFO] === MikroTik Monitor запущен ===
2026-05-18 12:42:28 [INFO] Подключено к MikroTik
2026-05-18 12:42:28 [INFO] Адресов для проверки: 3
2026-05-18 12:42:28 [INFO] ✅  192.168.1.1 (Роутер)       avg-rtt=0.8 ms
2026-05-18 12:42:29 [INFO] ✅  192.168.1.10 (Камера 1)    avg-rtt=1.2 ms
2026-05-18 12:42:30 [WARNING] ❌  192.168.1.20 (Камера 2)  не отвечает (1/2)