Мониторинг MikroTik через Grafana + Prometheus
Мониторинг MikroTik через Grafana + Prometheus + MKTXP
Встроенные средства мониторинга MikroTik (Torch, Traffic Flow, SNMP) хороши для диагностики в реальном времени, но не хранят историю и не позволяют строить графики за прошлые периоды. Для полноценного мониторинга нужен внешний стек: сборщик метрик, хранилище временных рядов и система визуализации. Стек MKTXP + Prometheus + Grafana — это лучшее решение для мониторинга MikroTik: MKTXP подключается к роутерам через RouterOS API и экспортирует метрики в формате Prometheus, Prometheus собирает и хранит данные, а Grafana рисует дашборды и отправляет алерты. В этом руководстве развернём полный стек через Docker Compose и настроим мониторинг одного или нескольких MikroTik-устройств.
Описание
Архитектура стека
Схема потока данных:
codeMikroTik Router(s) ←[RouterOS API, port 8728]→ MKTXP ←[HTTP :49090/metrics]→ Prometheus ←[PromQL]→ Grafana
Компоненты:
-
MKTXP — Python-экспортер, специально написанный для MikroTik. Подключается к роутеру через RouterOS API (порт 8728) и конвертирует данные в формат Prometheus metrics. Поддерживает десятки метрик: CPU, RAM, disk, interfaces, Wi-Fi, routing, firewall и др.
-
Prometheus — time-series база данных. Каждые N секунд (scrape interval) опрашивает MKTXP endpoint и сохраняет метрики. Хранит данные с timestamp, поддерживает мощный язык запросов PromQL.
-
Grafana — платформа визуализации. Подключается к Prometheus как datasource, позволяет строить дашборды, графики, таблицы и настраивать алерты (email, Telegram, Slack).
Какие метрики собирает MKTXP
MKTXP поддерживает следующие группы метрик:
| Группа | Метрики | Примеры |
|---|---|---|
| System | CPU, RAM, disk, uptime, temperature | cpu-load, free-memory, temperature |
| Interfaces | Traffic (bytes/packets), errors, status | tx-byte, rx-byte, running |
| Wi-Fi | Клиенты, signal strength, CCQ, tx/rx rate | registered-clients, signal-strength |
| DHCP | Active leases, pool usage | active-leases |
| Firewall | Rule counters (bytes/packets) | bytes, packets per rule |
| Routes | Active routes count | active-routes |
| BGP/OSPF | Sessions, state, prefixes | bgp-state, ospf-neighbors |
| Health | Voltage, temperature, fan speed | voltage, temperature, fan-speed |
| PoE | PoE output per port | poe-out-voltage, poe-out-current |
| Queues | Queue stats | queue-bytes, queue-packets |
| Connections | Active connections count | connection-count |
| Identity | Router name, version, model | identity, version, board-name |
Альтернатива: SNMP Exporter
Вместо MKTXP можно использовать Prometheus SNMP Exporter. Разница:
| Параметр | MKTXP (RouterOS API) | SNMP Exporter |
|---|---|---|
| Протокол | RouterOS API (TCP 8728) | SNMP (UDP 161) |
| Настройка MikroTik | Создать API-пользователя | Включить SNMP + community |
| Метрики | Богатый набор (Wi-Fi, firewall, routing) | Стандартные SNMP OIDs |
| Производительность | Быстрее (binary API) | Медленнее (текстовый SNMP) |
| Специфика MikroTik | Заточен под MikroTik | Универсальный |
| Готовые дашборды | Есть (dashboard ID 13679) | Нужно создавать |
Рекомендация: используйте MKTXP для мониторинга MikroTik. SNMP Exporter — для гетерогенных сетей (MikroTik + Cisco + другие вендоры).
Настройка
Шаг 1: подготовка MikroTik (создание API-пользователя)
MKTXP подключается через RouterOS API. Нужно создать отдельного пользователя с минимальными правами.
[admin@MikroTik] ># Создаём группу с правами только на чтение API /user/group/add name=mktxp-group policy=api,read,winbox,test # Создаём пользователя для мониторинга /user/add name=mktxp group=mktxp-group \ password="MktxpSecurePass123" \ address=192.168.88.0/24 \ comment="MKTXP monitoring user" # Включаем API-сервис (если не включён) /ip/service/set api disabled=no # Ограничиваем API по IP (адрес сервера мониторинга) /ip/service/set api address=192.168.88.100/32 # Проверка /user/print where name=mktxp /ip/service/print where name=api
Если мониторинг-сервер находится в другой подсети или за VPN, добавьте его IP в address для API-сервиса и в address пользователя.
Шаг 2: Docker Compose для всего стека
Создаём директорию для проекта и файл docker-compose.yml:
yaml# docker-compose.yml # Стек мониторинга: MKTXP + Prometheus + Grafana version: "3.8" services: mktxp: image: ghcr.io/akpw/mktxp:latest container_name: mktxp restart: unless-stopped volumes: - ./mktxp/:/home/mktxp/mktxp/ ports: - "49090:49090" user: root prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus ports: - "9090:9090" command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.retention.time=90d" - "--storage.tsdb.retention.size=10GB" grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped volumes: - grafana_data:/var/lib/grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=GrafanaSecurePass123 - GF_INSTALL_PLUGINS=grafana-clock-panel volumes: prometheus_data: grafana_data:
Шаг 3: конфигурация MKTXP
MKTXP требует два файла конфигурации: mktxp.conf (роутеры) и _mktxp.conf (глобальные настройки).
ini# mktxp/mktxp.conf # Конфигурация роутеров для мониторинга [Router-Main] enabled = True hostname = 192.168.88.1 port = 8728 username = mktxp password = MktxpSecurePass123 use_ssl = False no_ssl_certificate = False ssl_certificate_verify = False installed_packages = True dhcp = True dhcp_lease = True connections = True connection_stats = True pool = True interface = True firewall = True ipv6_firewall = False ipv6_neighbor = False poe = False monitor = True netwatch = True public_ip = True route = True wireless = False wireless_clients = False capsman = False capsman_clients = False wifi = True wifi_clients = True kid_control_devices = False user = True queue = True bgp = False routing = False remote_dhcp_entry = None use_comments_over_names = True check_for_updates = False
ini# mktxp/_mktxp.conf # Глобальные настройки MKTXP [MKTXP] port = 49090 socket_timeout = 2 initial_delay_on_failure = 120 max_delay_on_failure = 900 delay_inc_div = 5 bandwidth = False bandwidth_test_interval = 420 minimal_collect_interval = 5 verbose_mode = False fetch_routers_in_parallel = False max_worker_threads = 5 max_scrape_duration = 10 total_max_scrape_duration = 30
Для мониторинга нескольких роутеров добавьте дополнительные секции в mktxp.conf:
ini# Второй роутер [Router-Office2] enabled = True hostname = 10.0.0.1 port = 8728 username = mktxp password = MktxpSecurePass123 use_ssl = False no_ssl_certificate = False ssl_certificate_verify = False installed_packages = True dhcp = True dhcp_lease = True connections = True connection_stats = True pool = True interface = True firewall = True ipv6_firewall = False ipv6_neighbor = False poe = False monitor = True netwatch = True public_ip = True route = True wireless = False wireless_clients = False capsman = False capsman_clients = False wifi = True wifi_clients = True kid_control_devices = False user = True queue = True bgp = False routing = False remote_dhcp_entry = None use_comments_over_names = True check_for_updates = False # Третий роутер (CCR в data center) [CCR-DC] enabled = True hostname = 10.10.0.1 port = 8728 username = mktxp password = MktxpSecurePass123 use_ssl = False no_ssl_certificate = False ssl_certificate_verify = False installed_packages = True dhcp = False dhcp_lease = False connections = True connection_stats = True pool = False interface = True firewall = True ipv6_firewall = False ipv6_neighbor = False poe = False monitor = True netwatch = True public_ip = True route = True wireless = False wireless_clients = False capsman = False capsman_clients = False wifi = False wifi_clients = False kid_control_devices = False user = True queue = False bgp = True routing = True remote_dhcp_entry = None use_comments_over_names = True check_for_updates = False
Шаг 4: конфигурация Prometheus
yaml# prometheus/prometheus.yml global: scrape_interval: 30s evaluation_interval: 30s scrape_timeout: 25s scrape_configs: - job_name: "mktxp" static_configs: - targets: ["mktxp:49090"]
Параметр scrape_interval: 30s означает, что Prometheus будет опрашивать MKTXP каждые 30 секунд. Для большинства задач мониторинга этого достаточно. Если нужна более точная детализация — уменьшите до 15s, но учитывайте нагрузку на роутер и объём хранилища.
Шаг 5: запуск стека
[admin@MikroTik] ># Создаём директории mkdir -p mktxp prometheus # Размещаем файлы конфигурации: # mktxp/mktxp.conf # mktxp/_mktxp.conf # prometheus/prometheus.yml # docker-compose.yml # Запускаем docker compose up -d # Проверяем статус контейнеров docker compose ps # Проверяем логи MKTXP (подключение к роутерам) docker compose logs mktxp # Проверяем, что метрики экспортируются curl http://localhost:49090/metrics # Должен вернуть текст с метриками вида: # mktxp_system_cpu_load{routerboard_name="Router-Main"} 12.0 # mktxp_system_free_memory{routerboard_name="Router-Main"} 512000000
Шаг 6: настройка Grafana
- Откройте Grafana:
http://<server-ip>:3000 - Войдите:
admin/GrafanaSecurePass123 - Добавьте Prometheus datasource:
codeMenu → Connections → Data sources → Add data source → Prometheus URL: http://prometheus:9090 Остальное — по умолчанию Save & Test → должен показать "Successfully queried the Prometheus API"
- Импортируйте готовый дашборд:
codeMenu → Dashboards → Import Dashboard ID: 13679 Load → выберите Prometheus datasource → Import
Dashboard ID 13679 — это официальный дашборд MKTXP для Grafana. Он включает панели: System Overview, Interface Traffic, Wi-Fi Clients, DHCP Leases, Firewall Counters, Routes и другие.
Шаг 7: настройка алертов в Grafana
Настроим алерты на критические события: высокая загрузка CPU, отключение интерфейса, перегрев.
Сначала настройте канал уведомлений (Contact Point):
codeMenu → Alerting → Contact points → Add contact point Name: telegram-alerts Type: Telegram Bot token: <ваш_токен_бота> Chat ID: <ваш_chat_id> Save
Затем создайте правила алертов через Grafana UI или provisioning.
Примеры PromQL-запросов для алертов:
promql# CPU > 80% в течение 5 минут avg_over_time(mktxp_system_cpu_load[5m]) > 80 # Интерфейс down (был up, стал down) mktxp_interface_running == 0 # Температура выше 70°C mktxp_system_temperature > 70 # RAM usage > 90% (1 - mktxp_system_free_memory / mktxp_system_total_memory) * 100 > 90 # Disk usage > 80% (1 - mktxp_system_free_hdd_space / mktxp_system_total_hdd_space) * 100 > 80 # Количество DHCP-leases превышает 90% от пула mktxp_dhcp_lease_count / mktxp_pool_total * 100 > 90 # RouterOS update available mktxp_system_update_available == 1 # Нет трафика на WAN (интерфейс работает, но 0 bytes за 5 минут) rate(mktxp_interface_rx_byte{name="ether1"}[5m]) == 0 and mktxp_interface_running{name="ether1"} == 1
Настройка Prometheus Alert Rules (альтернатива Grafana Alerts)
Для более надёжных алертов можно использовать Prometheus Alertmanager:
yaml# prometheus/alert.rules.yml groups: - name: mikrotik rules: - alert: HighCPU expr: mktxp_system_cpu_load > 80 for: 5m labels: severity: warning annotations: summary: "High CPU on {{ $labels.routerboard_name }}" description: "CPU load is {{ $value }}% for more than 5 minutes" - alert: InterfaceDown expr: mktxp_interface_running == 0 for: 1m labels: severity: critical annotations: summary: "Interface {{ $labels.name }} down on {{ $labels.routerboard_name }}" - alert: HighTemperature expr: mktxp_system_temperature > 70 for: 3m labels: severity: warning annotations: summary: "High temperature on {{ $labels.routerboard_name }}: {{ $value }}°C" - alert: RouterOSUpdateAvailable expr: mktxp_system_update_available == 1 for: 1h labels: severity: info annotations: summary: "RouterOS update available on {{ $labels.routerboard_name }}"
Добавьте в prometheus.yml:
yaml# prometheus/prometheus.yml (обновлённый) global: scrape_interval: 30s evaluation_interval: 30s scrape_timeout: 25s rule_files: - "alert.rules.yml" scrape_configs: - job_name: "mktxp" static_configs: - targets: ["mktxp:49090"]
Проверка
Проверка MKTXP
[admin@MikroTik] ># Логи MKTXP (должно быть "Connected to Router-Main") docker compose logs mktxp | grep -i "connect" # Проверка метрик через HTTP curl -s http://localhost:49090/metrics | head -50 # Проверка конкретной метрики curl -s http://localhost:49090/metrics | grep "cpu_load" # Ожидаемый вывод: # mktxp_system_cpu_load{routerboard_name="Router-Main",...} 8.0
Проверка Prometheus
[admin@MikroTik] ># Web UI Prometheus # Откройте http://<server-ip>:9090 # Проверка targets (должен быть mktxp в состоянии UP) # http://<server-ip>:9090/targets # Проверка метрик через PromQL # В поле запроса введите: mktxp_system_cpu_load # Нажмите Execute — должны появиться данные # Через API curl -s "http://localhost:9090/api/v1/query?query=mktxp_system_cpu_load" | python3 -m json.tool
Проверка Grafana
[admin@MikroTik] ># Web UI Grafana # Откройте http://<server-ip>:3000 # Проверка datasource # Menu → Connections → Data sources → Prometheus → Save & Test # "Successfully queried the Prometheus API" # Проверка дашборда # Menu → Dashboards → MKTXP Exporter # Должны отображаться графики CPU, RAM, interfaces
Проверка на MikroTik
[admin@MikroTik] ># Проверяем, что MKTXP подключён (активная API-сессия) /user/active/print where name=mktxp # Должна быть видна активная сессия через api # Проверяем нагрузку от мониторинга /system/resource/print # CPU-load не должен значительно увеличиться (обычно +1-3%) # Проверяем логи подключения /log/print where topics~"system" message~"mktxp"
Типичные ошибки
1. MKTXP не может подключиться к роутеру
Самая частая ошибка при первой настройке. Причины:
[admin@MikroTik] ># 1. API-сервис отключён /ip/service/print where name=api # Если disabled=yes: /ip/service/set api disabled=no # 2. API ограничен по IP, а IP сервера мониторинга не добавлен /ip/service/print detail where name=api # address должен содержать IP сервера мониторинга /ip/service/set api address=192.168.88.100/32,192.168.88.0/24 # 3. Firewall блокирует API (порт 8728) /ip/firewall/filter/print where chain=input # Если есть drop на input — добавьте разрешение: /ip/firewall/filter/add chain=input action=accept protocol=tcp \ dst-port=8728 src-address=192.168.88.100/32 \ comment="Allow MKTXP API" place-before=0 # 4. Неправильный пароль или имя пользователя /user/print where name=mktxp # Проверьте, что пользователь существует и не disabled # 5. Пользователь ограничен по IP /user/print detail where name=mktxp # address должен содержать IP сервера мониторинга
2. Метрики есть, но дашборд пустой
Дашборд в Grafana не показывает данные, хотя метрики в Prometheus есть:
[admin@MikroTik] ># 1. Проверяем datasource в Grafana # Menu → Connections → Data sources → Prometheus # URL должен быть http://prometheus:9090 (не localhost!) # 2. Проверяем, что данные есть в Prometheus curl -s "http://localhost:9090/api/v1/query?query=up{job='mktxp'}" # value должен быть 1 # 3. Проверяем label names curl -s "http://localhost:9090/api/v1/query?query=mktxp_system_cpu_load" # Сравните label names с теми, что использует дашборд # 4. Проверяем переменные дашборда # В Grafana: Dashboard Settings → Variables # routerboard_name должен содержать имя вашего роутера
3. Prometheus занимает много места на диске
При мониторинге нескольких роутеров с коротким scrape_interval данные быстро растут:
yaml# prometheus.yml: настройка retention # В docker-compose.yml добавьте флаги: command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.retention.time=30d" # хранить 30 дней - "--storage.tsdb.retention.size=5GB" # максимум 5 ГБ # Увеличьте scrape_interval, если данные не нужны каждые 30 секунд # scrape_interval: 60s — для обзорного мониторинга достаточно
[admin@MikroTik] ># Проверка размера данных Prometheus docker compose exec prometheus df -h /prometheus du -sh ./prometheus_data/
4. MKTXP создаёт высокую нагрузку на роутер
Каждый scrape — это API-запросы к роутеру. На маломощных устройствах (hAP lite, hEX) это может создавать заметную нагрузку:
[admin@MikroTik] ># Проверяем нагрузку CPU во время scrape /system/resource/monitor interval=2 # Если CPU-load прыгает при каждом опросе — уменьшите количество метрик
ini# В mktxp.conf: отключите ненужные метрики [Router-Lite] # Для слабых устройств — минимум метрик dhcp = False dhcp_lease = False connections = False connection_stats = False firewall = False queue = False route = False # Оставьте только: interface = True monitor = True installed_packages = True
yaml# В prometheus.yml: увеличьте интервал для слабых роутеров scrape_configs: - job_name: "mktxp" scrape_interval: 60s # вместо 30s static_configs: - targets: ["mktxp:49090"]
5. Docker-сеть не резолвит имена контейнеров
В docker-compose.yml сервисы должны быть в одной сети. По умолчанию Docker Compose создаёт общую сеть, но если вы запускаете контейнеры отдельно:
yaml# Явно указываем сеть в docker-compose.yml services: mktxp: networks: - monitoring prometheus: networks: - monitoring grafana: networks: - monitoring networks: monitoring: driver: bridge
6. Firewall counters показывают 0
MKTXP собирает счётчики firewall rules, но они могут быть пустыми:
[admin@MikroTik] ># Проверяем, что firewall rules имеют счётчики /ip/firewall/filter/print stats # Если bytes=0 packets=0 — правило не совпало ни с одним пакетом # Убедитесь, что пользователь mktxp имеет права на чтение firewall /user/group/print where name=mktxp-group # policy должен включать: api, read
Мониторинг нескольких MikroTik с одной Grafana
Для мониторинга нескольких роутеров достаточно добавить их в mktxp.conf:
ini# mktxp/mktxp.conf — несколько роутеров [HQ-Router] enabled = True hostname = 192.168.88.1 port = 8728 username = mktxp password = MktxpSecurePass123 # ... остальные параметры ... [Branch-Office-1] enabled = True hostname = 10.1.0.1 port = 8728 username = mktxp password = MktxpSecurePass123 # ... остальные параметры ... [Branch-Office-2] enabled = True hostname = 10.2.0.1 port = 8728 username = mktxp password = MktxpSecurePass123 # ... остальные параметры ...
На каждом роутере нужно создать пользователя mktxp и открыть API-порт. Если роутеры в разных сетях — MKTXP должен иметь маршрут до каждого (через VPN или прямую маршрутизацию).
В Grafana дашборде используйте переменную routerboard_name для переключения между роутерами. Dashboard ID 13679 уже поддерживает эту переменную.
[admin@MikroTik] ># На КАЖДОМ роутере создаём API-пользователя: /user/group/add name=mktxp-group policy=api,read,winbox,test /user/add name=mktxp group=mktxp-group \ password="MktxpSecurePass123" \ address=<IP_сервера_мониторинга>/32 /ip/service/set api disabled=no \ address=<IP_сервера_мониторинга>/32
Альтернатива: SNMP Exporter
Если вы мониторите не только MikroTik, но и другое оборудование (Cisco, Juniper, HP), SNMP Exporter может быть удобнее.
Настройка SNMP на MikroTik:
[admin@MikroTik] ># Включаем SNMP на MikroTik /snmp/set enabled=yes # Настраиваем community (не используйте "public" — это дефолт!) /snmp/community/set [find name=public] \ name=MySecureCommunity123 \ addresses=192.168.88.100/32 \ read-access=yes write-access=no # Настраиваем контактную информацию /snmp/set contact="admin@company.com" location="Server Room" # Проверка /snmp/print /snmp/community/print
Docker Compose для SNMP Exporter:
yaml# Дополнительный сервис в docker-compose.yml snmp-exporter: image: prom/snmp-exporter:latest container_name: snmp-exporter restart: unless-stopped ports: - "9116:9116" volumes: - ./snmp-exporter/snmp.yml:/etc/snmp_exporter/snmp.yml
yaml# В prometheus.yml добавляем: - job_name: "snmp" scrape_interval: 60s static_configs: - targets: - 192.168.88.1 # MikroTik IP metrics_path: /snmp params: auth: ["public_v2"] module: ["mikrotik"] relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: snmp-exporter:9116
Полезные PromQL-запросы для MikroTik
promql# Текущая загрузка CPU mktxp_system_cpu_load # Средняя загрузка CPU за последний час avg_over_time(mktxp_system_cpu_load[1h]) # Использование RAM в процентах (1 - mktxp_system_free_memory / mktxp_system_total_memory) * 100 # Скорость трафика на интерфейсе (бит/с) rate(mktxp_interface_tx_byte{name="ether1"}[5m]) * 8 rate(mktxp_interface_rx_byte{name="ether1"}[5m]) * 8 # Общий трафик за сутки (ГБ) increase(mktxp_interface_tx_byte{name="ether1"}[24h]) / 1073741824 increase(mktxp_interface_rx_byte{name="ether1"}[24h]) / 1073741824 # Количество Wi-Fi клиентов mktxp_wifi_clients_devices # Количество активных DHCP-leases mktxp_dhcp_lease_count # Uptime в днях mktxp_system_uptime / 86400 # Температура процессора mktxp_system_temperature # Количество активных соединений (conntrack) mktxp_connection_stats_total
Стек MKTXP + Prometheus + Grafana — мощный и гибкий инструмент мониторинга для MikroTik любого масштаба: от одного домашнего роутера до сотен устройств в ISP-сети. Первоначальная настройка занимает 30-40 минут, после чего вы получаете полную историю метрик, красивые дашборды и алерты. Рекомендуем начать с дашборда 13679, а затем создавать собственные панели под ваши задачи. Не забывайте ограничивать доступ к API на MikroTik, использовать отдельного пользователя с минимальными правами и периодически проверять, что все роутеры отдают метрики без ошибок.
MikroTik Router(s) ←[RouterOS API, port 8728]→ MKTXP ←[HTTP :49090/metrics]→ Prometheus ←[PromQL]→ Grafana # Создаём группу с правами только на чтение API /user/group/add name=mktxp-group policy=api,read,winbox,test # Создаём пользователя для мониторинга /user/add name=mktxp group=mktxp-group \ password="MktxpSecurePass123" \ address=192.168.88.0/24 \ comment="MKTXP monitoring user" # Включаем API-сервис (если не включён) /ip/service/set api disabled=no # Ограничиваем API по IP (адрес сервера мониторинга) /ip/service/set api address=192.168.88.100/32 # Проверка /user/print where name=mktxp /ip/service/print where name=api #### Шаг 3: конфигурация MKTXP MKTXP требует два файла конфигурации: `mktxp.conf` (роутеры) и `_mktxp.conf` (глобальные настройки). Для мониторинга нескольких роутеров добавьте дополнительные секции в mktxp.conf: #### Шаг 4: конфигурация Prometheus Параметр `scrape_interval: 30s` означает, что Prometheus будет опрашивать MKTXP каждые 30 секунд. Для большинства задач мониторинга этого достаточно. Если нужна более точная детализация — уменьшите до 15s, но учитывайте нагрузку на роутер и объём хранилища. #### Шаг 5: запуск стека #### Шаг 6: настройка Grafana 1. Откройте Grafana: `http://<server-ip>:3000` 2. Войдите: `admin` / `GrafanaSecurePass123` 3. Добавьте Prometheus datasource: 4. Импортируйте готовый дашборд: Dashboard ID 13679 — это официальный дашборд MKTXP для Grafana. Он включает панели: System Overview, Interface Traffic, Wi-Fi Clients, DHCP Leases, Firewall Counters, Routes и другие. #### Шаг 7: настройка алертов в Grafana Настроим алерты на критические события: высокая загрузка CPU, отключение интерфейса, перегрев. Сначала настройте канал уведомлений (Contact Point): Затем создайте правила алертов через Grafana UI или provisioning. Примеры PromQL-запросов для алертов: #### Настройка Prometheus Alert Rules (альтернатива Grafana Alerts) Для более надёжных алертов можно использовать Prometheus Alertmanager: Добавьте в prometheus.yml: ### Проверка #### Проверка MKTXP #### Проверка Prometheus #### Проверка Grafana #### Проверка на MikroTik ### Типичные ошибки #### 1. MKTXP не может подключиться к роутеру Самая частая ошибка при первой настройке. Причины: #### 2. Метрики есть, но дашборд пустой Дашборд в Grafana не показывает данные, хотя метрики в Prometheus есть: #### 3. Prometheus занимает много места на диске При мониторинге нескольких роутеров с коротким scrape_interval данные быстро растут: #### 4. MKTXP создаёт высокую нагрузку на роутер Каждый scrape — это API-запросы к роутеру. На маломощных устройствах (hAP lite, hEX) это может создавать заметную нагрузку: #### 5. Docker-сеть не резолвит имена контейнеров В docker-compose.yml сервисы должны быть в одной сети. По умолчанию Docker Compose создаёт общую сеть, но если вы запускаете контейнеры отдельно: #### 6. Firewall counters показывают 0 MKTXP собирает счётчики firewall rules, но они могут быть пустыми: ### Мониторинг нескольких MikroTik с одной Grafana Для мониторинга нескольких роутеров достаточно добавить их в `mktxp.conf`: На каждом роутере нужно создать пользователя mktxp и открыть API-порт. Если роутеры в разных сетях — MKTXP должен иметь маршрут до каждого (через VPN или прямую маршрутизацию). В Grafana дашборде используйте переменную `routerboard_name` для переключения между роутерами. Dashboard ID 13679 уже поддерживает эту переменную. ### Альтернатива: SNMP Exporter Если вы мониторите не только MikroTik, но и другое оборудование (Cisco, Juniper, HP), SNMP Exporter может быть удобнее. Настройка SNMP на MikroTik: Docker Compose для SNMP Exporter: ### Полезные PromQL-запросы для MikroTik