☰
OpenMontage部署实战:用SNMP自动生成资产台账和网络拓扑
2026/10/8 8:06:44 网站建设 项目流程

第一次在GitHub上翻到OpenMontage这个项目,是当时手头正压着一个挺头疼的活:整理某园区网两百多台设备的资产台账和链路关系。传统方式就是用Excel一张张登记IP、型号、位置、上联设备,再拿Visio手工画拓扑。两三个人忙了一周,画出来的图还跟实际网络对不上。后来我试着把OpenMontage部署起来,用SNMP自动扫了一遍,资产清单和分层拓扑图基本是自动生成的,那张手工画了一周的图,我再也没更新过。

OpenMontage本质上是一个基于Django的开源网络运维辅助系统,帮你把“机房和网络里到底有什么设备、它们之间怎么连、当前状态如何”这三个问题一次性回答掉。它能做的不是像Zabbix那样盯着性能指标做告警,也不是像SolarWinds那样重型的商业NPM平台,而是落在两者之间:自动发现网络设备、录入资产信息、绘制拓扑图、生成健康度报告。对做网络运维、弱电项目交付、数据中心管理的人来说,这个定位非常实用。这篇算是我从部署、配置、踩坑到二次开发的完整使用笔记,尽量把我实际遇到的细节都写出来。

1. OpenMontage是什么:它和传统监控系统到底有什么不一样

1.1 一个“轻量但全能”的IT资产可视化入口

很多人第一次看到OpenMontage的界面,会下意识拿它跟Zabbix、Nagios比,觉得功能不够“监控”。这种对比其实方向不太对。OpenMontage更像是一个“带监控能力的网络资产管理系统”,它的核心逻辑是先把你网络里的设备找全,再说监控的事,而不是反过来。

我用一个实际场景解释。传统监控系统的逻辑是你先手工录入每台设备的IP、端口、监控模板,它才肯开始采集数据。设备一多,录入本身就是灾难。OpenMontage的思路是给你一个网段,它自己用SNMP、ICMP去发现设备,然后主动采集每台设备的系统信息、接口信息、型号、位置描述,再把这些数据整理成统一的资产台账。它内部有Django自带的管理后台,所有设备、报告、拓扑都能在一个Web界面上查看和导出。

从技术实现上看,OpenMontage使用了Django框架,数据层默认支持SQLite和MySQL,采集任务靠Python的SNMP库和ICMP探测完成。前端展示部分用SVG绘制网络拓扑,报告可以用HTML方式打开,也能导出Excel和PDF格式。这样一套组合装下来,部署成本很低,最适合那种“我需要快速摸清网络家底”的运维场景。

1.2 最适合用OpenMontage的几类场景

结合我的实际使用体验,它不是拿来替代现有监控体系的,而是恰好补齐了几个空白:

  • 项目交付和网络验收:弱电工程收尾时,需要给甲方提供一份完整的设备清单和拓扑图,OpenMontage扫一遍就能导出来,做验收材料特别省事。
  • 老网络资产梳理:很多单位网络经过多年迭代,设备台账早就乱了。用OpenMontage对新老网段做一次自动发现,几分钟就能比对手工记录找出差异。
  • 中小规模日常巡检:几十到几百台设备的量级,专门上SolarWinds太贵,Zabbix配置又太重。OpenMontage提供的基础健康度检查、接口状态、连通性检测,正好够用。
  • 数据中心机房的链路可视化管理:配合LLDP/CDP邻居信息,它能自动画出设备之间的物理链路,不用再爬进桥架里对着标签猜线。

我并不是说OpenMontage一定比Zabbix优秀。真实体会是,它的定位更聚焦在“从网络里自动长出资产和链路信息”这件事上,而这恰恰是传统监控系统最不擅长、最费人工的环节。

2. 部署落地:从零到能扫出全网设备的完整过程

2.1 环境准备:Python、数据库和系统选择

