You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Steve Brunton dc93f93f62 yaml update 1 year ago
.circleci switch to go modules (#58) 4 years ago
collector Merge pull request #132 from nshttpd/nshttpd/more-metrics 1 year ago
config Add capsman station metric 2 years ago
examples moved docker-compose down into examples directory 2 years ago
scripts fixed typo in permissions assignment (#53) 4 years ago
.gitignore #36 attempt to fix api login auth issue (#38) 4 years ago
Dockerfile use debian instead of alpine 4 years ago
Dockerfile.arm64 various issues fixing (#49) 4 years ago
Dockerfile.armhf Fix docker build to make runnable executable (#39) 4 years ago
LICENSE updated copyright date 2 years ago clean up and adding in additional files 6 years ago
Makefile switch to go modules (#58) 4 years ago add support for LTE interface 2 years ago
VERSION switch to go modules (#58) 4 years ago
go.mod yaml update 1 year ago
go.sum yaml update 1 year ago
main.go add in go runtime metrics 2 years ago

Docker Pulls


tl;dr - prometheus exporter for mikrotik devices

This is still a work in progress .. consider master at the moment as a preview release.


A Prometheus Exporter for Mikrotik devices. Can be configured to collect metrics from a single device or multiple devices. Single device monitoring can be configured all on the command line. Multiple devices require a configuration file. A user will be required that has read-only access to the device configuration via the API.

Currently the exporter collects metrics for interfaces and system resources. Others can be added as long as published via the API.

Mikrotik Config

Create a user on the device that has API and read-only access.

/user group add name=prometheus policy=api,read,winbox

If lte is enabled it requires also the test policy.

/user group add name=prometheus policy=api,read,winbox,test

Create the user to access the API via.

/user add name=prometheus group=prometheus password=changeme

Single Device

./mikrotik-exporter -address -device my_router -password changeme -user prometheus

where address is the address of your router. device is the label name for the device in the metrics output to prometheus. The user and password are the ones you created for the exporter to use to access the API.

User and password flags can be set with the MIKROTIK_USER and MIKROTIK_PASSWORD environment variables, respectively.

./mikrotik-exporter -address -device my_router

Config File

./mikrotik-exporter -config-file config.yml

where config-file is the path to a config file in YAML format.

example config
  - name: my_router
    user: prometheus
    password: changeme
  - name: my_second_router
    port: 8999
    user: prometheus2
    password: password_to_second_router
  - name: routers_srv_dns
    user: prometheus
    password: password_to_all_dns_routers
  - name: routers_srv_custom_dns
        port: 53
    user: prometheus
    password: password_to_all_dns_routers

  bgp: true
  dhcp: true
  dhcpv6: true
  dhcpl: true
  routes: true
  pools: true
  optics: true

If you add a devices with the srv parameter instead of address the exporter will perform a DNS query to obtain the SRV record and discover the devices dynamically. Also, you can specify a DNS server to use on the query.

example output
mikrotik_interface_tx_byte{address="",interface="ether2",name="my_router"} 1.4189902583e+10
mikrotik_interface_tx_byte{address="",interface="ether3",name="my_router"} 2.263768666e+09
mikrotik_interface_tx_byte{address="",interface="ether4",name="my_router"} 1.6572299e+08
mikrotik_interface_tx_byte{address="",interface="ether5",name="my_router"} 1.66711315e+08
mikrotik_interface_tx_byte{address="",interface="ether6",name="my_router"} 1.0026481337e+10
mikrotik_interface_tx_byte{address="",interface="ether7",name="my_router"} 3.18354425e+08
mikrotik_interface_tx_byte{address="",interface="ether8",name="my_router"} 1.86405031e+08