5.8 KiB
5.8 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-бота
- @BotFather →
/newbot→ скопируйте токен - Добавьте бота в чат, напишите любое сообщение
- Получите
chat_id:https://api.telegram.org/bot<TOKEN>/getUpdates
3. Создайте бота в MAX (опционально)
- Зайдите на dev.max.ru → создайте бота → скопируйте токен
- Получите
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
- Stacks → Add Stack
- Имя:
mikrotik-monitor - Web editor → вставьте содержимое
stack.yml - Заполните переменные окружения
- 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 (замените на прокси если заблокирован) |
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)