OpenMontage是Python项目,基于Django框架开发,部署环境不算挑,Linux和Windows都能跑。我自己是在CentOS 7和Ubuntu 20.04上都部署过,对比下来Ubuntu更省心一点,主要原因是Python环境干净,OpenSSL和编译工具链都齐全。

数据库方面,默认用SQLite就能启动,但如果你要管理上千台设备,建议直接上MySQL。要注意的是,OpenMontage在初始化数据库时依赖Django的ORM建表,如果原本库里有同名旧表,migration容易报冲突,最好是给这个系统单独建一个库和一个专用账号,不要跟其他业务系统共用。字符集一定选utf8mb4,否则设备描述里带中文或特殊符号时,采集数据入库会直接报错。

Python版本我建议用3.6到3.9之间,依赖库和Django版本对这个区间兼容性最好。太新的Python版本容易让个别依赖包编译失败,反而给自己添麻烦。

2.2 安装和初始化步骤

安装流程整体不复杂,核心步骤如下:

git clone https://github.com/OpenMontage/OpenMontage.git cd OpenMontage pip install -r requirements.txt cp settings.example.py settings.py

配置文件里重点修改三处:数据库连接信息、ALLOWED_HOSTS、时区。时区一定要改成Asia/Shanghai,默认UTC导致报告时间比北京时间慢8小时,我第一次没注意,生成的报告时间全不对,排查了半天才发现是这个问题。

配置改完之后执行数据库初始化和启动:

python manage.py migrate python manage.py createsuperuser python manage.py runserver 0.0.0.0:8000

启动成功后,浏览器访问http://服务器IP:8000,用刚才创建的超级管理员账号登录,进入管理后台,接下去就可以开始配置扫描任务了。

2.3 第一个坑:管理后台登录后页面空白

我第一次部署完,登录后台后页面白屏,浏览器控制台报了一堆JS加载错误。排查半天发现是静态文件没有收集。Django生产模式需要执行python manage.py collectstatic,把项目里的静态资源统一拷贝到STATIC_ROOT指定目录。测试环境里如果改了DEBUG配置,也要重新执行一次,否则CSS和JS文件全部指向不存在的路径。

还有一个容易踩的权限问题:OpenMontage的定时扫描任务如果通过crontab调度,脚本执行时会以系统普通用户身份运行,而Web服务可能是root起的,两者对SQLite文件或日志目录的写权限不一样。最典型的表现就是Web端手动扫描正常,但定时任务一跑就报数据库锁或权限拒绝。解决方法是统一启动用户,或者把日志和数据库文件的属主改成运行cron的用户。

3. 设备发现与拓扑绘制的核心原理:SNMP和邻居协议的双轮驱动

3.1 SNMP发现:真正的资产采集手段

网络里ping一通的在线设备,只是最基本的发现动作。想拿到设备名称、型号、操作系统、接口信息这些管理数据,靠的是SNMP协议。OpenMontage的发现机制默认会尝试用SNMP v2c的公共团体串(通常是public)去读取设备的几个核心OID,比如系统描述和接口表。

我的实践体会是,扫描参数直接决定资产数据质量。SNMP超时时间默认比较保守,在跨三层设备扫描时,路由器或核心交换机的响应可能超过500毫秒,如果超时设置太短,很多设备会被误判为SNMP不可达。并发数也要控制,我曾把并发调到50去扫一个千兆核心下的汇聚交换机,结果部分老设备CPU直接飙高,SNMP响应反而变慢。后来稳定在20并发,每个OID查询间隔50毫秒,效果最好。

SNMP团体串是发现能否成功的关键。很多历史遗留设备的团体串仍然是public,但如果设备改过团体串,需要在OpenMontage里提前配置对应的团体串列表。它虽然支持多个团体串,但我建议还是先用一个统一的团体串把全网基础信息扫出来,再对特殊设备单独调整,这样排查问题更容易。

3.2 LLDP和CDP邻居信息:拓扑图为什么能画得准

