左晨欢, 张 磊, 褚 彪
(合肥水泥研究设计院有限公司, 安徽 合肥 230051)
随着科技的飞速发展,数字化转型已经成为了当今企业发展的重要趋势,自 “十四五” 以来,我国政府提出了加快数字化转型部署的战略,旨在推动传统产业与数字技术的深度融合,提升企业的竞争力和创新能力[1]。
在数字化转型过程中,企业需要投入大量资源在生产管理(MES)、企业资源计划(ERP)等信息化软件中,而这些信息化软件的后续运行和维护需要人力、时间和金钱等资源的持续投入。因此企业亟需一套高效可靠的软件监控系统,该系统可以持续监控其他软件的运行状态,并在目标运行出现异常时输出警报,从而减少系统监控、故障排查、性能优化等环节所需的人工操作,达到节约企业资源的效果。
以某传统企业部署的数字化平台为研究对象,该平台搭建了一套分布式软件用于企业生产数据的信息化,其中包括基于Java 的管理系统、基于Golang 的设备数据采集系统、基于Python 开发的机理模型系统等。平台涉及了企业生产数据从源头采集到聚合计算展示,以及深度学习模型开发等多个功能,不同模块之间的数据调用相互依赖。信息化软件监控系统则以该平台为监控对象进行统一的架构设计与实现[2],保证监控系统的通用性与可参考性。
在监控系统引入之前,该平台的运行和维护完全依赖人工,需要等用户发现前端页面状态异常再去处理,技术人员每次都需要去逐个排查关联系统之间的问题所在点。而软件监控系统的设计目标恰恰是解决这种多软件环境下运行和维护难度大的问题,通过编写软件的状态采集接口与展示界面,将信息化软件的运行状态数据进行采集和展示,配合告警模块的警报输出,可以达成提前预知故障信息的效果。以此为基础,可实时自动监控企业中各类信息化软件的运行状态,减少潜在的风险[3]。
由于信息化是一项持续改造的工作,监控系统会逐步接入更多的软件应用,这将导致监控系统的复杂度和流量逐渐增大。因此,为了应对这一挑战,采用了基于构件设计的架构方法来构建监控系统,将监控系统分为多个构件组合运行,每个构件可以独立运行,并通过接口进行数据交互。根据流量分布和功能边界,监控系统的构件划分为数据采集模块、数据存储与管理模块、数据展示模块以及警报处理模块。
在该架构下,数据流量较大的数据采集器放置在各个目标程序的服务器上,可分散监控系统压力,采集系统定时从各个目标程序的接口采集状态数据,最终经过汇总存储在Prometheus 数据库中。基于Grafana 的数据展示模块和基于AlertManager 的告警模块由于实时流量较小但更面向用户,所以为了保障可用性,也单独作为构件与采集/存储端分开部署。监控系统的总体技术架构见图1。
图1 技术架构设计
2.2.1 数据采集模块
监控数据的采集方式主要分为推送和拉取。推送模式是指由被监控点位主动向PushGateway 组件推送状态数据,而Prometheus Server 则定期从Push-Gateway 拉取指标数据;拉取模式是指采集器主动去各个监控节点上直接拉取数据。采集方式常见设计规则如下:
1)推送式采集:需要实时监控的场景;数据量较小,但需要快速响应的场景;临时和批处理作业数据采集的场景。
2)拉取式采集:大量数据需要离线处理分析的场景;需要保持数据完整且快速到达存储模块的场景。
随着数字化业务的转型和迭代,采集对象的信息也会产生变更,因此及时地维护监控列表也是一项很重要的工作。每当监控目标的信息产生变动后,运维人员都需要去Prometheus Server 监控列表做更新。采集模块的结构设计见图2。
图2 数据采集模块结构设计
2.2.2 数据存储模块
在设计软件监控系统时,考虑到软件的状态数据往往是按照时间序列进行变化且采集频率较高(对于监控要求较高的可能达到1 s 一条),例如监控应用程序的响应时间、程序的接口访问频次、存储系统中磁盘的读写次数[4]等等。由于Prometheus 是开源且生态较为完善的时序数据库,因此使用Prometheus 为核心模块进行存储,并实现了以下功能。数据存储模块功能结构设计参考图3。
图3 数据存储模块结构
1)数据存储/规则引擎:数据存储默认选择存储在本地文件系统中,开发者也可选择配置远程HTTP端口进行读写,或者自主编写格式转换器存储在其他的OLAP 数据库中,转换的方式需要依据规则引擎中的配置。
2)目标/监控/节点管理:用户需要管理虚拟机、应用程序或容器等对象的IP、URL、端口和节点关联等信息。
3)用户管理:系统管理员需要根据用户工作内容分配不同等级的读写权限。存储模块的用户一般包括管理人员、监控人员和运维人员等。
4)警报管理:对于分布式软件的集群来说,不同软件的集群都需要单独告警,因此需要进行分组且在分组基础上配置不同的阈值规则。
5)API 接口:用户通过存储系统的接口可对外开放数据查询和数据接入功能。接口配置包括URL、数据格式、接口描述等字段。
2.2.3 数据展示模块
Grafana 作为一款开源且成熟的数据展示软件,在软件开发者的一定配置下即可投入使用,因此选用Grafana 作为展示模块的基础,在Grafana 软件的后台上编辑出符合用户需求的监控面板,这样监控系统既可以更快速展示监控数据,又可以减少软件监控系统的开发量。监控系统数据展示模块具有以下功能:
1)数据导入/可视化数据:导入多种数据源,包括数据库、文件和API 等,将原始数据以图表、表格、仪表板等形式进行展示。
2)自定义报表/报表模块化:用户利用拖拉拽形式可自主修改报表样式,修改完成后的图表组件可以转化为JSON 在模块间复用。
3)实时数据分析/大屏轮播:数据面板以及报表可根据刷新频率的设置实时更新数据,并且面板可设置为大屏模式进行轮播。
相比于写代码的方式编写前端界面,低代码操作的技术要求更低。在数据展示模块中可采用低代码的方式完成界面的编辑与发布,简化运维人员修改监控页面的工作量。数据展示模块功能结构设计参考图4。
图4 数据展示模块结构设计
2.2.4 数据告警模块
告警模块负责异常信息的管理与发送,运维人员可通过告警信息直接定位到问题软件的IP、并发状态和资源占用等信息,降低系统故障对业务的影响时长[5]。
AlertManager 是Prometheus 的一个开源适配组件,可以负责处理和发送告警通知,当Prometheus 收集到的数据满足预设的告警规则时,AlertManager 会处理并发送告警信息给指定的接收者,数据告警模块功能结构设计参考图5。
图5 数据告警模块结构设计
最终达到以下功能效果:
1)规则配置:规则指的是警报出现时告警系统针对警报的处理逻辑,配置方法包含规则配置文件、调用系统API 或终端客户端。
2)监控告警:告警系统从Prometheus 中持续获取监控数据,当发现数据出现异常时,将会按照告警规则进行判断并处理。
3)存储历史告警:告警记录默认存储在内存中,开发人员可以借助webhook 方式转发至关系型数据库存储过去发生的告警记录。
4)接收者配置:系统支持多种接收者类型,如邮件、短信、IM 软件等,企业可以根据实际需求配置告警接收者。
5)分组和去重:分组机制可以将相似性质的告警分类为单个通知,去重功能则有助于减少重复的告警,提高告警处理的效率。
6)抑制和静默:抑制和静默功能用于控制告警通知的发送。抑制的概念是指如果指定类型警报已经触发,则抑制其他类型警报的通知,静默是一种在给定时间内使警报静音的简单方法。
7)自动化操作:联动自动化工具在报警之后运行一些应急的脚本操作。
结合数据采集、存储、展示和告警模块的功能,软件监控系统可以实现信息化软件的自动监控与告警,减少企业中信息化系统的运维难度。
通过图6 所示的监控系统展示中心,用户可观察到各监控目标的历史数据与实时数据。对于数字化平台一类的分布式部署场景,展示中心可以汇总Java、Python、Mysql 等不同应用的指标进行聚合展示,从而提升运维的效率。
图6 软件监控系统展示中心
通过图7 中的警报管理中心,用户可以查看警报的统计数据、详细的警报内容和管理告警消息模板。当监控目标出现异常时,警报中心会解析异常数据并填充消息模板,然后将加工后的告警消息发送给指定接收人。通过系统及时地发送告警信息,企业可以有效避免因软件故障而导致的资产损失。
图7 软件监控系统警报管理中心
随着《中国制造2025》和 “数字化转型” 战略的推动,我国众多传统企业正在积极地迈向数字化的新阶段,企业生产经营活动也更加信息化与智能化[6]。软件监控系统旨在提升企业数字化转型的软件运维效率,减少转型带来的成本,主要完成以下工作:
1)在充分调研的基础上,对企业中常见信息化软件的维护方式进行了分析;对软件监控系统所需的关键功能进行了深入调研,包括数据采集器选型规则、Prometheus 数据库选型依据、展示模块和告警模块所需功能等;完成了软件监控系统的总体设计,包括技术架构设计和功能结构设计。
2)根据信息化软件的数据结构和流向,选择了某企业内的数字化平台作为监测对象,详细设计了数据采集、数据存储、数据展示和数据告警功能模块,并进行了软件监控系统的开发和部署。
监控系统目前在该企业的信息化部门运维工作中得到了广泛应用,并取得了显著的成果。通过精准的数据监控,运维人员能够及时发现和解决潜在的信息化系统问题,提高了工作效率,有效减轻了企业数字化转型的负担。