2026-05-16 15:08:53 +07:00
2026-05-16 15:08:53 +07:00
2026-05-16 15:08:53 +07:00
2026-05-16 15:08:53 +07:00
2026-05-16 15:08:53 +07:00

🔍 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-бота

  1. @BotFather/newbot → скопируйте токен
  2. Добавьте бота в чат, напишите любое сообщение
  3. Получите 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

  1. StacksAdd 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}:

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)
S
Description
Контейнер для проверки внутренних ip адресов по списку Address list и отправкой в Telegram
Readme 171 KiB
Languages
Python 98.4%
Dockerfile 1.6%