mikrotik-wiki.ru
Главная
Загрузка...

Мониторинг MikroTik через Grafana + Prometheus

RouterOS 7.xМониторинг14 мин630 мар. 2026 г.
TelegramVK

Мониторинг MikroTik через Grafana + Prometheus + MKTXP

Встроенные средства мониторинга MikroTik (Torch, Traffic Flow, SNMP) хороши для диагностики в реальном времени, но не хранят историю и не позволяют строить графики за прошлые периоды. Для полноценного мониторинга нужен внешний стек: сборщик метрик, хранилище временных рядов и система визуализации. Стек MKTXP + Prometheus + Grafana — это лучшее решение для мониторинга MikroTik: MKTXP подключается к роутерам через RouterOS API и экспортирует метрики в формате Prometheus, Prometheus собирает и хранит данные, а Grafana рисует дашборды и отправляет алерты. В этом руководстве развернём полный стек через Docker Compose и настроим мониторинг одного или нескольких MikroTik-устройств.

Описание

Архитектура стека

Схема потока данных:

code
MikroTik 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 поддерживает следующие группы метрик:

ГруппаМетрикиПримеры
SystemCPU, RAM, disk, uptime, temperaturecpu-load, free-memory, temperature
InterfacesTraffic (bytes/packets), errors, statustx-byte, rx-byte, running
Wi-FiКлиенты, signal strength, CCQ, tx/rx rateregistered-clients, signal-strength
DHCPActive leases, pool usageactive-leases
FirewallRule counters (bytes/packets)bytes, packets per rule
RoutesActive routes countactive-routes
BGP/OSPFSessions, state, prefixesbgp-state, ospf-neighbors
HealthVoltage, temperature, fan speedvoltage, temperature, fan-speed
PoEPoE output per portpoe-out-voltage, poe-out-current
QueuesQueue statsqueue-bytes, queue-packets
ConnectionsActive connections countconnection-count
IdentityRouter name, version, modelidentity, 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

  1. Откройте Grafana: http://<server-ip>:3000
  2. Войдите: admin / GrafanaSecurePass123
  3. Добавьте Prometheus datasource:
code
Menu → Connections → Data sources → Add data source → Prometheus
URL: http://prometheus:9090
Остальное — по умолчанию
Save & Test → должен показать "Successfully queried the Prometheus API"
  1. Импортируйте готовый дашборд:
code
Menu → 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):

code
Menu → 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, использовать отдельного пользователя с минимальными правами и периодически проверять, что все роутеры отдают метрики без ошибок.

[admin@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
Мониторинг / Мониторинг MikroTik через Grafana + Prometheus