拓扑图不是靠猜的,它是读取设备的邻居表拼出来的。大多数可网管交换机支持LLDP,思科设备还支持CDP,OpenMontage通过SNMP读取这些协议的邻居信息,比如lldpRemTable或cdpCacheTable,能知道当前设备哪个端口连着对端设备的哪个端口。把所有设备采集到的邻居关系合并,就是一张完整的物理链路图。

这里的逻辑有点像拼图:每一台设备只告诉系统它自己这个端口跟谁是邻居,OpenMontage把全网设备的邻居条目汇总起来,就能按设备之间发现出一条条边。如果某台设备不支持LLDP/CDP,那它连接到核心的这段链路就是断的,拓扑图上会出现一个孤立节点。这种情况下,就得靠配置里的手工链路补充功能,把缺失的连线补上。

拓扑图的横纵布局用的是分层算法,自动根据设备层级关系分配到画布不同位置。生成的是SVG图形,好处是放大不失真,浏览器直接打开后还能点选节点查看设备详情。我实际用下来的建议是:自动布局能用,但设备超过300台时,SVG的节点排布会比较密,建议导出后再按业务区域整理一份。

3.3 关键配置项:网段扫描、发现深度和隐身设备

网段扫描配置有几个参数需要理解透,不是设置完就万事大吉:

  • 网段和掩码:定义了扫描范围。建议按实际VLAN划分来建,比如一个扫描任务对应一个办公网段,另一个对应服务器网段,避免把无用网段也扫进去。
  • 发现深度:控制递归发现层数。正常情况下设为2-3层足够,从核心到接入通常不超过3层。设得过深会耗费大量时间在SNMP轮询上,而且容易扫到跨网段的安全设备。
  • 端口探测:不是所有设备都会在第一时间响应ICMP,比如禁ping的Windows服务器。建议把TCP端口探测加上,对22、80、443、3389这类常用端口做轻量探测,能够识别出部分SNMP不可达但端口开放的设备。

我自己在扫一个隔离网段时,发现一台核心设备始终没有出现在拓扑里,排查后发现是有ACL规则过滤了来自采集服务器的SNMP请求。这类“隐身设备”靠工具本身是扫不出来的,只能定期对比交换机ARP表和扫描结果来发现。这也是自动化资产梳理始终需要人工复核一点的原因。

4. 从监控数据到报告:OpenMontage输出物的使用心得

4.1 健康度报告:重点看哪些指标

OpenMontage采集完设备后,会生成一份综合健康度报告。报告不是简单罗列ONLINE/OFFLINE状态,而是把每台设备的SNMP可达性、接口状态、CPU内存负载(如果设备支持)综合起来打分。这个分数不能完全等同于设备真实健康度,因为部分简单设备不支持读取性能OID,它只能判定“在线且可管理”,而无法覆盖设备深层故障。

我的经验是重点看三个维度:接口错误包增长趋势、设备掉线历史记录、拓扑中节点的可管理状态变化。前两个直接反映链路质量和设备稳定性。相比之下,单纯在线状态的意义有限,因为一台设备在线不代表网络质量没问题,入口方向丢包严重时,SNMP轮询照样可能超时。

报告支持导出Excel和PDF。我实际给别人交付项目时,更多采用Excel格式导出资产清单,因为甲方通常要拿去做二次筛选和补充。PDF格式更适合给领导做汇报,打印出来也比较正式。

4.2 拓扑图的迭代更新机制

OpenMontage不会在每次扫描后立即覆盖原有拓扑图,而是根据配置的扫描周期频繁更新节点状态和链路关系。新发现的设备会被自动添加上去,失联设备会标记为异常而不是直接删除。这个设计我觉得很合理,网络运维里设备临时离线太常见,直接删除会造成历史记录断裂,标记异常反而能追溯从什么时候开始不稳定的。

