背景技术
模具行业在应用ERP、MES等生产管理类软件时,通常在客户环境是不允许链接外网,服务器隔离在客户公司内部。出现:①性能不够稳定,不能及时发现,导致影响用户体验和功能缺陷,甚至引起卡机等严重后果,无法及时发现;②用户操作***出现错误,涉及用户数据安全,数据库不能提供给ERP供应商,只通过***记录的后台日志来分析原因的话,第一日志文件大,第二文本分析比较慢;③管理员对于***的使用率,采集员工使用频率,菜单使用频率,作为***使用价值等评估。
目前MES制造执行***采用线下沟通软件异常,线下发送文档日志分析、由实施顾问或者***管理员主观报告软件使用频率,查看服务器性能只能由服务器管理员一个角色查看、无法分析***的利用率等缺陷。
传统的***全局监控方式主要有两种:一是依靠人工反馈再加上Windows的任务管理器,人工通过汇报或者邮件方式相互传递***问题,***管理员根据Windows的性能查看界面查看;二是依靠页面查询一些***的性能。
方式一存在以下缺点:
1)***异常之后,人工口述具备主观性,无法准确知道对软件的影响;
2)依靠人工反映会有滞后性,无法及时发现问题。邮件通知又有可能无法复现之前发生的问题,导致无法追溯;
3)***自带的任务管理器往往只能看到大致性能,因为***的性能查看是整个服务器的,而工程往往只是整个***中的一个或者几个服务。而不能准确的监听到每个服务,就没有办法依靠数据来支撑,***的性能体现。
方式二存在以下缺点:
1)功能单一,能够实时看到***性能,web服务器性能,以及JVM虚拟机性能,对比***整体服务,但是不能详细记录历史数据,只能实时监听,没有实时记录***性能指标,无法追溯;
2)用数字表述,不够直观,无法看到哪些人使用频次最高,哪些时段请求频次更高。无法同时对比请求频次高的时段***性能如何;
3)一旦***遇到异常,虽然可以实时监控,能够监控到哪些时间出现了问题,但是无法把准确的数据反馈给软件供应商,需要大量时间分析问题原因。
基于此,针对上述现状中存在的局限性,本发明提出了一种MES***性能和日志数据监控方法。
发明内容
本发明的目的在于针对已有技术存在的缺陷,提供一种MES***性能和日志数据监控方法。
本发明解决其技术问题所采用的技术方案是:
一种MES***性能和日志数据监控方法,包括以下步骤:
获取日志监控的页面数据,其中,所述页面数据为通过Echarts图表上进行显示的数据;
传输页面数据,其中,所述页面数据通过socket协议来传输数据;
对request和response数据进行绑定和处理,其中,对request过来的数据,添加一个Base64位的唯一编码,并在response数据有变化时,通过Base64位的唯一编码绑定response中的数据,持久化到数据中,将request和response的数据进行绑定;
对数据进行关系型约束,并序列化加密,将日志数据以特定的格式压缩入一个日志文件。
进一步地,获取页面数据后还包括,将页面数据临时存储至内存中,其中,页面数据通过键值对的方式存储在内存中,存储形式为,键为数据源的名称,值为对应数据的获取。
进一步地,获取的日志监控的页面数据包括***CPU负荷、内存利用率、***线程利用率,JVM虚拟机占用率、***线程以及用户并发数。
进一步地,传输页面数据的过程具体为:
服务端建立websocket的管理器;
客户端接收websocket发送的数据并传输至Echarts图表。
进一步地,对request和response数据进行绑定和处理步骤中,对于request数据通过多线程方式先进行持久化处理,对添加日志线程采用线程池管理方式。
进一步地,对数据进行关系型约束后进行序列化加密的步骤具体为:
组装数据并序列化为Json数据,用requestID标记,并通过线程池持久化写入数据库;
进行序列化加密,并通过调用方法把序列化数据持久化写入***磁盘供下载或者邮件传输。
与现有技术相比,本发明的有益效果是:
1、本发明包含了***性能监控、软件服务性能监控、用户使用频次监控、***软件使用高峰低估监控,采用直观、高效、实时图表展示,并发用户数量,功能齐全内容直观;
2、本发明采用websocket的通讯协议,区别于普通的MES的web常用的HTTP协议,可以实现实时监控性能,做到毫秒级延误,并支持高并发量的数据,多图表展示;
3、本发明中对于用户的日志操作习惯记录,把传统的MES的单一的日志记录,更加灵活的体现在:①对用户输入数据和***组装数据结合到了一起。②对于请求组装数据保持了源数据的整洁性,又同时记录另外一套组装后的数据,并记录数据类型发,方便软件供应商排查问题定位问题;
4、本发明中对于日志文件的下载采用序列化加密的方式,用户只需要选择时间下载即可下载到日志信息,日志用户不能打开修改,由软件供应商才能解析,并且解析后的数据已经组装好,可以最快速的时间内定位解决问题。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明实施例提供了一种MES***性能和日志数据监控方法,包括以下步骤:
获取日志监控的页面数据,其中,所述页面数据为通过Echarts图表上进行显示的数据;
传输页面数据,其中,所述页面数据通过socket协议来传输数据;
对request和response数据进行绑定和处理,其中,对request过来的数据,添加一个Base64位的唯一编码,并在response数据有变化时,通过Base64位的唯一编码绑定response中的数据,持久化到数据中,将request和response的数据进行绑定;
对数据进行关系型约束,并序列化加密,将日志数据以特定的格式压缩入一个日志文件。
具体实施时,获取页面数据后还包括,将页面数据临时存储至内存中,其中,页面数据通过键值对的方式存储在内存中,存储形式为,键为数据源的名称,值为对应数据的获取。
具体实施时,获取的日志监控的页面数据包括***CPU负荷、内存利用率、***线程利用率,JVM虚拟机占用率、***线程以及用户并发数。
以上数据的获取方式是:
JVM虚拟机(MES***运行环境)占用率=
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/Runtime.getRuntime().totalMemory();
Runtime为java虚拟机所开放出来获取JVM虚拟机占用内存的方式;
Thread.currentThread().getThreadGroup()为***线程(MES***的);
Thread为JVM开放出来的获取JVM中使用线程数量的方式。
Session.size()为用户并发数,Session为java内部的获取总在线人数的方法。
CPU等***数据获取方式为:通过一个开源的java插件:org.hyperic.sigar来实现获取。
具体实施时,传输页面数据的过程具体为:
服务端建立websocket的管理器;
客户端接收websocket发送的数据并传输至Echarts图表。
Echarts是一种非常美观的通过数据传入,就可以利用canvas绘制出完美的图例,而软件开发只需要关心传入对应Json格式的数据即可。使数据显示更加美观、直观,同时Echarts性能好,比传统采用SVN绘制图表的性能提升很大。
因日志***数据量庞大,而性能信息对于实时性要求很高,所以用普通的http协议请求无法满足高频次的数据更新,所以采用socket协议,如图2所示,利用websocket技术对数据进行传输,通过socket协议来传输数据,在MES***启动的时候,建立一个websocket(socket协议的一种实现方式)的管理器,当任意一个客户端连接服务器的时候,会跟这个客户端建立起来一个socket通道用来传输数据。当连接socket的用户打开日志监控页面的时候,会把以上数据在内存中实时的通过socket管道传递给用户。
以上可以实时的监控windows***和MES***的共同运行状态,而且是实时信息,不需要依靠人工的主观判断,也没有滞后性是实时性的。同时抗干扰性强。
还可以具体确定到某一个线程,或者某一个用户的导致的***异常。这些全部都有对应的数据支撑。后期排查问题和处理问题,方便快捷。
具体实施时,对request和response数据进行绑定和处理步骤中,对于request数据通过多线程方式先进行持久化处理,并且通过多线程方式不影响软件正常的线程流程,对添加日志线程采用线程池管理方式,多线程之间相互不影响,日志记录与软件运行相互不影响。
在上述技术方案中,业务日志监控环节在MES***的业务比较复杂,通常做一个查询和保存,能够关联到多个业务表。一旦任意一个环节出现问题,那么就必须回退之前所有的动作,这个时候,记录这些异常数据以及出现的过程就显得异常重要。在此过程中数据的来源为:①用户的所有操作动作;②用户操作的所有数据。数据的获取方式为对于用户的操作动作。
因为用户的所有请求都是基于http协议,用户每一次请求就是一个request(http协议的请求方式),基于request的请求地址,可以获取到用户是在哪个位置点击的什么操作,这样就记录下了用户的操作的起始动作,并在此时记录一个starttime(这个request请求开始的时间)。而根据http协议每一个request都有一个response返回,那么response就记录了用户在什么时候返回,此时记录endtime(这个response返回的结束时间),以上就完整记录了用户的开始跟结束的操作动作。
而用户的request和response中间的时间,其实是用来处理业务数据的,这就是需要记录的用户操作的数据。这个数据包括:这个request请求业务数据流向(业务数据)、用户对数据的操作顺序(包括查询数据,和修改数据),而每一个业务数据就对应一个用户的程序数据,这两个数据就组成了一条用户业务操作。
以上每一个request的动作过来,就会有多个业务数据对应(前文背景中所提到的有多个业务表关联)那么每一个业务就存一个数据,存入一个队列。
如图3所示,request进行数据请求,这个时候***所有的请求都可以被拦截,拦截之后把request所携带的数据通过线程持久化。
当request过来的数据,添加一个Base64位的唯一编码。在***中只有查询的时候,为了避免数据量臃肿response的数据不再持久化。
当response有数据的增删改操作的时候,数据库通过request中的Base64唯一ID,绑定response中的数据,持久化到数据中,将request和response的数据进行绑定。
具体实施时,对数据进行关系型约束后进行序列化加密的步骤具体为:
组装数据并序列化为Json数据,用requestID标记,并通过线程池持久化写入数据库;
进行序列化加密,并通过调用方法把序列化数据持久化写入***磁盘供下载或者邮件传输。
在上述技术方案中,因为java有个一ThreadLocal(每一个request到response中间的所有动作都是同一个ThreadLocal,每一个ThreadLocal都有一个唯一标识),利用这个ThreadLocal把数据的获取方式和处理业务数据的动作串联起来,串联方式为:
在表①中存储:request的starttime,用户信息,用户动作,response的结束时间,以及ThreadLocal的唯一ID;
在表②中存储:业务数据和程序数据以及ThreadLocal的唯一ID。
然后通过ThreadLocal把这两张表关联起来,就组成一个完成的日志信息。
在上述技术方案中,对数据进行此种处理,可以实现:
A、日志记录保证了数据原始性,把原始数据的数据+原始数据的数据结构直接存储到数据库,可以最大限度保证了数据的完整性、真实性;
B、记录日志记录的来源(从哪个功能记录的数据)可以更方便的追溯是哪个功能出现了问题,并且精准说明出现问题功能的数据;
C、用一个唯一的标识来建立起来request和response数据的关系,能够准确知道,用户输入的数据是什么,而***又组装成什么样的,定位到到底是用户使用不当造成的,还是***本身的异常;
D、完整的记录用户点击的那个操作,精确到哪个按钮事件,以及原始的Http请求头部。
本发明通过监听***性能,可以监控整个服务器的性能达到什么程度,并通过仪表盘形式直接展示出来性能利用率,取消了各种繁杂的数据,直接呈现给管理员当前服务器的性能结果,同时,监听***服务(Web服务器)、执行服务(JVM虚拟机)、数据库(DB服务)、并发服务(用户线程数量),不会单一的根据内存,而是通过并发用户量,以及并发请求量,还有对比内存与CPU的占有率来,结合直观看出来整个软件工程运行状态。同时,增加了加密便捷的日志获取机制,日志记录了用户的操作习惯和操作数据,可以方便的截取任意时段内的日志内容,同时,日志内容通过序列化加密方式存储为文件,保证了数据的完整准确安全性,又通过序列化可以在任意服务器上解码解密分析。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。