# 🔍 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 и создайте пользователя с минимальными правами: ```routeros /ip service enable api /user group add name=monitor policy=api,read,test /user add name=monitor password=StrongPass group=monitor ``` Добавьте адреса для мониторинга в address-list: ```routeros /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](https://t.me/BotFather) → `/newbot` → скопируйте токен 2. Добавьте бота в чат, напишите любое сообщение 3. Получите `chat_id`: ``` https://api.telegram.org/bot/getUpdates ``` ### 3. Создайте бота в MAX (опционально) 1. Зайдите на [dev.max.ru](https://dev.max.ru) → создайте бота → скопируйте токен 2. Получите `chat_id` списка чатов бота: ``` https://platform-api.max.ru/chats?access_token= ``` ### 4. Соберите Docker-образ на сервере ```bash git clone https://gitea.example.com/yourname/mikrotik-monitor.git cd mikrotik-monitor docker build -t mikrotik-monitor:latest . ``` ### 5. Задеплойте через Portainer 1. **Stacks** → **Add 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` | Временная зона | --- ## Обновление ```bash cd /opt/mikrotik-monitor git pull docker build -t mikrotik-monitor:latest . ``` Затем в Portainer: **Stacks → mikrotik-monitor → Update the stack**. --- ## Просмотр логов ```bash 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) ```