Prometheus+
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。
方案简介
本项目是一套开箱即用的 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 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。