152334434cd6f9c19dedfe8f9ce0a1bb720dc06a
🔍 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
/ip service enable api
/user group add name=monitor policy=api,read,test
/user add name=monitor password=StrongPass group=monitor
2. Создайте Telegram-бота
- @BotFather →
/newbot→ скопируйте токен - Добавьте бота в чат, напишите любое сообщение
- Получите
chat_id:https://api.telegram.org/bot<TOKEN>/getUpdates
3. Соберите Docker-образ на сервере
git clone https://gitea.example.com/yourname/mikrotik-monitor.git
cd mikrotik-monitor
docker build -t mikrotik-monitor:latest .
4. Задеплойте через Portainer
- Stacks → Add Stack
- Имя:
mikrotik-monitor - Web editor → вставьте содержимое
stack.yml - Заполните переменные окружения
- 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}:
environment:
- MIKROTIK_PASSWORD=${MIKROTIK_PASSWORD}
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
Значения добавляйте в раздел Environment variables в UI Portainer — они хранятся зашифрованно.
Обновление
# Пересобрать образ
cd mikrotik-monitor
git pull
docker build -t mikrotik-monitor:latest .
Затем в Portainer: Stacks → mikrotik-monitor → Update the stack.
Просмотр логов
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)
Description
Контейнер для проверки внутренних ip адресов по списку Address list и отправкой в Telegram
Languages
Python
98.4%
Dockerfile
1.6%