Мониторинг MikroTik в Zabbix — полное руководство
Zabbix — одна из самых популярных open-source систем мониторинга в мире. Она поддерживает сбор данных через SNMP, что делает её идеальным инструментом для мониторинга MikroTik RouterOS. В отличие от стека Prometheus + Grafana, Zabbix предоставляет всё в одном: сбор данных, хранение, визуализацию, оповещения и автообнаружение — без необходимости собирать пайплайн из нескольких компонентов. В этом руководстве развернём Zabbix Server через Docker Compose, настроим SNMP на MikroTik, подключим роутер к мониторингу, настроим триггеры, графики, автообнаружение и оповещения в Telegram.
Руководство актуально для RouterOS 7.20+, Zabbix 7.0 LTS.
Описание
Архитектура мониторинга
Схема взаимодействия компонентов:
codeMikroTik Router(s) ←[SNMP UDP 161]→ Zabbix Server ←[HTTP :8080]→ Zabbix Web Frontend ↓ PostgreSQL (хранилище данных)
Компоненты:
-
Zabbix Server — ядро системы. Опрашивает устройства по SNMP, обрабатывает данные, проверяет триггеры, отправляет оповещения. Написан на C, работает как daemon.
-
Zabbix Web Frontend — веб-интерфейс на PHP (Apache/Nginx). Через него настраиваются хосты, шаблоны, триггеры, дашборды.
-
PostgreSQL — база данных для хранения конфигурации, истории метрик и событий. Альтернативы: MySQL/MariaDB, TimescaleDB (рекомендуется для больших инсталляций).
-
MikroTik SNMP Agent — встроенный SNMP-сервис RouterOS, отдающий метрики по запросу.
Что Zabbix умеет мониторить на MikroTik
С помощью официального шаблона Zabbix собирает десятки метрик:
| Категория | Метрики | Примеры |
|---|---|---|
| System | CPU, RAM, disk, uptime, firmware | cpu-load, free-memory, total-hdd-space |
| Interfaces | Traffic in/out, errors, discards, status | ifHCInOctets, ifHCOutOctets, ifOperStatus |
| Temperature | CPU temp, board temp | mtxrHlTemperature, mtxrHlProcessorTemperature |
| Voltage | Input voltage, PoE | mtxrHlVoltage |
| Firmware | Installed version, latest available | mtxrFirmwareVersion, mtxrFirmwareLatestVersion |
| Wi-Fi | Registered clients, signal, frequency | mtxrWlApClientCount |
| DHCP | Active leases | |
| Routes | Active routes count | inetCidrRouteNumber |
| Connections | Active firewall connections | |
| Identity | System name, location, contact | sysName, sysLocation, sysContact |
Zabbix vs Prometheus/Grafana
| Параметр | Zabbix | Prometheus + Grafana |
|---|---|---|
| Тип решения | All-in-one | Набор компонентов |
| Сбор данных | Встроенный (SNMP, agent, JMX...) | Экспортеры (MKTXP, SNMP Exporter) |
| Хранилище | SQL (PostgreSQL, MySQL) | TSDB (собственная) |
| Визуализация | Встроенная (скромная) | Grafana (богатая) |
| Автообнаружение | Встроенные LLD-правила | Нет из коробки |
| Шаблоны | Официальные шаблоны для MikroTik | Готовые дашборды |
| Оповещения | Встроенные (email, Telegram, SMS) | Alertmanager (отдельный) |
| Масштабирование | Zabbix Proxy для распределённого мониторинга | Federation, Thanos |
| Кривая обучения | Средняя | Высокая |
Рекомендация: Zabbix лучше подходит для enterprise-среды с гетерогенным оборудованием (MikroTik + Cisco + серверы + ОС). Prometheus + Grafana — для DevOps-среды и когда нужна максимальная гибкость визуализации.
Настройка
Шаг 1: установка Zabbix Server через Docker Compose
Создайте каталог для Zabbix и файл docker-compose.yml:
bashmkdir -p /opt/zabbix && cd /opt/zabbix
Содержимое docker-compose.yml:
yamlversion: '3.8' services: postgres: image: postgres:16-alpine container_name: zabbix-postgres environment: POSTGRES_USER: zabbix POSTGRES_PASSWORD: ZabbixDBPass2024! POSTGRES_DB: zabbix volumes: - zabbix-postgres-data:/var/lib/postgresql/data restart: unless-stopped networks: - zabbix-net zabbix-server: image: zabbix/zabbix-server-pgsql:7.0-alpine-latest container_name: zabbix-server environment: DB_SERVER_HOST: postgres POSTGRES_USER: zabbix POSTGRES_PASSWORD: ZabbixDBPass2024! POSTGRES_DB: zabbix ZBX_STARTPOLLERS: 10 ZBX_STARTPINGERS: 5 ZBX_STARTTRAPPERS: 5 ZBX_STARTVMWARECOLLECTORS: 0 ZBX_CACHESIZE: 128M ZBX_HISTORYCACHESIZE: 64M ZBX_TRENDCACHESIZE: 32M ports: - "10051:10051" volumes: - zabbix-snmptraps:/var/lib/zabbix/snmptraps - zabbix-export:/var/lib/zabbix/export depends_on: - postgres restart: unless-stopped networks: - zabbix-net zabbix-web: image: zabbix/zabbix-web-nginx-pgsql:7.0-alpine-latest container_name: zabbix-web environment: DB_SERVER_HOST: postgres POSTGRES_USER: zabbix POSTGRES_PASSWORD: ZabbixDBPass2024! POSTGRES_DB: zabbix ZBX_SERVER_HOST: zabbix-server PHP_TZ: Europe/Moscow ports: - "8080:8080" depends_on: - zabbix-server restart: unless-stopped networks: - zabbix-net volumes: zabbix-postgres-data: zabbix-snmptraps: zabbix-export: networks: zabbix-net: driver: bridge
Запустите стек:
bashdocker compose up -d
Через 1-2 минуты откройте http://<IP-сервера>:8080. Логин: Admin, пароль: zabbix. Первым делом смените пароль администратора через Users → Admin → Change password.
Шаг 2: настройка SNMP на MikroTik
Для мониторинга через Zabbix на роутере должен быть включён SNMP. Настроим SNMPv2c для начала (для продуктивной среды используйте SNMPv3).
SNMPv2c (базовая настройка):
[admin@MikroTik] ># Включаем SNMP /snmp/set enabled=yes contact="admin@company.ru" location="Office, rack 1" # Меняем community string (никогда не оставляйте public!) /snmp/community/set [find default=yes] name=MikroTikZabbix2024 \ read-access=yes write-access=no addresses=10.0.1.50/32 # Проверяем /snmp/print /snmp/community/print
Параметр addresses — IP-адрес Zabbix Server. Это критически важно для безопасности: без ограничения любой хост в сети сможет читать метрики.
SNMPv3 (рекомендуется для production):
[admin@MikroTik] >/snmp/set enabled=yes contact="noc@company.ru" location="DC-Moscow" /snmp/community/add name=zabbix-v3 security-name=zabbix-mon \ authentication-protocol=SHA1 authentication-password="AuthZabbix2024!" \ encryption-protocol=AES encryption-password="PrivZabbix2024!" \ read-access=yes write-access=no addresses=10.0.1.50/32
Защита SNMP через firewall:
[admin@MikroTik] >/ip/firewall/filter add chain=input action=accept protocol=udp dst-port=161 \ src-address=10.0.1.50 comment="Allow SNMP from Zabbix Server" \ place-before=*[find where action=drop chain=input] add chain=input action=drop protocol=udp dst-port=161 \ comment="Drop all other SNMP"
Настройка interface list для SNMP (ограничение видимости):
По умолчанию SNMP отдаёт информацию обо всех интерфейсах. Если нужно ограничить:
[admin@MikroTik] ># Создаём list для SNMP-мониторинга /interface/list/add name=snmp-monitor comment="Interfaces visible in SNMP" /interface/list/member/add interface=ether1 list=snmp-monitor /interface/list/member/add interface=bridge1 list=snmp-monitor /interface/list/member/add interface=wireguard1 list=snmp-monitor
Примечание: в RouterOS ограничение видимости интерфейсов через SNMP напрямую не поддерживается. Фильтрация выполняется на стороне Zabbix (через фильтры в Discovery Rules).
Шаг 3: проверка SNMP с сервера Zabbix
Перед добавлением хоста в Zabbix убедитесь, что SNMP работает:
[admin@MikroTik] ># Установка snmp-утилит apt install -y snmp snmp-mibs-downloader # SNMPv2c — получаем sysName snmpget -v2c -c MikroTikZabbix2024 192.168.88.1 1.3.6.1.2.1.1.5.0 # SNMPv2c — обход всех OID snmpwalk -v2c -c MikroTikZabbix2024 192.168.88.1 1.3.6.1.2.1.1 # SNMPv3 snmpget -v3 -l authPriv -u zabbix-mon -a SHA -A "AuthZabbix2024!" \ -x AES -X "PrivZabbix2024!" 192.168.88.1 1.3.6.1.2.1.1.5.0
Если команда возвращает имя роутера — SNMP работает корректно.
Шаг 4: добавление MikroTik в Zabbix
-
Откройте Zabbix Web: Data collection → Hosts → Create host.
-
Заполните поля:
- Host name:
MikroTik-GW-01 - Visible name:
MikroTik Gateway (192.168.88.1) - Groups: создайте группу
MikroTik Routers - Templates: найдите и добавьте
MikroTik RouterOS by SNMP(встроенный шаблон)
- Host name:
-
На вкладке Interfaces добавьте SNMP-интерфейс:
- Type: SNMP
- IP address:
192.168.88.1 - Port:
161 - SNMP version:
SNMPv2 - SNMP community:
MikroTikZabbix2024
-
Для SNMPv3:
- SNMP version:
SNMPv3 - Security name:
zabbix-mon - Security level:
authPriv - Authentication protocol:
SHA1 - Authentication passphrase:
AuthZabbix2024! - Privacy protocol:
AES128 - Privacy passphrase:
PrivZabbix2024!
- SNMP version:
-
Нажмите Add. Через 1-2 минуты рядом с хостом появится зелёный индикатор SNMP — значит данные успешно собираются.
Шаг 5: официальный шаблон MikroTik RouterOS by SNMP
Шаблон MikroTik RouterOS by SNMP входит в стандартную поставку Zabbix 7.0. Он содержит:
Items (метрики):
- System: CPU utilization, memory used/total, disk used/total, uptime, firmware version
- Interfaces: traffic in/out (bits/s), errors in/out, discards in/out, operational status, speed
- Temperature: processor temperature, board temperature
- Voltage: input voltage
- Identity: system name, contact, location, description
Triggers (встроенные):
- High CPU utilization (>90% в течение 5 минут)
- High memory utilization (>90%)
- Device has been restarted (uptime < 10 минут)
- Firmware has changed
- No SNMP data collection (нет данных более 5 минут)
- Network interface link down
- High error rate on interface
Discovery Rules (автообнаружение):
- Network interfaces discovery — автоматически находит все интерфейсы и создаёт items/triggers для каждого
- Storage discovery — находит дисковые разделы
Шаблон покрывает 80% потребностей. Остальные 20% — custom items.
Шаг 6: custom items — мониторинг специфичных метрик
Температура процессора
Если шаблон не собирает температуру (зависит от модели), добавьте вручную:
- Data collection → Hosts → MikroTik-GW-01 → Items → Create item
- Параметры:
- Name:
CPU Temperature - Type:
SNMP agent - Key:
mikrotik.cpu.temperature - SNMP OID:
1.3.6.1.4.1.14988.1.1.3.11.0 - Type of information:
Numeric (float) - Units:
°C - Update interval:
60s
- Name:
Количество Wi-Fi клиентов
codeOID: 1.3.6.1.4.1.14988.1.1.1.3.1.6
Это таблица — для каждого Wi-Fi интерфейса свой OID. Используйте Discovery Rule для автоматического обнаружения Wi-Fi интерфейсов и создания items.
Активные VPN-сессии
Для подсчёта активных PPP-сессий (L2TP, SSTP, PPPoE):
codeOID: 1.3.6.1.4.1.14988.1.1.5.1.0 (PPP active sessions)
Создайте item:
- Name:
Active VPN Sessions - SNMP OID:
1.3.6.1.4.1.14988.1.1.5.1.0 - Type of information:
Numeric (unsigned) - Update interval:
30s
Счётчики firewall-правил
Для мониторинга срабатываний конкретного firewall-правила потребуется SNMP OID из таблицы:
code1.3.6.1.4.1.14988.1.1.2 — MikroTik firewall table
На MikroTik можно присвоить comment к правилу и искать по нему:
[admin@MikroTik] ># Добавляем comment к важным правилам /ip/firewall/filter/set [find where action=drop chain=input] \ comment="drop-input-all"
Для мониторинга счётчиков через Zabbix создайте SNMP Discovery Rule с OID 1.3.6.1.4.1.14988.1.1.2.1.1.2 (имена правил) и items для bytes/packets.
Шаг 7: настройка триггеров
Триггеры — это условия, при выполнении которых Zabbix генерирует алерт.
CPU > 80%
- Data collection → Hosts → MikroTik-GW-01 → Triggers → Create trigger
- Параметры:
- Name:
CPU utilization is above 80% on {HOST.NAME} - Severity:
Warning - Expression:
avg(/MikroTik-GW-01/system.cpu.util[hrProcessorLoad.1],5m)>80
- Name:
RAM > 90%
- Name:
Memory utilization is above 90% on {HOST.NAME} - Severity:
High - Expression:
last(/MikroTik-GW-01/vm.memory.util[memoryUsedPercentage])>90
Интерфейс упал
Этот триггер уже включён в шаблон, но можно создать кастомный с другим severity:
- Name:
Interface {#IFNAME} is down on {HOST.NAME} - Severity:
Disaster - Expression:
last(/MikroTik-GW-01/net.if.status[ifOperStatus.{#SNMPINDEX}])=2
Температура > 70°C
- Name:
CPU temperature is above 70°C on {HOST.NAME} - Severity:
High - Expression:
last(/MikroTik-GW-01/mikrotik.cpu.temperature)>70 - Recovery expression:
last(/MikroTik-GW-01/mikrotik.cpu.temperature)<65
Recovery expression с гистерезисом (65°C) предотвращает мигание триггера при температуре на границе порога.
Устройство недоступно
- Name:
{HOST.NAME} is unreachable by SNMP - Severity:
Disaster - Expression:
nodata(/MikroTik-GW-01/sysUpTime,300s)=1
Шаг 8: графики и дашборды
Создание графика
- Data collection → Hosts → MikroTik-GW-01 → Graphs → Create graph
- Пример — трафик на WAN-интерфейсе:
- Name:
WAN Traffic (ether1) - Items: добавьте
Interface ether1: Bits receivedиInterface ether1: Bits sent - Graph type:
Normal - Show working time: включить
- Name:
Создание дашборда
- Dashboards → Create dashboard
- Рекомендуемые виджеты:
- Graph — трафик WAN-интерфейса
- Graph — CPU и RAM загрузка
- Plain text — текущий firmware, uptime
- Problems — список активных проблем
- Top hosts — топ роутеров по CPU
Пример компоновки дашборда для NOC:
| Виджет | Размер | Описание |
|---|---|---|
| System info | 1/4 экрана | Uptime, firmware, model |
| CPU & RAM | 1/4 экрана | Графики загрузки за 24ч |
| WAN Traffic | 1/2 экрана | In/Out за 24ч |
| Problems | 1/4 экрана | Текущие алерты |
| Top Talkers | 1/4 экрана | Интерфейсы с максимальным трафиком |
Шаг 9: Discovery Rules — автоматическое обнаружение
Low-Level Discovery (LLD) — мощная функция Zabbix, автоматически создающая items, triggers и graphs для обнаруженных объектов.
Автообнаружение интерфейсов
Уже включено в стандартный шаблон. Zabbix периодически опрашивает OID 1.3.6.1.2.1.2.2.1.2 (ifDescr), находит все интерфейсы и для каждого создаёт:
- Items: traffic in/out, errors, discards, status
- Triggers: interface down, high error rate
- Graphs: traffic graph per interface
Можно настроить фильтры, чтобы исключить ненужные интерфейсы:
- Data collection → Hosts → MikroTik-GW-01 → Discovery rules → Network interfaces discovery → Filters
- Добавьте фильтр:
{#IFNAME} not matchesloopback|dummy``
Автообнаружение DHCP-leases
Для мониторинга DHCP-пулов создайте custom Discovery Rule:
- Name:
DHCP Lease Discovery - Type:
SNMP agent - Key:
mikrotik.dhcp.discovery - SNMP OID:
discovery[{#POOLNAME},1.3.6.1.4.1.14988.1.1.17.1.1.2] - Update interval:
1h
Шаг 10: мониторинг нескольких роутеров
Для масштабного мониторинга:
- Настройте SNMP на каждом роутере (используйте скрипт):
[admin@MikroTik] ># Единый скрипт для всех роутеров /snmp/set enabled=yes contact="noc@company.ru" \ location=[/system/identity/get name] /snmp/community/set [find default=yes] name=MikroTikZabbix2024 \ read-access=yes write-access=no addresses=10.0.1.50/32
-
В Zabbix используйте Network Discovery для автоматического обнаружения роутеров:
- Data collection → Discovery → Create discovery rule
- IP range:
10.0.0.0/24(подсеть управления) - Checks: SNMP (community
MikroTikZabbix2024, OID1.3.6.1.2.1.1.1.0) - Device uniqueness: IP address
- Actions: при обнаружении автоматически добавлять хост в группу
MikroTik Routersи применять шаблонMikroTik RouterOS by SNMP
-
Для распределённых сетей используйте Zabbix Proxy:
yaml# Добавьте в docker-compose.yml zabbix-proxy: image: zabbix/zabbix-proxy-sqlite3:7.0-alpine-latest container_name: zabbix-proxy-branch1 environment: ZBX_HOSTNAME: proxy-branch1 ZBX_SERVER_HOST: zabbix-server ZBX_PROXYMODE: 0 ports: - "10053:10051" restart: unless-stopped networks: - zabbix-net
Zabbix Proxy устанавливается на удалённой площадке, опрашивает локальные роутеры и передаёт данные центральному серверу. Это снижает нагрузку на WAN-канал и повышает надёжность.
Шаг 11: оповещения по email
-
Alerts → Media types → Email:
- SMTP server:
smtp.gmail.com - SMTP port:
587 - SMTP email:
zabbix@company.ru - Authentication: username + password (или app password для Gmail)
- Security:
STARTTLS
- SMTP server:
-
Users → Admin → Media → Add:
- Type:
Email - Send to:
admin@company.ru - When active:
1-7,00:00-24:00 - Severity: выберите нужные уровни
- Type:
-
Alerts → Actions → Trigger actions → Create action:
- Name:
Send alerts for MikroTik - Conditions: Host group =
MikroTik Routers - Operations: Send message to user
AdminviaEmail
- Name:
Шаг 12: оповещения в Telegram
Telegram — самый популярный способ получения алертов для русскоязычных администраторов.
Создание бота:
- Напишите
@BotFatherв Telegram - Команда
/newbot, задайте имя:Zabbix MikroTik Bot - Скопируйте API Token:
1234567890:AAHxxxxxxxxxxxxxxxxxxxxxx - Создайте группу (или канал) и добавьте бота
- Получите Chat ID через
https://api.telegram.org/bot<TOKEN>/getUpdates
Настройка в Zabbix:
- Alerts → Media types — найдите встроенный
Telegram - Установите параметр Token:
1234567890:AAHxxxxxxxxxxxxxxxxxxxxxx - Users → Admin → Media → Add:
- Type:
Telegram - Send to:
-1001234567890(Chat ID группы)
- Type:
- Проверьте отправкой тестового сообщения: Alerts → Media types → Telegram → Test
Формат сообщений настраивается в шаблоне Media type. По умолчанию Zabbix отправляет:
codeProblem: CPU utilization is above 80% on MikroTik-GW-01 Host: MikroTik-GW-01 Severity: Warning Time: 2026-03-28 14:35:00
Проверка
Проверка сбора данных
После добавления хоста проверьте, что данные поступают:
-
Monitoring → Latest data → Host: MikroTik-GW-01 — здесь отображаются все собранные метрики с последним значением и временем обновления.
-
Ключевые метрики для проверки:
system.cpu.util— загрузка CPU (должно быть числовое значение)vm.memory.util— загрузка RAMsystem.uptime— аптайм (должен расти)net.if.in/out— трафик (должен меняться)
-
Если данные не поступают — проверьте индикатор SNMP на странице хостов. Красный значок означает ошибку.
Проверка SNMP на MikroTik
[admin@MikroTik] ># Проверяем, что SNMP включён /snmp/print # Проверяем community /snmp/community/print # Смотрим счётчики SNMP-запросов /snmp/print stats
Если счётчик packets-received растёт — Zabbix успешно опрашивает роутер.
Проверка триггеров
Для тестирования триггера CPU > 80% можно искусственно нагрузить роутер:
[admin@MikroTik] ># Генерируем нагрузку на CPU (отправка 1000 ping-пакетов) /tool/flood-ping 8.8.8.8 count=10000 size=1500 # Или через bandwidth-test (если есть второй MikroTik) /tool/bandwidth-test address=192.168.88.2 duration=60s
Через 5 минут (avg интервал триггера) Zabbix должен сгенерировать алерт. Проверьте: Monitoring → Problems.
Проверка оповещений
- Alerts → Media types → Telegram → Test: введите Chat ID и текст, нажмите Test — должно прийти сообщение.
- Alerts → Actions → Trigger actions: убедитесь, что action включён (Status: Enabled).
- Reports → Action log: здесь видна история отправки оповещений и ошибки.
Диагностика с сервера
[admin@MikroTik] ># Проверка SNMP доступности snmpwalk -v2c -c MikroTikZabbix2024 192.168.88.1 sysDescr.0 # Проверка конкретного OID (CPU) snmpget -v2c -c MikroTikZabbix2024 192.168.88.1 \ 1.3.6.1.2.1.25.3.3.1.2.1 # Просмотр логов Zabbix Server docker logs zabbix-server --tail 50 # Проверка подключения Zabbix к PostgreSQL docker exec -it zabbix-postgres psql -U zabbix -c "SELECT count(*) FROM hosts;"
Типичные ошибки
1. SNMP timeout — Zabbix не может подключиться к роутеру
Симптомы: красный индикатор SNMP на странице хостов, сообщение Timeout while connecting.
Причины и решения:
- SNMP не включён на MikroTik:
/snmp/set enabled=yes - Неправильный community string: проверьте совпадение в
/snmp/community/printи настройках хоста Zabbix - Firewall на MikroTik блокирует UDP 161: добавьте разрешающее правило перед drop
- Firewall на сервере Zabbix блокирует исходящий UDP 161
- Неправильный IP-адрес в
addresses=community — Zabbix Server должен быть в списке
[admin@MikroTik] ># Быстрая диагностика — разрешить SNMP отовсюду (временно!) /snmp/community/set [find] addresses=0.0.0.0/0 # После успешного подключения — вернуть ограничение /snmp/community/set [find] addresses=10.0.1.50/32
2. Данные собираются, но триггеры не срабатывают
Причины:
- Триггер отключён (Disabled)
- Expression использует имя хоста, а не макрос
{HOST.NAME} - Период усреднения слишком большой (avg 1h вместо 5m)
- Данные не попадают в нужный item (проверьте ключ)
Решение: Проверьте expression через Configuration → Hosts → Triggers → Test. Zabbix 7.0 позволяет тестировать триггеры с текущими данными.
3. Оповещения не приходят
Причины:
- Media type не настроен или отключён
- У пользователя нет Media (Send to пустой)
- Action не создан или отключён
- Severity действия не совпадает с severity триггера
- SMTP-сервер блокирует подключение (Gmail требует App Password)
- Telegram Bot Token невалидный или бот не добавлен в группу
Диагностика:
[admin@MikroTik] ># Проверьте лог Zabbix Server docker logs zabbix-server 2>&1 | grep -i "alert\|media\|notification"
В веб-интерфейсе: Reports → Action log — показывает статус каждой попытки отправки.
4. Высокое потребление дискового пространства
Zabbix хранит всю историю метрик в PostgreSQL. При мониторинге 10+ роутеров с интервалом 30 секунд база быстро растёт.
Решение:
-
Настройте Housekeeping: Administration → General → Housekeeping:
- History retention:
90d(90 дней детальных данных) - Trend retention:
365d(1 год агрегированных данных)
- History retention:
-
Увеличьте интервал опроса для некритичных метрик (60s → 300s)
-
Для больших инсталляций используйте TimescaleDB вместо обычного PostgreSQL:
yaml# Замените postgres image на TimescaleDB postgres: image: timescale/timescaledb:latest-pg16 environment: POSTGRES_USER: zabbix POSTGRES_PASSWORD: ZabbixDBPass2024! POSTGRES_DB: zabbix
5. Discovery обнаруживает слишком много интерфейсов
MikroTik создаёт множество виртуальных интерфейсов (bridge ports, VLAN sub-interfaces, loopback). Discovery создаёт items и triggers для всех.
Решение: Добавьте фильтры в Discovery Rule:
- Discovery rules → Network interfaces discovery → Filters
- Добавьте:
{#IFNAME} not matches^(loopback|dummy|bridge-port).*`` - Или включите только нужные:
{#IFNAME} matches^(ether|sfp|wlan|bridge|wireguard|vlan).*``
6. Ошибка "No SNMP data collection"
Это trigger от стандартного шаблона. Срабатывает, когда Zabbix не получает SNMP-данные более 5 минут.
Возможные причины:
- Роутер перезагружается
- Сетевая проблема между Zabbix и роутером
- SNMP community был изменён
- Роутер перегружен и не отвечает на SNMP-запросы вовремя
Решение: увеличьте timeout в настройках хоста: Hosts → MikroTik-GW-01 → SNMP interface → Timeout: с 3s до 5s или 10s.
7. Неправильное время в алертах
Причина: рассинхронизация времени между Zabbix Server и MikroTik.
[admin@MikroTik] ># Настройте NTP на MikroTik /system/ntp/client/set enabled=yes /system/ntp/client/servers add address=pool.ntp.org add address=time.google.com # Проверка /system/clock/print
На сервере Zabbix убедитесь, что timezone корректный:
[admin@MikroTik] ># В docker-compose.yml должно быть: # PHP_TZ: Europe/Moscow docker exec -it zabbix-web date
8. SNMPv3 — ошибка аутентификации
Симптомы: Authentication failure в логах Zabbix.
Причины:
- Несовпадение authentication/privacy паролей
- Неправильный protocol (SHA vs SHA256, AES128 vs AES256)
- Security name не совпадает
Решение: Удалите и пересоздайте SNMP-community на MikroTik, затем обновите настройки в Zabbix. Убедитесь, что длина пароля не менее 8 символов (требование SNMPv3).
[admin@MikroTik] >/snmp/community/remove [find name=zabbix-v3] /snmp/community/add name=zabbix-v3 security-name=zabbix-mon \ authentication-protocol=SHA1 authentication-password="AuthPass123!" \ encryption-protocol=AES encryption-password="PrivPass123!" \ read-access=yes write-access=no addresses=10.0.1.50/32
Zabbix — мощная и зрелая платформа мониторинга, которая отлично работает с MikroTik RouterOS. Официальный шаблон покрывает большинство потребностей, а система LLD-правил и custom items позволяет мониторить любые специфичные метрики. Для начала достаточно развернуть Zabbix через Docker Compose, настроить SNMP на роутере и применить стандартный шаблон — через 5 минут вы получите полноценный мониторинг с графиками и алертами. Для масштабных инсталляций используйте Zabbix Proxy, TimescaleDB и Network Discovery для автоматического добавления новых устройств.
MikroTik Router(s) ←[SNMP UDP 161]→ Zabbix Server ←[HTTP :8080]→ Zabbix Web Frontend
↓
PostgreSQL (хранилище данных)
mkdir -p /opt/zabbix && cd /opt/zabbix
Запустите стек:
Через 1-2 минуты откройте `http://<IP-сервера>:8080`. Логин: `Admin`, пароль: `zabbix`. Первым делом смените пароль администратора через **Users → Admin → Change password**.
#### Шаг 2: настройка SNMP на MikroTik
Для мониторинга через Zabbix на роутере должен быть включён SNMP. Настроим SNMPv2c для начала (для продуктивной среды используйте SNMPv3).
**SNMPv2c (базовая настройка):**
Параметр `addresses` — IP-адрес Zabbix Server. Это критически важно для безопасности: без ограничения любой хост в сети сможет читать метрики.
**SNMPv3 (рекомендуется для production):**
**Защита SNMP через firewall:**
**Настройка interface list для SNMP (ограничение видимости):**
По умолчанию SNMP отдаёт информацию обо всех интерфейсах. Если нужно ограничить:
> **Примечание:** в RouterOS ограничение видимости интерфейсов через SNMP напрямую не поддерживается. Фильтрация выполняется на стороне Zabbix (через фильтры в Discovery Rules).
#### Шаг 3: проверка SNMP с сервера Zabbix
Перед добавлением хоста в Zabbix убедитесь, что SNMP работает:
Если команда возвращает имя роутера — SNMP работает корректно.
#### Шаг 4: добавление MikroTik в Zabbix
1. Откройте Zabbix Web: **Data collection → Hosts → Create host**.
2. Заполните поля:
- **Host name**: `MikroTik-GW-01`
- **Visible name**: `MikroTik Gateway (192.168.88.1)`
- **Groups**: создайте группу `MikroTik Routers`
- **Templates**: найдите и добавьте `MikroTik RouterOS by SNMP` (встроенный шаблон)
3. На вкладке **Interfaces** добавьте SNMP-интерфейс:
- **Type**: SNMP
- **IP address**: `192.168.88.1`
- **Port**: `161`
- **SNMP version**: `SNMPv2`
- **SNMP community**: `MikroTikZabbix2024`
4. Для SNMPv3:
- **SNMP version**: `SNMPv3`
- **Security name**: `zabbix-mon`
- **Security level**: `authPriv`
- **Authentication protocol**: `SHA1`
- **Authentication passphrase**: `AuthZabbix2024!`
- **Privacy protocol**: `AES128`
- **Privacy passphrase**: `PrivZabbix2024!`
5. Нажмите **Add**. Через 1-2 минуты рядом с хостом появится зелёный индикатор SNMP — значит данные успешно собираются.
#### Шаг 5: официальный шаблон MikroTik RouterOS by SNMP
Шаблон `MikroTik RouterOS by SNMP` входит в стандартную поставку Zabbix 7.0. Он содержит:
**Items (метрики):**
- System: CPU utilization, memory used/total, disk used/total, uptime, firmware version
- Interfaces: traffic in/out (bits/s), errors in/out, discards in/out, operational status, speed
- Temperature: processor temperature, board temperature
- Voltage: input voltage
- Identity: system name, contact, location, description
**Triggers (встроенные):**
- High CPU utilization (>90% в течение 5 минут)
- High memory utilization (>90%)
- Device has been restarted (uptime < 10 минут)
- Firmware has changed
- No SNMP data collection (нет данных более 5 минут)
- Network interface link down
- High error rate on interface
**Discovery Rules (автообнаружение):**
- Network interfaces discovery — автоматически находит все интерфейсы и создаёт items/triggers для каждого
- Storage discovery — находит дисковые разделы
Шаблон покрывает 80% потребностей. Остальные 20% — custom items.
#### Шаг 6: custom items — мониторинг специфичных метрик
##### Температура процессора
Если шаблон не собирает температуру (зависит от модели), добавьте вручную:
1. **Data collection → Hosts → MikroTik-GW-01 → Items → Create item**
2. Параметры:
- **Name**: `CPU Temperature`
- **Type**: `SNMP agent`
- **Key**: `mikrotik.cpu.temperature`
- **SNMP OID**: `1.3.6.1.4.1.14988.1.1.3.11.0`
- **Type of information**: `Numeric (float)`
- **Units**: `°C`
- **Update interval**: `60s`
##### Количество Wi-Fi клиентов
Это таблица — для каждого Wi-Fi интерфейса свой OID. Используйте Discovery Rule для автоматического обнаружения Wi-Fi интерфейсов и создания items.
##### Активные VPN-сессии
Для подсчёта активных PPP-сессий (L2TP, SSTP, PPPoE):
Создайте item:
- **Name**: `Active VPN Sessions`
- **SNMP OID**: `1.3.6.1.4.1.14988.1.1.5.1.0`
- **Type of information**: `Numeric (unsigned)`
- **Update interval**: `30s`
##### Счётчики firewall-правил
Для мониторинга срабатываний конкретного firewall-правила потребуется SNMP OID из таблицы:
На MikroTik можно присвоить comment к правилу и искать по нему:
Для мониторинга счётчиков через Zabbix создайте SNMP Discovery Rule с OID `1.3.6.1.4.1.14988.1.1.2.1.1.2` (имена правил) и items для bytes/packets.
#### Шаг 7: настройка триггеров
Триггеры — это условия, при выполнении которых Zabbix генерирует алерт.
##### CPU > 80%
1. **Data collection → Hosts → MikroTik-GW-01 → Triggers → Create trigger**
2. Параметры:
- **Name**: `CPU utilization is above 80% on {HOST.NAME}`
- **Severity**: `Warning`
- **Expression**: `avg(/MikroTik-GW-01/system.cpu.util[hrProcessorLoad.1],5m)>80`
##### RAM > 90%
- **Name**: `Memory utilization is above 90% on {HOST.NAME}`
- **Severity**: `High`
- **Expression**: `last(/MikroTik-GW-01/vm.memory.util[memoryUsedPercentage])>90`
##### Интерфейс упал
Этот триггер уже включён в шаблон, но можно создать кастомный с другим severity:
- **Name**: `Interface {#IFNAME} is down on {HOST.NAME}`
- **Severity**: `Disaster`
- **Expression**: `last(/MikroTik-GW-01/net.if.status[ifOperStatus.{#SNMPINDEX}])=2`
##### Температура > 70°C
- **Name**: `CPU temperature is above 70°C on {HOST.NAME}`
- **Severity**: `High`
- **Expression**: `last(/MikroTik-GW-01/mikrotik.cpu.temperature)>70`
- **Recovery expression**: `last(/MikroTik-GW-01/mikrotik.cpu.temperature)<65`
Recovery expression с гистерезисом (65°C) предотвращает мигание триггера при температуре на границе порога.
##### Устройство недоступно
- **Name**: `{HOST.NAME} is unreachable by SNMP`
- **Severity**: `Disaster`
- **Expression**: `nodata(/MikroTik-GW-01/sysUpTime,300s)=1`
#### Шаг 8: графики и дашборды
##### Создание графика
1. **Data collection → Hosts → MikroTik-GW-01 → Graphs → Create graph**
2. Пример — трафик на WAN-интерфейсе:
- **Name**: `WAN Traffic (ether1)`
- **Items**: добавьте `Interface ether1: Bits received` и `Interface ether1: Bits sent`
- **Graph type**: `Normal`
- **Show working time**: включить
##### Создание дашборда
1. **Dashboards → Create dashboard**
2. Рекомендуемые виджеты:
- **Graph** — трафик WAN-интерфейса
- **Graph** — CPU и RAM загрузка
- **Plain text** — текущий firmware, uptime
- **Problems** — список активных проблем
- **Top hosts** — топ роутеров по CPU
Пример компоновки дашборда для NOC:
| Виджет | Размер | Описание |
|--------|--------|----------|
| System info | 1/4 экрана | Uptime, firmware, model |
| CPU & RAM | 1/4 экрана | Графики загрузки за 24ч |
| WAN Traffic | 1/2 экрана | In/Out за 24ч |
| Problems | 1/4 экрана | Текущие алерты |
| Top Talkers | 1/4 экрана | Интерфейсы с максимальным трафиком |
#### Шаг 9: Discovery Rules — автоматическое обнаружение
Low-Level Discovery (LLD) — мощная функция Zabbix, автоматически создающая items, triggers и graphs для обнаруженных объектов.
##### Автообнаружение интерфейсов
Уже включено в стандартный шаблон. Zabbix периодически опрашивает OID `1.3.6.1.2.1.2.2.1.2` (ifDescr), находит все интерфейсы и для каждого создаёт:
- Items: traffic in/out, errors, discards, status
- Triggers: interface down, high error rate
- Graphs: traffic graph per interface
Можно настроить фильтры, чтобы исключить ненужные интерфейсы:
1. **Data collection → Hosts → MikroTik-GW-01 → Discovery rules → Network interfaces discovery → Filters**
2. Добавьте фильтр: `{#IFNAME} not matches `loopback|dummy``
##### Автообнаружение DHCP-leases
Для мониторинга DHCP-пулов создайте custom Discovery Rule:
- **Name**: `DHCP Lease Discovery`
- **Type**: `SNMP agent`
- **Key**: `mikrotik.dhcp.discovery`
- **SNMP OID**: `discovery[{#POOLNAME},1.3.6.1.4.1.14988.1.1.17.1.1.2]`
- **Update interval**: `1h`
#### Шаг 10: мониторинг нескольких роутеров
Для масштабного мониторинга:
1. **Настройте SNMP на каждом роутере** (используйте скрипт):
2. **В Zabbix используйте Network Discovery** для автоматического обнаружения роутеров:
- **Data collection → Discovery → Create discovery rule**
- **IP range**: `10.0.0.0/24` (подсеть управления)
- **Checks**: SNMP (community `MikroTikZabbix2024`, OID `1.3.6.1.2.1.1.1.0`)
- **Device uniqueness**: IP address
- **Actions**: при обнаружении автоматически добавлять хост в группу `MikroTik Routers` и применять шаблон `MikroTik RouterOS by SNMP`
3. **Для распределённых сетей используйте Zabbix Proxy**:
Zabbix Proxy устанавливается на удалённой площадке, опрашивает локальные роутеры и передаёт данные центральному серверу. Это снижает нагрузку на WAN-канал и повышает надёжность.
#### Шаг 11: оповещения по email
1. **Alerts → Media types → Email**:
- **SMTP server**: `smtp.gmail.com`
- **SMTP port**: `587`
- **SMTP email**: `zabbix@company.ru`
- **Authentication**: username + password (или app password для Gmail)
- **Security**: `STARTTLS`
2. **Users → Admin → Media → Add**:
- **Type**: `Email`
- **Send to**: `admin@company.ru`
- **When active**: `1-7,00:00-24:00`
- **Severity**: выберите нужные уровни
3. **Alerts → Actions → Trigger actions → Create action**:
- **Name**: `Send alerts for MikroTik`
- **Conditions**: Host group = `MikroTik Routers`
- **Operations**: Send message to user `Admin` via `Email`
#### Шаг 12: оповещения в Telegram
Telegram — самый популярный способ получения алертов для русскоязычных администраторов.
**Создание бота:**
1. Напишите `@BotFather` в Telegram
2. Команда `/newbot`, задайте имя: `Zabbix MikroTik Bot`
3. Скопируйте **API Token**: `1234567890:AAHxxxxxxxxxxxxxxxxxxxxxx`
4. Создайте группу (или канал) и добавьте бота
5. Получите **Chat ID** через `https://api.telegram.org/bot<TOKEN>/getUpdates`
**Настройка в Zabbix:**
1. **Alerts → Media types** — найдите встроенный `Telegram`
2. Установите параметр **Token**: `1234567890:AAHxxxxxxxxxxxxxxxxxxxxxx`
3. **Users → Admin → Media → Add**:
- **Type**: `Telegram`
- **Send to**: `-1001234567890` (Chat ID группы)
4. Проверьте отправкой тестового сообщения: **Alerts → Media types → Telegram → Test**
Формат сообщений настраивается в шаблоне Media type. По умолчанию Zabbix отправляет:
### Проверка
#### Проверка сбора данных
После добавления хоста проверьте, что данные поступают:
1. **Monitoring → Latest data → Host: MikroTik-GW-01** — здесь отображаются все собранные метрики с последним значением и временем обновления.
2. Ключевые метрики для проверки:
- `system.cpu.util` — загрузка CPU (должно быть числовое значение)
- `vm.memory.util` — загрузка RAM
- `system.uptime` — аптайм (должен расти)
- `net.if.in/out` — трафик (должен меняться)
3. Если данные не поступают — проверьте индикатор SNMP на странице хостов. Красный значок означает ошибку.
#### Проверка SNMP на MikroTik
Если счётчик `packets-received` растёт — Zabbix успешно опрашивает роутер.
#### Проверка триггеров
Для тестирования триггера CPU > 80% можно искусственно нагрузить роутер:
Через 5 минут (avg интервал триггера) Zabbix должен сгенерировать алерт. Проверьте: **Monitoring → Problems**.
#### Проверка оповещений
1. **Alerts → Media types → Telegram → Test**: введите Chat ID и текст, нажмите Test — должно прийти сообщение.
2. **Alerts → Actions → Trigger actions**: убедитесь, что action включён (Status: Enabled).
3. **Reports → Action log**: здесь видна история отправки оповещений и ошибки.
#### Диагностика с сервера
### Типичные ошибки
#### 1. SNMP timeout — Zabbix не может подключиться к роутеру
**Симптомы:** красный индикатор SNMP на странице хостов, сообщение `Timeout while connecting`.
**Причины и решения:**
- SNMP не включён на MikroTik: `/snmp/set enabled=yes`
- Неправильный community string: проверьте совпадение в `/snmp/community/print` и настройках хоста Zabbix
- Firewall на MikroTik блокирует UDP 161: добавьте разрешающее правило перед drop
- Firewall на сервере Zabbix блокирует исходящий UDP 161
- Неправильный IP-адрес в `addresses=` community — Zabbix Server должен быть в списке
#### 2. Данные собираются, но триггеры не срабатывают
**Причины:**
- Триггер отключён (Disabled)
- Expression использует имя хоста, а не макрос `{HOST.NAME}`
- Период усреднения слишком большой (avg 1h вместо 5m)
- Данные не попадают в нужный item (проверьте ключ)
**Решение:** Проверьте expression через **Configuration → Hosts → Triggers → Test**. Zabbix 7.0 позволяет тестировать триггеры с текущими данными.
#### 3. Оповещения не приходят
**Причины:**
- Media type не настроен или отключён
- У пользователя нет Media (Send to пустой)
- Action не создан или отключён
- Severity действия не совпадает с severity триггера
- SMTP-сервер блокирует подключение (Gmail требует App Password)
- Telegram Bot Token невалидный или бот не добавлен в группу
**Диагностика:**
В веб-интерфейсе: **Reports → Action log** — показывает статус каждой попытки отправки.
#### 4. Высокое потребление дискового пространства
Zabbix хранит всю историю метрик в PostgreSQL. При мониторинге 10+ роутеров с интервалом 30 секунд база быстро растёт.
**Решение:**
1. Настройте Housekeeping: **Administration → General → Housekeeping**:
- History retention: `90d` (90 дней детальных данных)
- Trend retention: `365d` (1 год агрегированных данных)
2. Увеличьте интервал опроса для некритичных метрик (60s → 300s)
3. Для больших инсталляций используйте TimescaleDB вместо обычного PostgreSQL:
#### 5. Discovery обнаруживает слишком много интерфейсов
MikroTik создаёт множество виртуальных интерфейсов (bridge ports, VLAN sub-interfaces, loopback). Discovery создаёт items и triggers для всех.
**Решение:** Добавьте фильтры в Discovery Rule:
1. **Discovery rules → Network interfaces discovery → Filters**
2. Добавьте: `{#IFNAME} not matches `^(loopback|dummy|bridge-port).*``
3. Или включите только нужные: `{#IFNAME} matches `^(ether|sfp|wlan|bridge|wireguard|vlan).*``
#### 6. Ошибка "No SNMP data collection"
Это trigger от стандартного шаблона. Срабатывает, когда Zabbix не получает SNMP-данные более 5 минут.
**Возможные причины:**
- Роутер перезагружается
- Сетевая проблема между Zabbix и роутером
- SNMP community был изменён
- Роутер перегружен и не отвечает на SNMP-запросы вовремя
**Решение:** увеличьте timeout в настройках хоста: **Hosts → MikroTik-GW-01 → SNMP interface → Timeout**: с `3s` до `5s` или `10s`.
#### 7. Неправильное время в алертах
**Причина:** рассинхронизация времени между Zabbix Server и MikroTik.
На сервере Zabbix убедитесь, что timezone корректный:
#### 8. SNMPv3 — ошибка аутентификации
**Симптомы:** `Authentication failure` в логах Zabbix.
**Причины:**
- Несовпадение authentication/privacy паролей
- Неправильный protocol (SHA vs SHA256, AES128 vs AES256)
- Security name не совпадает
**Решение:** Удалите и пересоздайте SNMP-community на MikroTik, затем обновите настройки в Zabbix. Убедитесь, что длина пароля не менее 8 символов (требование SNMPv3).