Files
mikrotik-monitor/README.md
T

133 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔍 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<TOKEN>/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)
```