基于态势感知的网络交换机监测系统研究与实现★
2024-04-07苏杰和赖桂森李自浩
苏杰和, 赖桂森, 李自浩, 邱 义
(1.中国南方电网有限责任公司超高压输电公司广州局, 广东 广州 510700;2.厦门大学嘉庚学院信息科学与技术学院, 福建 漳州 363105)
0 引言
当前,中国互联网领域迅猛发展。中国互联网络信息中心发布的第52 次《中国互联网络发展状况统计报告》显示,截至2023 年6 月,我国互联网用户规模达10.79 亿,互联网普及率达76.4%[1]。数字基础设施建设加快的同时,网络设备由于长时间运行造成设备老化等因素导致负荷率过高,设备出现各种故障,尤其在工业控制领域造成的损失更是难以估量。因此,针对网络设备的运行状态、端口使用情况和网络效能进行监测,对保障网络畅通尤为重要。
传统的网络运维方式多为人工维护,一旦出现断网情况大多依据个人经验定位故障,存在工作效率低、定位故障不准确以及网络恢复时间长的问题。随着网络应用和结构越来越复杂,传统的网络运维已经无法满足要求。本文主要利用Python 程序设计语言实现对电力系统中各站点交换机进行自动化、全时段和全网段监测,对网络运行状况和效能进行分析,及时发现网络问题,确保网络运行稳定可靠,并能在网络故障时准确定位,大大提高了运维效率,降低了运维成本。
1 系统设计
本系统采用B/S 架构,前端使用HTML5 实现页面效果和布局控制,后端使用Python 通过支持的通信协议访问不同品牌的交换机,实时获取交换机的运行时间、工作状态等数据,不断更新页面显示并推送到前端展示,维护人员可以通过任意浏览器终端实时查看所选交换机设备及端口工作状态数据,基本数据包括交换机CPU 占用率、内存占用率、当前温度、风扇状态、端口连接状态和上下行网络速率等信息。系统总体设计架构如图1 所示。
图1 基于态势感知的交换机运行状态监测系统架构
1)开发语言:Python,是一种面向对象、动态数据类型的高级编程语言,广泛应用于Web 开发、数据分析和人工智能等新兴领域,并且集成了许多功能强大、丰富框架和工具,方便快速实现和部署。
2)集成开发环境:PyCharm Community Edition。
3)开发环境:Windows 10。
4)监控信息存储数据库:MySQL。
1.1 交换机监控数据获取
交换机态势感知最重要的是获取交换机运行过程的核心信息,主要是监控交换机的CPU 占用率、内存占用率、设备温度、端口流量和连接状态等,不同厂商的交换机甚至同一厂商不同型号的交换机支持配置通信协议各不相同,而且协议格式和定义也不一致。当前网络设备配置与管理方式主要有CLI、SNMP和NETCONF。
1)命令行界面(Command Line Interface,CLI)是最基本也是最常见的交换机管理方式,专业维护人员通过串口或网络连接以Telnet 或SSH 协议远程登录并执行相关命令进行配置和管理[2],CLI 提供的配置选项和高级功能需要维护人员具有一定的命令行操作技能。图2 为华为某型号交换机Telnet 登录后通过命令display cpu-usage 获取的交换机CPU 占用率。
图2 通过CLI 获取CPU 占用率
2)简单网络管理协议(Simple Network Management Protocol,SNMP)是一种专门用于管理网络节点,如服务器、工作站、路由器和交换机的网络管理标准协议[3]。SNMP 是TCP/IP 协议中基于UDP 协议传输的应用层协议,实现简单可靠,是目前应用最广泛的网络管理协议。SNMP 对外提供了操作MIB(Management Information Base)对象的命令,MIB 是一个树形结构的数据库并且存储了交换机的各种配置参数和状态信息,每个MIB 对象都用对象标识符OID 来唯一标识,OID 描述了管理对象在树种的精确位置,通过从MIB 树形结构的根部进行遍历,可获取整个网络设备所管理的对象的值或描述。本文使用MIB对象来查询交换机设备信息、监控设备状态和自动发现网络故障的典型树形结构,如图3 所示。以cisco 为例,一个完整的OID 为iso.org.dod.internet.private.enterprise.cisco,其数字表达为:1.3.6.1.4.1.9。
图3 MIB 树形结构示例
3)网络配置协议(Network Configuration Protocol,NETCONF Protocol)是一种IETF RFC6241 提出的新型网络配置和管理协议,基于可扩展标记语言XML,使用RPC 机制实现服务器与客户端的通信[4-5]。它提供了一种集中式远程管理、监测设备的方法。
NETCONF 协议可分为4 层:
1)安全传输层:用于交换机设备与应用管理程序之间建立通信路径。
2)消息层:提供RPC 消息框架,用于生成请求和响应。
3)操作层:定义一组基本操作,维护人员可使用XML 编码的参数调用。
4)内容层:描述了网络管理相关的配置数据与状态,不同设备厂商实现各不相同[6-7]。
根据设计要求,Python 应用程序每5 min 获取一次交换机数据。针对不同型号的交换,根据其支持的协议,采用不同的方法获取相关监控数据。交换机支持SNMP 时,需要先安装net-snmp 和net-snmp-uitls服务程序,再利用设备MIB 对象的OID 列表,读取设备状态的OID 数据。交换机支持NETCONF 时,使用NETCONF 的get-config 或者get 指令,从设备中查询相关监控数据,编程实现上可使用Python 的ncclinet模块访问设备API 接口。当交换机型号不支持SNMP或NETCONF 协议时,使用Python 的Telnetlib 模块,通过自动化脚本远程访问交换,执行相应查询命令,并解析返回文本来获取状态数据。
1.2 监控数据存储设计
交换机监控数据使用MySQL 数据库存储,Java、PHP 和Python 等主流编程语言提供了MySQL 数据库访问接口,其优点为高效、安全和可跨平台。因速度快、体积小、成本低、支持面向对象和安全性高等优点,被广泛使用在网站开发。监控数据的数据库表设计如表1 所示。
表1 监控数据存储表
1.3 态势感知关键技术实现
态势感知是在一定时间空间范围内对运行数据、环境要素和状态信息等感知,理解和评估当前状态并预测将来趋势,达到研究其发展规律,更好地协助制定决策和判断局势[8]。态势感知核心内容包括要素提取、态势评估和态势预测。为实时监控网络运行状态、快速定位网络故障,系统主要从以下几个方面实现态势感知。
1)态势展示及安全报警。最基础性的展示便是当前监控状态的数据可视化展示。本系统使用Echarts实现监控状态展示。如图4 所示,显示某一台交换机当前运行状态,界面中第一行显示了当前交换机的CPU 占用率、内存使用率、当前交换机温度以及风扇运行状态,运行正常时数据显示为黑色,当交换机运行状态异常时数据则显示为红色,需要快速对选中的交换机进行安全检查。位于下方的则是交换当前连接状态,绿色为端口有设备接入并显示连接速率,灰色为端口无设备接入,并且统计了当前交换机的上行和下行总速率。
图4 交换机当前监控数据
2)数据分析。态势分析过程中最重要是监控信息历史数据记录及变化趋势,从历史数据中可以分析网络故障时监控数据变化情况,并作为后续态势评估的一个重要数据来源和依据。本系统使用Echarts 实现监控数据的历史信息展示。Echarts 是一个使用JavaScript 实现的开源可视化图表库,现隶属于Apache 开源基金会,底层依赖矢量图形库ZRender,提供了丰富的可高度个性化定制图表类型和交互式特性,支持数据的动态更新和兼容当前绝大多数浏览器。图5 所示为CPU 占用率、内存占用率、温度和风扇状态历史记录展示。
图5 交换机监控信息历史数据
3)安全评估。采用分类处理、规则设立、模式匹配和聚类分析等数据挖掘方法,对CPU、内存和温度等长期运行状态和运行日志进行特征提取,分析处理相关数据,识别网络出现故障时监控数据变化趋势,总结规律并建立相关知识库。
4)态势评估。主要通过智能算法和知识推理对网络运行状态及趋势进行有效分析和预测,通过对网络故障问题的检测和感知,查找网络运行过程存在的故障隐患,保障网络运行环境[9-10]。系统将原始数据去重、去空和去错误后的海量格式化网络状态数据作为实时数据源输入,建立态势感知处理模型,并对数据进行实时或离线的挖掘和分析,通过对数据行为、脉络、层次及趋势进行梳理,分析获取数据中隐藏的安全故障,其分析过程如图6 所示。
图6 态势预测分析流程
2 结论
当前工业网络结构越来越复杂,工业设备监控和管理要求也越来越高,交换机作为网络通信基础必须时刻保证正常运行。本系统通过Python 结合CLI、SNMP 和NETCONF 协议,实现了实时获取交换机运行状态数据,包括CPU 占用率、内存占用率、主机温度、风扇运行状态、网络端口连接状态与上下行速率,展示效果清晰直观,用户使用简单方便。当网络发生故障时,可以实现对故障点进行精准定位,并配合态势感知技术进行故障预警,缩短了故障定位时间,大大减轻了维护人员的工作量,保障了工业生产过程中的通信稳定。为了进一步扩展系统功能,利用Python强大的数据分析与处理能力,持续获取所有管理的交换机数据,对交换机在不同时段的工作状态和性能进行分析,从而支持通信网络的规划,最大限度发挥交换机性能。同时,还可以配置SMTP 服务器的邮件提醒和SMS 短信平台监测提醒服务,当交换机出现故障时,能快速以邮件或短信通知维护人员尽快处理网络问题,保障工业网络的实时畅通,为工业生产提供有力保障。