Как развернуть систему сбора логов сетевого оборудования Mikrotik (Grafana + Loki)
Когда сеть растет, бегать по SSH или Winbox к каждому роутеру для просмотра логов становится невозможно. Пришло время внедрять современные инструменты.
В основе системы сбора и анализа логов лежат три компонента: Promtail (сборщик), Loki (хранилище/агрегатор) и Grafana (интерфейс для просмотра). Они работают в тесной связке.
- Grafana — это основной инструмент для визуализации, где строят графики и дашборды.
- Loki — это база данных для логов от тех же разработчиков. Она работает по принципу Prometheus (популярного инструмента для метрик), но хранит тексты логов, индексируя только их метки для быстроты.
- Promtail — это сборщик, который следит за лог-файлами, добавляет к ним нужные метки и отправляет данные в Loki.
Приложение (Пишет логи в файл) -> Promtail (Читает файлы, добавляет метки) -> Loki (Хранит логи) <- Grafana (Визуализирует полученные данные)
Установить docker и docker-compose вы можете по этой статье.
Шаг 1. Подготавливаем файлы конфига
Создаём директории:
sudo mkdir -p /opt/logging/data_loki
sudo mkdir /opt/logging/promtailКонфигурация содержит 3 сервиса: Loki, Promtail и Grafana Создаём файл compose:
services:
loki:
container_name: loki
image: grafana/loki:3.4.2
command: "-config.file=/etc/loki/config.yaml"
volumes:
- ./data_loki/config.yaml:/etc/loki/config.yaml:ro
- ./data_loki/storage:/loki/storage
restart: unless-stopped
networks:
GrafanaLoki:
ipv4_address: 192.168.10.50
promtail:
image: grafana/promtail:3.4.2
command: "-config.file=/mnt/config/config.yaml"
volumes:
- ./promtail/config.yaml:/mnt/config/config.yaml:ro
- /var/run/docker.sock:/var/run/docker.sock
- ./data_promtail/positions:/var/log/positions
restart: unless-stopped
ports:
- "1514:1514/udp"
networks:
GrafanaLoki:
ipv4_address: 192.168.10.60
grafana:
image: grafana/grafana-oss:11.5.2
container_name: grafana
restart: unless-stopped
volumes:
- ./data_grafana:/var/lib/grafana
networks:
GrafanaLoki:
ipv4_address: 192.168.10.70
networks:
GrafanaLoki:
external: true
name: GrafanaLokiСуществует два основных подхода к сбору логов с контейнеров:
- Первый вариант подразумевает использование плагина Loki Docker Plugin, который обеспечивает прямую доставку логов в Loki.
- Второй подход (реализованный в нашем случае) основан на настройке сбора логов на хостах через Docker-сокет.
Процес создания файла конфига promtail:
# Создание файла конфигурации
sudo nano /opt/promtail/config.yaml
# Сбор логов с Docker контейнеров
- job_name: docker-logs
docker_sd_configs:
- host: unix:///var/run/docker.sock
relabel_configs:
- source_labels: [__meta_docker_container_name]
target_label: container
- source_labels: [__meta_docker_container_log_stream]
target_label: stream
# Сбор логов из файлов (например, системные логи)
- job_name: system-logs
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
# Сбор логов Микротик через Syslog
- job_name: syslog
syslog:
listen_address: 0.0.0.0:1514
listen_protocol: udp
syslog_format: rfc3164
labels:
job: syslog
use_incoming_timestamp: false
relabel_configs:
- source_labels: ['__syslog_message_hostname']
target_label: host
- source_labels: ['__syslog_message_hostname']
target_label: instance
- source_labels: ['__syslog_message_app_name']
target_label: application
- source_labels: ['__syslog_message_severity']
target_label: level
- source_labels: ['__syslog_message_hostname']
target_label: routerboard
Процес создания файла конфига loki:
# Создание файла конфигурации
sudo nano opt/data_loki/config.yaml
#Конфигурация Loki
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/storage/chunks
rules_directory: /loki/storage/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
storage_config:
tsdb_shipper:
active_index_directory: /loki/storage/index
cache_location: /loki/storage/tsdb-cache
filesystem:
directory: /loki/storage/chunks
schema_config:
configs:
- from: 2026-03-13
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093Шаг 2. Создание сети для Docker
Для создания собственной сети Docker с заданными диапазонами адресов используйте команду docker network create с флагами --subnet и --gateway, либо настройте сеть в docker-compose.yml. Это позволяет изолировать контейнеры и назначать им статические IP.
docker network create \
--driver bridge \
--subnet 192.168.10.0/24 \
--gateway 192.168.10.1 \
GrafanaLokiШаг 3. Запуск сервиса
Читаем конфигурацию сервисов, создаем и запускаем контейнеры согласно конфигурации:
sudo docker-compose up -dОткрываем графану по IP-адресу сервера, порт 3000, рекомендую сразу выпустить сертификат и пустить через Nginx Proxy Reverse пароль и логин по умолчанию admin:admin
Переходим на вкладку: Connection -> Data sources -> Добавляем Loki в URL прописываем - http://192.168.10.50:3100 адресс сервиса описанный ранее в конфигурации
Шаг 4. Настройка Dashboard Grafana и Mikrotik
Dashboard используемый в шпаргалке: https://slepoy.site/files/Mikrotik-1773382968348.json Существует масса готовых Dashboard для mikrotik например:
- https://grafana.com/grafana/dashboards/14420-mikrotik-monitoring/
- https://grafana.com/grafana/dashboards/13679-mikrotik-mktxp-exporter/
- https://grafana.com/grafana/dashboards/18460-mikrotik-dashboard/
Настройка MikroTik выполняется в два этапа. В первую очередь необходимо настроить параллельную отправку всех системных журналов (логов) на удаленный сервер (Action Remote):
Второй этап — настройка параметров удаленного сервера непосредственно на MikroTik. В поле Remote Address необходимо указать данные вашего сервера, все остальные параметры выставляем как на картинке:
После этого все логи с каждого настроенного оборудования MikroTik станут доступны непосредственно в дашборде Grafana: