# 🔍 MikroTik Monitor Мониторинг IP-адресов через MikroTik API с уведомлениями в Telegram. Деплой через Portainer Stack — без лишних зависимостей. --- ## Как это работает ``` [Docker Container] │ ├─→ Подключается к MikroTik по API (порт 8728) │ └─→ Выполняет /ping для каждого IP из списка │ └─→ Если хост не отвечает N раз подряд → Telegram уведомление ``` **Логика уведомлений:** - 🔴 `DOWN` — хост не ответил `FAILURE_THRESHOLD` раз подряд - ✅ `UP` — хост восстановился после даунтайма - ⚠️ `ERROR` — не удалось подключиться к MikroTik --- ## Структура репозитория ``` . ├── Dockerfile # Образ с встроенным скриптом ├── monitor.py # Основной скрипт мониторинга ├── stack.yml # Portainer Stack ├── .env.example # Шаблон переменных окружения └── README.md ``` --- ## Быстрый старт ### 1. Настройте MikroTik ```routeros /ip service enable api /user group add name=monitor policy=api,read,test /user add name=monitor password=StrongPass group=monitor ``` ### 2. Создайте Telegram-бота 1. [@BotFather](https://t.me/BotFather) → `/newbot` → скопируйте токен 2. Добавьте бота в чат, напишите любое сообщение 3. Получите `chat_id`: ``` https://api.telegram.org/bot/getUpdates ``` ### 3. Соберите Docker-образ на сервере ```bash git clone https://gitea.example.com/yourname/mikrotik-monitor.git cd mikrotik-monitor docker build -t mikrotik-monitor:latest . ``` ### 4. Задеплойте через Portainer 1. **Stacks** → **Add Stack** 2. Имя: `mikrotik-monitor` 3. **Web editor** → вставьте содержимое `stack.yml` 4. Заполните переменные окружения 5. **Deploy the stack** --- ## Переменные окружения | Переменная | Обязательная | По умолчанию | Описание | |---|:---:|---|---| | `MIKROTIK_HOST` | ✅ | — | IP или hostname MikroTik | | `MIKROTIK_PORT` | | `8728` | API-порт (8729 для SSL) | | `MIKROTIK_USER` | ✅ | — | Логин | | `MIKROTIK_PASSWORD` | ✅ | — | Пароль | | `TELEGRAM_BOT_TOKEN` | ✅ | — | Токен бота от @BotFather | | `TELEGRAM_CHAT_ID` | ✅ | — | ID чата/группы/канала | | `IP_LIST` | ✅ | — | Адреса через запятую | | `CHECK_INTERVAL` | | `60` | Интервал проверок (сек) | | `PING_COUNT` | | `3` | Кол-во пинг-пакетов | | `PING_TIMEOUT_MS` | | `1000` | Таймаут пинга (мс) | | `FAILURE_THRESHOLD` | | `2` | Провалов подряд → DOWN | | `TZ` | | `Europe/Moscow` | Временная зона | ### Рекомендуемый способ: переменные Portainer В `stack.yml` используйте синтаксис `${VAR}`: ```yaml environment: - MIKROTIK_PASSWORD=${MIKROTIK_PASSWORD} - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} ``` Значения добавляйте в раздел **Environment variables** в UI Portainer — они хранятся зашифрованно. --- ## Обновление ```bash # Пересобрать образ cd mikrotik-monitor git pull docker build -t mikrotik-monitor:latest . ``` Затем в Portainer: **Stacks → mikrotik-monitor → Update the stack**. --- ## Просмотр логов ```bash docker logs -f mikrotik-monitor ``` Пример вывода: ``` 2024-01-15 14:30:00 [INFO] === MikroTik Monitor запущен === 2024-01-15 14:30:00 [INFO] Хосты: ['192.168.1.1', '192.168.1.10'] 2024-01-15 14:30:01 [INFO] Подключено к MikroTik 2024-01-15 14:30:02 [INFO] ✅ 192.168.1.1 avg-rtt=0.8 ms 2024-01-15 14:30:03 [WARNING] ❌ 192.168.1.10 не отвечает (1/2) ```