Monitoring using MikroTik Container feature (SNMP Exporter + Prometheus + Grafana).
Find a file
2025-06-03 09:59:45 +02:00
grafana/provisioning First commit 2024-07-17 23:24:09 +02:00
prometheus First commit 2024-07-17 23:24:09 +02:00
snmp First commit 2024-07-17 23:24:09 +02:00
container_image.png First commit 2024-07-17 23:24:09 +02:00
LICENSE Initial commit 2024-07-17 23:21:32 +02:00
README.md Fix container version 2025-06-03 09:59:45 +02:00

MikroTik Monitoring with Grafana Dashboard

A self-contained monitoring stack (Grafana + Prometheus + SNMP Exporter) deployed inside a MikroTik RouterOS v7+ container environment to collect and visualize device metrics using SNMP.

This solution leverages the MikroTik Container feature introduced in RouterOS v7 to avoid the need for external servers.


Table of Contents


Overview

This project demonstrates how to deploy a complete monitoring stack directly on a MikroTik router using containers. It consists of:

  • SNMP Exporter for retrieving SNMP metrics.
  • Prometheus as the time-series database and metrics scraper.
  • Grafana for dashboard visualization.

All components run within the MikroTik device itself, avoiding the cost and complexity of external infrastructure.

Grafana Dashboard Screenshot


Prerequisites

  • MikroTik RouterOS v7+ with Container feature support.
  • A device with sufficient resources (e.g., RouterBoard L009UiGS ARM).
  • Basic familiarity with WinBox or CLI.
  • External storage (e.g., USB drive) recommended for container volumes.

Setup

1. Enable SNMP on MikroTik

  • Navigate to IP > SNMP
  • Enable SNMP (tick the checkbox), leave defaults.

2. Enable Container Support

a. Check if Container is enabled:

From a New Terminal in WinBox:

/system/device-mode/print

Ensure the output includes container: yes.

b. If not enabled:

  1. Download:

    • Visit MikroTik Download Archive
    • Select your RouterOS version and architecture (from WinBox in System > Resources)
    • Download the all_packages ZIP
  2. Install:

    • Extract container-*.npk from the ZIP
    • Upload it to Files via WinBox
    • Reboot the device
  3. Activate:

    • Run: system/device-mode/update container=yes
    • Perform a full shutdown (unplug power or press the power button of the physical device)
    • Verify again with: system/device-mode/print

3. Configure VETH and Network

After each step press Apply and then OK buttons.

a. Create a Docker bridge:

  1. Bridge > Bridge: Add new interface named docker, leave defaults

  2. IP > Addresses: Add Address 192.168.50.1/24, Network 192.168.50.0, Interface docker

  3. IP > Firewall > NAT:

    • Chain: srcnat
    • Src. Address: 192.168.50.0/24
    • Action: masquerade

b. Add VETH interfaces:

  • Interface → VETH tab, add 3 interfaces (Name → Address, Gateway):

    • grafana192.168.50.100/24, 192.168.50.1
    • snmp_exporter192.168.50.101/24, 192.168.50.1
    • prometheus192.168.50.102/24, 192.168.50.1

c. Bridge the interfaces:

  • Bridge > Ports: Create a New Bridge Port for each VETH interface and add it to the docker bridge.

4. Prepare Configuration Files

  1. Clone this repository and extract grafana/, prometheus/, snmp/ folders.

  2. Edit the following:

    • Grafana Datasource (grafana/provisioning/datasources.yml):

      url: http://192.168.50.102:9090 # change it according with your prometheus VETH IP
      
    • Prometheus Config (prometheus/prometheus.yml):

      • static_configs.targets: use your MikroTik LAN IP
      • relabel_configs.replacement: 192.168.50.101:9116 (change it according with your snmp_exporter VETH IP)
  3. Upload grafana/, prometheus/, snmp/ folders to MikroTik via Files.


5. Define Environment Variables and Mounts

a. Container > Envs (Grafana only):

Key Value
GF_SECURITY_ADMIN_USER admin
GF_SECURITY_ADMIN_PASSWORD mikrotik
GF_SECURITY_SIGN_UP false

b. Container > Mounts:

Use your own src path (e.g. path to an external usb drive attached to MikroTik)

Container Src Path Dst Path
grafana /usb1/grafana/provisioning /etc/grafana/provisioning/
prometheus /usb1/prometheus /etc/prometheus
snmp /usb1/snmp /etc/snmp_exporter

6. Deploy and Start Containers

a. Configure Container settings:

Container > Container > Config:

  • Registry URL: https://registry-1.docker.io
  • Tmp Dir: /pull (customizable e.g. path to an external usb drive attached to MikroTik)

b. Create containers:

After you fill out the fields of each container press Apply and wait for download/extracting until in status appear stopped (if it appear is all OK) then go to create the next container. If it shows error, Copy the container, delete the old, and re-try to Apply.

Container > New Container

Container Remote Image Interface Others
Grafana grafana/grafana:9.1.0 grafana Envslist grafana, Mounts grafana, Root Dir /usb1/grafana_dir
Prometheus prom/prometheus:v2.53.0 prometheus Cmd: --config.file=/etc/prometheus/prometheus.yml, Mounts prometheus, Root Dir /usb1/prometheus_dir
SNMP Exporter prom/snmp-exporter:v0.26.0 snmp_exporter Cmd: --config.file=/etc/snmp_exporter/snmp.yml, Mounts snmp, Root Dir /usb1/snmp_dir

Root Dir is customizable e.g. path to an external usb drive attached to MikroTik


Accessing the Services

Ensure to start containers in order (SNMP Exporter, Prometheus and Grafana) and enjoy.
Start and Stop the container using the respective button.
Ensure the router and host are on the same LAN or routing is configured properly.

Service URL
Grafana http://192.168.50.100:3000
Prometheus http://192.168.50.102:9090
SNMP Exporter http://192.168.50.101:9116

Grafana credentials: admin / mikrotik


Known Issues & Troubleshooting

  • Grafana “No Data” Bug on ARM:

    • Try increasing $scrape_interval to 30s in the dashboard query.
    • Fixed in Grafana ≥ 9.1.0
  • Container Store Errors:

    • Ensure container root dirs are unique.
    • Deleting a container deletes its root directory.
    • Always verify the root dir is marked as container store in Files. (and not as directory)
  • Startup Failures:

    • If container fails with execve: No such file or directory, verify paths, mounts, and retry with a different root dir.

References