一种生成监控数据的系统及方法与流程

文档序号:34649906发布日期:2023-06-29 19:17阅读:32来源:国知局
本申请涉及信息,具体涉及一种生成监控数据的系统及方法。
背景技术
::1、nginx(engine x)以高并发、高性能、资源消耗著称于世,作为http server和反向代理服务器在互联网行业得到了广泛的应用。nginx一般以网关模式部署,负责所有业务流量的接入、分发和响应输出,发挥着极其关键的作用。随着随着云计算技术潮流的到来,为了应对应用架构日益复杂后面临的监控监控预警、故障定位、根因追踪问题,开发或使用云原生、可观测性的微服务化应用以成为业界普遍的共识。可观测性是一项描述应用本身的特性,强调应用通过暴露数据并能够被外部系统观测到,从应用外部推测其内部运行状态的能力。2、但是,开源版nginx的“可观测性”能力实际上非常糟糕,自问世以来就一直如同一个“神奇的黑盒”一般,核心功能极其优秀,但用户想要进一步了解nginx内部的状况或者想通过nginx了解client请求相关的数据指标是件非常困难的事情。技术实现思路1、本申请针对现有的问题,提出了一种生成监控数据的系统及方法及相关装置,具体技术方案如下:2、在本申请的第一方面,提供了一种生成监控数据的系统,所述系统包括:3、获取模块,所述获取模块用于从服务器中获取nginx处理客户端请求时关联的请求状态数据;4、处理模块,所述处理模块与所述获取模块被配置在同一台服务器内,所述处理模块通过本地接口与所述获取模块通讯,所述获取模块用于接收所述获取模块获取到的请求状态数据和定期抓取nginx基本状态数据,以生成指标数据,所述指标数据被配置为能够以文本格式导出;5、其中,请求状态数据包括nginx处理客户端请求时关联的响应码、速率、延时和流量数据。6、作为一种可选的技术方案,所述获取模块被配置为monitor组件,所述monitor组件基于nginx-lua-module并采用lua编写。7、作为一种可选的技术方案,所述处理模块被配置为collector组件,所述collector组件由golang编写,所述指标数据为标准prometheus metrics指标数据。8、作为一种可选的技术方案,所述处理模块用于将接收到的请求状态数据和nginx基本状态数据反序列化成相应的golang结构体对象。9、作为一种可选的技术方案,所述collector组件包括collector package、statuspackage和main package;10、其中,collector package包含自定义的prometheus collector组件,用于将nginx状态数据转化为prometheus metrics;status package用于nginx状态数据的收集、以及将请求状态数据和nginx基本状态数据反序列化成相应的golang结构体对象;mainpackage用于socket监听和启动http服务。11、作为一种可选的技术方案,所述指标数据以http api接口方式以文本格式导出。12、在本公开的第二方面,提供了一种生成监控数据的方法,应用于上述任一项技术方案中所述的生成监控数据的系统,所述方法包括:13、数据采集:通过获取模块采集nginx处理客户端请求时关联的请求状态数据,并通过处理模块定期抓取nginx基本状态数据;14、数据处理:根据监控需要,创建prometheus metrics指标,通过处理模块对数据采集步骤采集到的数据进行处理,以得到各指标数据的标签和指标值;15、数据导出:以文本格式导出所有指标数据。16、作为一种可选的技术方案,所述数据采集步骤具体为:17、每次nginx处理请求到达log执行阶段时,获取模块自动采集nginx处理客户端请求时关联的请求状态数据并将其推送到暂存文件。18、作为一种可选的技术方案,所述获取模块采集nginx处理客户端请求时关联的请求状态数据具体为:19、在master进程启动后,通过init_by_lua*钩子完成获取模块的lua模块代码预加载,并将其保存在虚拟机中;20、在worker进程启动时,通过init_work_by_lua*执行钩子为每个worker进程定义一个定时器,该定时器间隔一定时间回调一个flush函数;21、所述处理模块在请求处理流程到达log执行阶段时,使用log_by_lua*执行钩子并调用log函数收集与本次请求关联的请求状态数据,所述请求状态数据table中的数据由flush函数进行消费。22、作为一种可选的技术方案,所述数据处理具体为,23、将收集到的请求状态数据和nginx基本状态数据反序列化成相应的golang结构体对象;24、引入prometheus的client_golang_sdk,根据监控需要创建prometheus metrics指标,然后对数据采集步骤生成的golang结构体对象进行处理,得到各指标的lable标签和metrics指标值。25、在本申请的第三方面,提供一种电子设备,该设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序,实现如上述第一方面所述的方法。26、在本申请的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,处理器执行所述计算机程序,实现上述第一方面所述的方法。27、本申请具有以下有益效果:28、通过上述技术方案,本公开的系统将nginx基本状态数据获取与metrics指标的生成分离设计,如此,获取模块可以采用轻量级的实现方案(例如,下文中的monitor组件,即可以使用lua开发,只调用了“nginx-lua”提供的少量的基础luaapi,是极致的轻量级实现),对nginx的性能基本无负面影响,不仅可以完成对请求状态数据的收集,而且获取模块可以采用轻量级的实现方案。同时,将获取模块和处理模块被配置在同一台服务器内,可以通过本地接口进行通讯(即是指获取模块通过本地socket接口将获取到的请求状态数据传输给处理模块),以规避网络io开销。此外,将nginx基本状态数据的加工处理、metrics指标的生成、计算、存储和导出等相对较“重”的代码逻辑都由独立于nginx的处理模块实现,处理复杂逻辑时能够比相关技术更高效。技术特征:1.一种生成监控数据的系统,其特征在于,所述系统包括:2.根据权利要求1所述的生成监控数据的系统,其特征在于,所述获取模块被配置为monitor组件,所述monitor组件基于nginx-lua-module并采用lua编写。3.根据权利要求1所述的生成监控数据的系统,其特征在于,所述处理模块被配置为collector组件,所述collector组件由golang编写,所述指标数据为标准prometheusmetrics指标数据。4.根据权利要求3所述的生成监控数据的系统,其特征在于,所述处理模块用于将接收到的请求状态数据和nginx基本状态数据反序列化成相应的golang结构体对象。5.根据权利要求4所述的生成监控数据的系统,其特征在于,所述collector组件包括collector package、status package和main package;6.根据权利要求1所述的生成监控数据的系统,其特征在于,所述指标数据以http api接口方式以文本格式导出。7.一种生成监控数据的方法,其特征在于,应用于权利要求1-6中任一项所述的生成监控数据的系统,所述方法包括:8.根据权利要求7所述的生成监控数据的方法,其特征在于,所述数据采集步骤具体为:9.根据权利要求8所述的生成监控数据的方法,其特征在于,所述获取模块采集nginx处理客户端请求时关联的请求状态数据具体为:10.根据权利要求7所述的生成监控数据的方法,其特征在于,所述数据处理具体为,技术总结本申请公开了一种生成监控数据的系统及方法,其中,系统包括获取模块和处理模块,获取模块用于从服务器中获取Nginx处理客户端请求时关联的请求状态数据;处理模块与所述获取模块被配置在同一台服务器内,处理模块通过本地接口与所述获取模块通讯,获取模块用于接收所述获取模块获取到的请求状态数据和定期抓取Nginx基本状态数据,以生成指标数据,所述指标数据被配置为能够以文本格式导出;其中,请求状态数据包括Nginx处理客户端请求时关联的响应码、速率、延时和流量数据。本公开不仅具有轻量级的获取模块,而且获取模块和处理模块通过本地接口进行通讯,可以规避网络IO开销。本公开相对较“重”的代码逻辑由处理模块实现,处理更高效。技术研发人员:雷杰,林位宁,蔡岳阳受保护的技术使用者:天翼云科技有限公司技术研发日:技术公布日:2024/1/13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1