Docker 部署 Observium 网络监控
背景
为了实现对家中网络资产(比如路由/交换、AP、NAS 和打印机)的状态监控和告警,需要在 QNAP NAS 上搭建一套部署简易、低依赖的系统。这类轮子有很多:
- Observium:功能强大,社区版(CE)半年更新一次,商业版好像也不贵。文档有点烂,部分内容对不上。
- LibreNMS:是 Observium 的 fork,纯社区驱动(开源拖拉机)。文档也有点烂,部分内容对不上。
- Zabbix:功能强大,太重。
- Prometheus + Grafana:功能强大,太重。
在 LibreNMS 上折腾了 N 个小时,最终还是无法成功部署到 QTS,时间成本实在太高,果断放弃。最终方案如下:
- mbixtech/observium:pull 量超过 100 万,安全性应该有保障。
- linuxserver/mariadb:LinuxServer.io 的镜像一向质量稳定,几乎没出过问题。我 NAS 上的 qBittorrent 也是用他们家的镜像。
五分钟部署
首先解决国内 DockerHub 的访问问题:修改 QNAP Container Station 的配置文件,指向局域网的 HTTP 代理。注意修改存储池 CACHEDEV1_DATA
为 Container Station 的安装位置。
1 | /share/CACHEDEV1_DATA/.qpkg/container-station/script/run-docker.sh |
根据实际情况修改下面内容,插入到文件末尾的 exec dockerd $DOCKER OPTS
上方。
1 | export http_proxy="http://IP:PORT" |
重启 Container Station 使设置生效。
1 | /etc/init.d/container-station.sh restart |
随后创建容器网络,使得 Observium 和 MariaDB 可以通过 Docker 内部网络通信。
1 | docker network create observium-net |
按需修改数据库路径,使用下面的命令部署 MariaDB 数据库。
1 | docker run -d \ |
按需修改下列命令,部署 Observium。考虑到 QTS Web UI 已经占用 TCP 8080,这里将 Observium bind 至 TCP 8000。
1 | docker run -d \ |
建议使用 docker logs -f observiumapp
观察 Observium 是否正常启动。若一切正常,访问 http://NAS_IP:8000
即可进入 Observium 的 Web UI,添加设备进行监控。
SNMP 采集的数值存储在主机对应的 RRD 文件,Observium 全局配置均保存在数据库,且数据库连接参数采用环境变量注入。因此 Observium 容器不依赖任何文件形式的配置文件,比较干净,可以独立更新 Observium 和 MariaDB。
局限性和思考


SNMP 协议在实际中用的不多,也不被重视,所以不是所有厂商都能提供很好的支持:
- Aruba Instant 6.x 集群中每个 Instant AP 都支持 SNMP,但不支持 LLDP。统计信息仅局限于 AP 的资源占用,但不涉及 Wi-Fi 业务的统计。可能是故意阉割了此功能,以免影响 Aruba Central 的商业价值。
- ArubaOS 的 WLC 支持 SNMP 的 Wi-Fi 业务统计,但 Campus AP 不支持 SNMP。
- Cisco Mobility Express 仅 vWLC 支持 SNMP 和 CDP,但 subordinate APs 不支持 SNMP。vWLC 可以 Wi-Fi 业务等信息,例如所有子节点的 radio 状态(频道、已连接设备数等)、uptime 和 model 等。但无法显示频道宽度、信道利用率等深层信息。
- QNAP/Synology NAS 支持 SNMP,但不支持 LLDP。
- 某些 HP DeskJet 设置中启用 SNMPv1/v2c,但仅能通过 SNMPv1 接入。
思考:
- Observium 的仪表盘只能看个全局 error/alert message,和 Grafana 差距太大,但内置的图表也能满足基本需求。
- Aruba Instant 的 MIB 定义与固件一起发布,可以在 HPE Networking Support 获取。但 Observium 添加 MIB 的流程实在是繁琐,还需要手搓 PHP。
- Observium 原则上仅支持 MySQL/MariaDB。如果能接入 Cloudflare D1 或者 PostgreSQL,可玩性会更高。
以 Aruba Instant 为例导入自定义 MIB
埋个坑,等有空再填––如果半年后还没更新,请发邮件催更。
注意
SNMP 业务基于 UDP,经常被滥用为 DDoS 反射攻击的载体,所以不建议向公网暴露 SNMP 服务。