拓扑图还有一个容易被忽略的价值,就是链路变更审计。网络团队调整过接线后,自动生成的拓扑里链路关系会和之前版本不同。对比两次扫描的拓扑差异,可以在没有一个字变更记录的情况下,还原出什么时候发生了什么链路变化。对于没有CMDB的小团队,这个功能等于白送了一套变更溯源能力。

4.3 把报告接入自己的巡检流程

报告生成以后,不要只丢在服务器上隔几天手动看一次。我把它做进了日常巡检流程里:每天自动扫描结束后,导出当天的资产在线率汇总,对比前一天数据;每周导出一次完整资产清单,做差异比对;每月导出一份PDF健康度报告归档。这样虽然没做什么复杂开发,但巡检记录一下子规范了很多,被问到“这个月网络稳定吗”的时候,手头随时有数据可以回答。

5. 我踩过的几个坑:完整的排查链路和修复方案

5.1 SNMP超时导致设备状态误报

第一次部署完,我设置了一个覆盖全网的扫描任务,结果报告里显示有二十几台设备离线。我以为是网络故障,跑到机房逐个看,发现设备都正常运行。当时挺困惑,回到服务器手动snmpwalk其中一台设备IP,却发现能正常读到数据。

排查过程是这样的:先看采集日志,发现这些设备在扫描时SNMP响应超时;再对比配置,发现我把SNMP超时设成了300毫秒;然后手动用300毫秒超时去请求这两台设备,果然超时。原因是核心层到接入层区隔了三层路由,加上部分设备在认证后响应较慢,正常响应时间就要600毫秒左右。最终我把超时调整到1500毫秒,重试次数从1次改成2次,重新扫描后再也没有误报。

这个坑提醒我,扫描参数必须基于现场网络延迟特征来调整,不能直接照抄默认值。

5.2 拓扑图上出现奇怪的跨网段连线

拓扑图生成后,我发现有几台设备之间连着一条完全说不通的链路,比如数据中心的一台存储交换机,跟办公楼的一台接入交换机显示直连。按物理网络规划,这俩根本不可能直接相连。

我一开始怀疑LLDP数据解析错误,后来逐台设备检查邻居表,发现交换机上有一个三层VLAN接口,系统把VLAN接口当作物理链路参与了拓扑拼接。OpenMontage对接口类型的判断依赖SNMP的ifType字段,如果设备接口表里没有正确标识物理口和VLAN口,就会发生跨网段连线的错误。

解决办法有两个方向:一是扫描完成后,在设备详情里把VLAN接口标记为“非物理接口”,系统就不会再拿它生成链路;二是检查交换机是否启用了CDP/LLDP over VLAN,有些情况下VLAN接口本身确实会通告邻居消息。手动修正一次后,后续扫描会继承修改结果,不会每次都被覆盖。

5.3 定时任务形同虚设:cron环境变量问题

我还遇到过OpenMontage定时扫描任务完全不工作的情况。Web界面上手动点扫描是好的,但cron日志里只记录了任务开始,然后就没有任何后续输出。折腾了一两个小时才发现,本质上是cron执行时缺少Python虚拟环境的PATH和LD_LIBRARY_PATH,导致采集脚本实际运行时报导入库失败,但错误被系统日志吞掉了。

排查链路的最后一个关键环节,是我在crontab里加了完整的环境变量定义后才恢复:

0 2 * * * source /opt/venv/bin/activate && cd /opt/OpenMontage && python manage.py scan --all >> /var/log/openmontage/scan.log 2>&1

cron环境和交互式shell环境完全不同,这个问题在Django类项目里太常见了。我后来给自己定了个规矩:所有定时任务脚本脚本第一行先加载虚拟环境,所有日志明确写绝对路径。从那以后再没出现过“任务执行了但其实什么都没干”的尴尬。

6. 二次开发与扩展:让OpenMontage适配企业环境

6.1 基于Django Admin做资产字段扩展

