摘 要:建设一套能够实时监控图书馆所有IT基础设施的告警系统,应用于图书馆网络,及时发现并解决异常故障,提高故障排查和维护效率。通过方案选型对比测试,选取最佳开源解决方案,实时采集监控IT基础设施的运行状态;针对图书馆专用设备,二次开发采集自定义指标;通过微信实现告警信息的实时传递和交互;对接Grafana实现监控数据可视化展示。基于Nightingale和微信实现的监控告警系统,大大提高了图书馆IT管理部门的工作效率和服务水平,同时可保证图书馆的正常运营和信息安全。
关键词:Nightingale;开源软件;监控告警
中图分类号:TP39 文献标识码:A 文章编号:2096-4706(2024)13-0151-05
Application of Real-time Monitoring and Alarm System Based on Nightingale in Libraries
QIU Hui, OU Chen
(Changsha Library, Changsha 414000, China)
Abstract: It constructs a real-time monitoring and alarm system for all IT infrastructures in a library, applied to the library network, to promptly detect and resolve abnormal faults, improving the efficiency of fault diagnosis and maintenance. Through comparative testing of solution selection, the best open-source solution is chosen to collect and monitor the operational status of IT infrastructure in real time. For library-specific equipment, secondary development is carried out to collect custom metrics. Real-time transmission and interaction of alert information is achieved through WeChat, and monitoring data visualization is realized by integrating with Grafana. The monitoring and alert system implemented based on Nightingale and WeChat has greatly improved the work efficiency and service level of the library's IT management department, while ensuring the normal operation and information security of the library.
Keywords: Nightingale; open-source software; monitoring and alarm
0 引 言
图书馆的IT基础设施涵盖服务器、网络设备、数据库、自助借还书设备以及图书馆自动化管理和活动系统等核心要素[1]。随着数字化进程的不断推进,数据中心服务器数量激增,新的自助服务设备也逐渐遍布整个图书馆,同时服务异常的发生频率也在不断上升。故障的发现和处理仅仅依赖读者或工作人员的反馈,导致问题解决的延迟,这不仅效率低下,还会令读者对图书馆服务质量和系统可用性产生质疑,严重影响了图书馆的声誉和正常运营。因此,图书馆亟须开发一套能够实时监控IT基础设施,在发生异常时能够及时发送告警通知的系统。这一系统能够提前发出警报,实时检测故障,并通过电子邮件、短信、微信等多种方式发送告警通知,同时提供详尽的数据,以帮助相关人员追踪和定位故障。
在本文中,我们将探讨长沙图书馆实时监控告警系统建设方案的选择过程,分享了基于开源软件Nightingale和微信的解决方案,结合特定自助服务设备的二次开发,实现了对图书馆IT基础设施的实时监控和告警。
1 选型思路
监控告警系统的获得一般有采购商业软件或服务、利用开源软件开发、完全自主开发三种方式。对于资金充裕的图书馆,可采购商业软件,所采购的商业软件运行稳定,售后有保障,不足之处一是成本较高,商业软件收费一般按照功能模块、监控数量授权等多种方式计费,二是商业软件内部源码与数据不对外公开,除厂商能够定制开发之外,使用者无修改权限,而且成本较高,周期较长[2]。
另外,现在基于云计算的云监控服务也越来越普遍,目前提供这类服务的主要有云计算服务提供商(比如腾讯云、阿里云等)和专门提供特定监控服务的监控宝、360网站服务监控等,这类服务对通用Web服务、网站运行的监控效果很好,甚至免费版即可满足中小型图书馆的需求,缺点是对于图书馆一些特定服务或是不联外网的图书馆业务服务设备监控不方便。
从经费预算、自动化程度高低、灵活开放程度等方面结合来看,开源软件有比较明显的优势。笔者调研后了解到,市面上使用人数较多、开源社区相对活跃的知名开源解决方案有Zabbix、Nagios、Prometheus、Nightingale。其中Nagios因配置使用比较烦琐、软件更新慢、UI界面比较过时等因素而被排除在外,而Prometheus主要应用于容器监控场景。因此通过本地测试对比及笔者单位实际情况,最终决定基于Nightingale搭建本单位的监控告警系统。
监控告警消息的推送通常采用邮件、短信、微信等方式。邮件可能出现接收不及时容易被运维人员搁置的问题,短信平台的使用及通知会产生额外的费用。微信作为时下最为流行的社交软件,已成为工作和生活中必不可少的工具,对消息处理的即时性远超邮件[3]。微信公众平台默认具备丰富强大的功能,并且提供完备的接口开发文档。监控告警系统通过调用微信的接口向微信推送告警消息,使用完全零成本。
2 需求分析
长沙图书馆对实时监控告警设备的需求包括服务器、存储设备、交换机、无线AP接入点、客流统计摄像头、自助办证借还服务(ACS)以及nginx、tomcat等Web组件。这些设备的配备对图书馆的业务运营至关重要,一旦出现故障将对图书馆的正常运营造成直接影响。
另外,许多设施设备自带管理系统,例如服务器的虚拟化管理平台、无线控制器的管理后台、磁盘阵列的控制器等,这些系统大多具备监控告警功能,但是这些系统的告警通知主要是以系统内部消息为主,以邮件推送为辅,且分散不统一。
为了减少重要性较低告警消息对正常工作的干扰,同时又尽可能全面地采集关键监控数据,需要针对监控告警情况采取分类配置策略。具体措施包括:
1)根据设备的故障程度和对读者借阅服务质量的影响程度进行分类和优先级排序。
2)针对不同类别的设备或故障情况,设置不同的监控阈值、告警方式、通知人员等参数。
3)对于一些关键设备或服务,采取实时监控和告警以确保及时发现并处理故障。
4)对于一些重要性较低的设备或服务,通过定期巡检或状态监测的方式来避免不必要的干扰。
3 系统构建
在这个实时监控告警系统中,设置了不同的监控项和阈值,以便能够及时发现设备的故障或异常情况。当某个设备出现异常时会立即发送告警信息,同时也会通过微信将告警信息推送给管理员。管理员在接收到告警信息后,可以及时采取相应的措施进行修复和处理。同时,管理员也可将告警系统与数据可视化工具对接,查看实时监控数据、历史数据和告警信息等。
3.1 监控系统架构
夜莺监控系统是一套衍生自Open-Falcon的互联网监控解决方案,融入了滴滴的最佳实践[4],由于改动太大,优化太多,产品已经无法与Open-Falcon平滑兼容,故而单开一个项目。上线至今已有上千家商业公司在生产环境中使用,后续将会逐步优化。与Open-Falcon相比,夜莺监控系统在性能、易用性、可用性方面都做了大幅改进,开源至今已累计迭代100多个版本[5]。笔者于2021年部署调试完毕,下面将介绍基于夜莺监控v4.0.2版本。
Nightingale主要由Agent、Transfer、TSBD、Index、Judge、Monapi、RDB、Job、AMS九个组件组成,架构图如图1所示。
整体看来,夜莺的核心处理逻辑可以分成四大块:
1)以Agent为核心的数据采集模块。
2)以Transfer为核心的相关模块。负责传输、存储链路,同时对外暴露查询接口,用于查询索引信息和历史监控数据。
3)以Judge为核心的告警引擎模块。依据告警策略对监控数据做阈值判断,如果监控数据触发阈值会生成告警事件,推给Redis队列,由Monapi(Alarm)模块来消费处理[6]。
4)用户交互部分。提供Web页面给终端用户操作,进行数据查看、告警策略配置、告警采集配置、告警屏蔽配置、告警事件查看等。
3.2 系统工作流程
Agent组件用于采集监控目标数据,可自动采集目标的各种指标数据,默认可采集Linux、Windows、MySQL、Redis、MongoDB、交换机、Nginx、LVS等20个大类共计200多项指标[7]。只要安装了Agent的机器,就会自动采集各项指标,主动上报给Transfer组件。对于一些非标准的监控指标,它提供了Plugin插件机制,支持用户使用任意编程语言二次开发采集插件。
Agent采集的数据统一由Transfer组件转发,TSDB(时序数据库)和Index组件负责指标数据存储、索引,提供API接口供用户进行快速查询、数据可视化处理等。
Judge组件用于判断Transfer推送的指标数据是否关联了告警策略,若触发了告警,则会生成一个告警事件Event并写入Redis数据库中。Monapi(Alarm)则不断地从Redis中读取数据,并给告警事件补充信息,然后生成一条真正要通知的告警消息Alert回推给Redis,Redis数据库后面对接各种各样的Sender发送模块,发送模块可以通过邮件、电话或、微信、钉钉、HTTP回调等方式推送告警消息。
Nginx作为反向代理来代理AMS、Job、RDB、Monapi、Transfer、Index的前端请求,负责用户管理界面的呈现。RDB、AMS、Job三个组件主要用于与管理员的交互,RDB是用户资源中心,AMS是资产管理系统,Job是任务执行中心。Agent除了上报监控数据给Transfer之外,还会上报本机信息给AMS,注册本机信息到资产管理系统,另外就是与Job模块交互,拉取要执行的任务,上报任务执行结果。Monapi是一个集成了Alarm和Portal模块的综合接口,提供API接口给上层应用使用。比如配置告警策略存储到数据库中,并通过库同步到Portal模块。
3.3 关键指标采集
监控告警系统核心之一在于对指标参数的采集,下面重点介绍一些关键指标采集情况:
1)图书馆重要数据监控指标。读者办证、滞纳金缴纳等需要依赖图书馆自助设备实现,实时监控证卡消耗、现金存取等数据能及时提醒管理人员对设备作补证和清空钱箱等常规维护。得到数据之后,按照固有的json数据格式进行封装(监控指标名称Metric、监控实体Endpoint加多组监控数据和属性标签key Value Tags),利用Agent组件的数据接收HTTP接口来获取数据并推送给服务端。同样的方式,长沙图书馆根据需求,以同样的方式将实时借还书数据、无线认证在线量、网站访问量、机房动环指标等数据分别推送到夜莺监控系统,完成实时监控。异常告警及恢复推送结果如图2、图3所示。
//指标数据json封装
payload=[{...{"endpoint":ip,"metric": "Card", timestamp": ts, "step": 5, "value": Card_total,
"counterType": "GAUGE","tags": "card=total"} ] ...
//指标数据以post方式发送至Agent接口,上传至服务器
requests.post("http://ip:port/api/collector/push", data=json.dumps(payload))
2)网络交换机状态监控。网络交换机通过snmp(简单网络管理协议)采集交换机的各项监控信息,并推送到夜莺监控系统,而snmp协议采集需要对应指标的OID值(对象标识符),根据不同的交换机型号调整采集时所使用的OID值。要监控一台设备须提前获取该设备的MIB库或者是直接联系售后获取对应资源的OID值[8]。每个指标对应不同的OID值,获取OID值就能实时监控各项指标的数据,比如交换机温度、接口流量、CPU使用率、内存使用率、防火墙连接数,等等。
3)其他指标监控。图书馆部分设备无法通过部署Agent组件进行监控,但又要列入监控项,如摄像头、数据库、网站响应及日志分析统计等,为此长沙图书馆利用夜莺监控系统Prober模块相对应的ping、MySQL、NET_Response、Nginx等组件采集器来集中采集这些应用。Prober模块其实是使用Telegraf插件接口封装而成的,Telegraf是一个开源的采集器,夜莺监控系统通过Telegraf采集各种中间件配置实现页面化,直接在页面上配置,可以同时承载大量采集任务,某个采集器出现故障,也可以自动摘除,有可靠的高可用保障。
3.4 对接微信实现告警消息实时推送
微信公众平台通过服务号、订阅号、小程序、企业微信(原企业号)等产品来满足各类个体、组织通过微信开展服务的需求。服务号定位侧重于提供更为强大的业务服务和用户管理能力,订阅号旨在为媒体和个人提供一种新的信息传播方式,小程序可使开发者快速高效地开发一个小程序[9],企业微信是专业的办公管理工具,支持与微信消息互通。订阅号每天群发1条消息,服务号有每月群发4条消息的限制,无法满足消息告警数量的限制,故而选择企业微信来实现。
微信企业号发送监控消息有对应的Chat组件,注册登录企业微信后,添加企业应用,生成AgentId和Secret,在Chat配置文件中填入正确的企业微信标识CorpID、AgentId、AgentId,最后在Alarm组件中将IM消息的告警地址指向Chat服务地址即可完成企业服务微信与OpenFalcon告警消息的关联,运维管理人员使用普通微信关注企业号就可以在微信聊天框中收到告警消息了。
3.5 对接Grafana实现监控数据可视化
在实现监控数据可视化方面,Grafana是一个流行的开源工具,它提供了丰富的数据可视化功能,可以十分轻松地与众多监控系统对接,夜莺监控系统提供专门的对接Grafana的数据接口。安装和配置好Grafana后,即可通过拖拽和放置各种图表、插件和过滤器的方式来创建自定义监控仪表盘[10]。
4 应用效果评价
自监控系统上线并投入使用以来,我们不仅改变了原来被动的工作状态,还实现了对整个业务流程的主动监控和有效管理。目前,我们能够实时监测系统的运行状态,及时发现并解决潜在的问题,确保了系统的稳定性和可靠性。结合开源可视化工具Grafana,自定义监控可视化监控大盘,可迅速掌握全馆重要设备和服务的基本状态,在网络突发流量分析、故障快速定位处理等方面极大地提高了运维工作效率,如图4所示。
得益于企业微信丰富强大的功能,我们将一些常见运维管理系统嵌入微信,这样不但可以及时收取告警消息,还能在不登录服务器的情况下进行相关服务操作,如图5、图6所示。
5 结 论
综上所述,基于Nightingale和微信实现的IT基础设施实时监控告警系统在图书馆具有很高的实用性。该系统不仅能跟随开源社区进行软件迭代更新,还能灵活地进行二次开发,以支持未来不断新增的软硬件设施设备。这个系统大大提高了图书馆IT管理部门的工作效率和响应速度,提高了图书馆IT基础设施的可靠性和稳定性,为图书馆的正常运营和信息安全提供有力保障。
参考文献:
[1] 姚辉.云数据中心安全管理平台设计及实现 [D].北京:中国科学院大学,2016.
[2] 郑海山,林俊伟.图书馆数据中心运维中开源软件的应用 [J].现代图书情报技术,2014(6):100-106.
[3] 张小龙.微信十年的产品思考 [EB/OL].[2023-10-18].https://developers.weixin.qq.com/community/business/doc/000ea481874f281ed59bd4ed854c0d.
[4] 滴滴开源.nightingale(夜莺)v1.4.0介绍文档 [EB/OL].[2023-10-18].https://gitee.com/didiglobal/nightingale-nightingale.
[5] 北京快猫星云科技有限公司.夜莺项目介绍 [EB/OL].[2023-10-18].https://flashcat.cloud/docs/content/flashcat-monitor/nightingale/introduction/.
[6] 秦晓辉.开源运维监控系统Nightingale-系列04-架构详解 [EB/OL].[2023-10-18].https://www.bilibili.com/video/BV1K54y1R7wS/?spm_id_from=333.999.0.0&vd_source=5e64ee359d4c97a377f4dff2d4b2f123.
[7] 来炜.open-falcon v0.2项目介绍 [EB/OL].[2023-10-18].https://book.open-falcon.org/zh_0_2/intro/.
[8] 新华三技术有限公司.MIB概述 [EB/OL].[2023-10-18].https://www.h3c.com/cn/d_202112/1513630_30005_0.htm.
[9] 腾讯公司.微信公众平台账号分类 [EB/OL].[2023-10-18].https://mp.weixin.qq.com/.
[10] Grafana Labs. About Grafana [EB/OL].[2023-10-18].https://grafana.com/docs/grafana/latest/introduction/.
作者简介:邱会(1986—),男,汉族,湖南岳阳人,馆员,本科,研究方向:数字图书馆建设。