Nginx Proxy Manager + Prometheus Prometheus+ Grafana Grafana + Docker+ RouterOS 7.x.x+ Raspberry Pi 4 (ARM64)+ mktxp+ Blackbox exporter

基于 Docker 在树莓派上用 Prometheus 与 Grafana 全面监控 Mikrotik 路由器。

mktxp 通过 RouterOS API 采集指标给 Prometheus,Grafana 展示,Blackbox exporter 测延迟,nginx 提供 HTTPS。

✓ API 采集比 SNMP 更快且 CPU✓ 支持多设备同时监控且可扩展 ✕ 需 ARM 64 位系统否则要手动编译✕ API 凭证配置错误易导致图表为空

方案简介

本项目是一套开箱即用的 Mikrotik 路由器监控蓝图:以 Docker 编排 Prometheus、Grafana 与 mktxp 等服务,运行在 Raspberry Pi 上,对 RouterOS 设备进行系统健康、接口流量、延迟、DHCP、防火墙、无线等多维度监控。

与传统 SNMP 方案不同,它通过 RouterOS API 采集指标,作者认为这更快、对被监控设备 CPU 压力更小,且 API 更灵活、能采集复杂指标。适合拥有 Mikrotik 路由器、希望低成本(一块树莓派即可)自建网络监控的用户。项目目标是同时监控多台 RouterOS 设备,方案资源高效且可扩展。

亮点与能力

  • 系统健康监控:磁盘使用、CPU 负载、内存、公网 IP(IPv4 & IPv6)、系统运行时间、温度、电压
  • 接口监控:流量(bit/s、packets/s)、逐接口图表
  • 延迟监控:可自定义 ICMP/UDP ping、丢包率
  • DHCP 监控:活跃租约、MAC 地址、主机名、地址
  • 网络监控:路由、接口错误、接口状态、PoE 状态
  • 防火墙监控:规则流量、日志规则流量、IPv4 & IPv6、带宽、活跃用户
  • 无线监控:底噪、TxCCQ、客户端设备与数量、流量、信号强度、信噪比
  • Netwatch、CAPsMAN 监控(远程 CAP、注册、客户端、频率等)

组成与分工

  • Grafana:可视化面板,默认在树莓派 3000 端口提供仪表盘
  • Prometheus:指标采集与存储
  • mktxp:Python 编写的 Mikrotik Prometheus exporter,通过 RouterOS API 采集设备指标
  • Prometheus Blackbox exporter:测量网络延迟,默认探测 1.1.1.1、8.8.8.8、9.9.9.9
  • nginx:反向代理 Grafana,提供 HTTPS 访问
  • Docker Compose:编排全部服务,一条命令启动整套栈
  • AppArmor:可选的容器安全加固配置

前置要求

  • 路由器运行 RouterOS 7.x.x
  • Raspberry Pi 4,2 GB RAM(其他树莓派也许可用,但项目针对 ARM 64 位设计)
  • 需要树莓派安装 Ubuntu Server for ARM 64 bit;若用 Raspian(32 位)则需手动编译 mikrotik-exporter,因为没有预构建的 32 位 Docker 镜像

在目标机器上安装 Docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

注意:旧版 Python 实现的 docker-compose 已弃用,需迁移到 Compose V2。

实施步骤

1. 准备 Mikrotik 路由器

在路由器上创建具有 API 与只读权限的组:

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

创建属于该组的用户:

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

2. 准备树莓派

安装 Ubuntu Server for ARM 64 bit 并安装 Docker(命令见前置要求)。

3. (可选)为 mktxp 构建 Docker 镜像

若你的架构不是 linux/amd64、linux/arm/v7、linux/arm64,需要自行构建:

bash
git clone https://github.com/akpw/mktxp.git
cd mktxp
docker build . -t leonmorten/mktxp:latest

4. 克隆仓库并启动

bash
git clone https://github.com/M0r13n/mikrotik_monitoring.git
cd mikrotik_monitoring
docker compose up -d

5. 修改配置

编辑 mktxp/mktxp.conf,加入你自己路由器的凭证。完成后即可在树莓派的 3000 端口打开 Grafana 仪表盘。

使用与配置要点

  • 验证成功:浏览器打开 http://<树莓派IP>:3000 查看 Grafana 仪表盘
  • 延迟监控:默认探测 Cloudflare(1.1.1.1)、Google(8.8.8.8)、IBM(9.9.9.9),可按需修改 blackbox/blackbox.yml
  • 多设备监控:在 mktxp/mktxp.conf 中添加任意多台(Mikrotik)设备即可
  • 启用 HTTPS:生成自签名证书并配置 nginx 反向代理:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./nginx/nginx-selfsigned.key -out ./nginx/nginx-selfsigned.crt

替换 ./nginx/nginx.conf 内容,将 80 端口重定向到 443,并把 / 代理到 http://grafana:3000/

  • AppArmor 加固:拷贝 profile、重新加载并用 armored compose 文件启动:

cp ./docker-armor /etc/apparmor.d/docker-armor
apparmor_parser -r -W /etc/apparmor.d/docker-armor
docker compose -f docker-compose-armored.yml up -d

注意事项与常见问题

图表为空?

可能原因:

  • 被监控 RouterOS 设备凭证无效,可用 /user/print detail 验证
  • 被监控设备的主机/端口配置错误,检查 IP 或主机名
  • RouterOS 上 API 服务未启用,可用 /ip/service/print detail 验证

为什么不用 SNMP?

作者经验:SNMP walk 慢且 CPU 占用高;API 快得多、对被监控设备 CPU 压力更小,且 API 能执行任意 RouterOS 命令、采集复杂指标。

docker-compose up 报 PermissionError?

bind-mount 的目录保留宿主机权限(如 rwxrwxr-x),容器只能读不能写。mktxp 有特殊性:若配置缺少某些键(如 ipv6_firewall),它会自动向 mktxp.conf 补写 ipv6_firewall=false 而不是失败——这一特性在权限受限时可能导致容器崩溃。

优缺点

  • ✓ API 采集比 SNMP 更快且 CPU
  • ✓ 支持多设备同时监控且可扩展
  • ✕ 需 ARM 64 位系统否则要手动编译
  • ✕ API 凭证配置错误易导致图表为空

出处

本方案挖掘自开源项目 M0r13n/mikrotik_monitoring,方案内容与实施命令均来自其 README 原文。

方案出处
M0r13n/mikrotik_monitoring:Monitor your Mikrotik router with Prometheus and Grafana
370 star Monitor your Mikrotik router with Prometheus and Grafana

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。