OpenMontage的资产模型字段对普通梳理够用,但如果要做企业级资产管理,通常需要扩展。它基于Django开发,意味着你可以在项目里新增自己的模型,定义主机负责人、业务所属部门、维保合同编号、物理位置坐标等字段,然后和OpenMontage原始的设备表建立外键关联。

我自己做的是新增了一个business_info表,把每个网段的业务归属人、联系电话、设备采购日期维护进去。然后用Django Admin自带的list_display和list_filter,给资产列表页加上按部门筛选、按网段分组的功能。这样每周导出报告时,HTML页面里就能直接按业务线查看,不用再导到Excel重新透视。

如果你不想改动源码,更好的做法是写一个独立的小脚本,定频从OpenMontage数据库里读取设备表内容,写入外部的CMDB系统。尽量不修改核心源码,这样以后版本升级不会遇到合并冲突。

6.2 通过API把数据送给其他监控平台

OpenMontage本身没有完整的对外REST API,但Django应用可以很方便地增加一个只读接口。我在项目里写了一个简单的视图,返回JSON格式的设备在线状态和拓扑链路列表。这个接口主要供两个地方调用:一个是办公楼的综合告警大屏,把核心设备在线状态做成大屏看板;另一个是内部的网络变更审批流程,提交变更前自动检查目标设备是否在线、是否存在关联链路告警。

设计这个接口时我额外加了一层Token认证,而不是直接用Django的Session认证,因为外部系统调用时不会去登录页面敲账号密码。只读接口也不开放写操作,避免外部误操作改了资产数据。

如果你对二次开发不熟,最简单的扩展方式是用定时器导出数据,再写脚本导入其他平台。虽然不够实时,但对于资产数据这类低频变更的信息完全足够了。

6.3 实际运维流程中怎么安排扫描频率

关于扫描频率,我的建议是分三层:资产发现扫描一周一次,状态检测五到十分钟一次,深度SNMP采集一天一次。资产发现扫描比较重,需要遍历网段和读设备邻居表,太频繁反而影响设备性能。状态检测轻量,ping一下或者尝试连接端口就能判断,适合高频执行。深度采集负责收集CPU、内存、接口流量这些信息,一天一次已经能形成趋势曲线。

我见过有些朋友把资产发现设置成每十分钟一次,结果设备侧SNMP进程疯狂响应,核心交换机CPU负载上升了好几个百分点。扫描工具的节奏应该跟着监控需求和网络承载能力走,不是越频繁越好。

7. 一些不是必要但很好用的周边做法

7.1 把扫描服务器单独放一个管理网段

OpenMontage的扫描流量如果全部走业务网络,容易被防火墙和安全设备拦,而且SNMP请求本身是明文协议,安全风险也得考虑。我以前图省事,直接部署在一台办公网内的机器上,结果总有一些设备SNMP协议被安全策略误拦,扫描结果时好时坏。后来把采集服务器挪到带外管理网段,并且只允许从这台服务器向目标设备发起SNMP和ICMP请求,问题一下子少了很多。

7.2 数据定期备份要按天做

OpenMontage的数据库是所有扫描成果的唯一存储点,一旦损坏,整个网络资产信息都得重来。我用crontab每天凌晨把数据库文件复制到备份目录,再用rsync同步到远程备份服务器,恢复时直接替换文件重启服务就行。这种方案简单粗暴,但在我维护的多个实例里,它真的救过我两次数据库损坏的命。

7.3 日志要单独开一个文件

如果你同时维护多个OpenMontage实例,建议每个实例的日志都写到独立路径,文件名带上IP或机房标识。否则多个实例共用一套日志配置,排查问题时所有任务记录混在一起,根本分不清哪条扫描日志是哪台服务器的。

我在实际使用中最大的感受是:OpenMontage这类工具的价值不在于替换已有监控体系,而是承担“自动把物理网络变成可管理数据”这种脏活累活。只要部署时把SNMP参数、定时任务、数据库备份这三件事做好,它就能成为一个长期发挥作用的资产盘点基础设施,给后面的监控、变更、巡检流程打底。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询