本发明涉及数据交换网络的技术领域,特别涉及一种非侵入式web应用监控与日志查询方法。
背景技术:
目前网络系统高速发展,人们对于系统业务与性能的要求也越来越高,为了满足这类需求,系统架构越来越复杂。这类系统架构往往采用分布式的部署方式,以增加运维成本来达到业务与性能要求。而由于系统部署十分复杂,一旦某一环节出现故障,很难快速定位异常,可能需要花费大量时间排查问题,这很大程度上影响了用户的日常工作,给运维人员、研发人员和用户带来了很大的困扰。
现有技术中,包括小米开源的open-falcon组件以及大众点评的cat组件都尝试解决上述问题,然而,open-faicon的部署十分复杂,功能局限性大,通用性不强,且不支持基础服务的监控(如tomcat、mysql等),而cat需要系统内部植入agent,对系统造成了一定程度上的侵入,且搜索功能不强,并且功能有一定的局限性,两者均无法很好的做到对业务系统进行性能监测。
技术实现要素:
本发明解决的技术问题是,现有技术中,web系统部署过于复杂,而导致的很难快速定位异常,极大程度影响用户的日常工作,给运维人员、研发人员和用户带来很大的困扰的问题,为此,本发明提供了一种优化的非侵入式web应用监控与日志查询方法,以不侵入系统本身的方式,对业务系统进行性能监测和故障定位。
本发明所采用的技术方案是,一种非侵入式web应用监控与日志查询方法,所述方法包括以下步骤:
步骤1:为web应用系统群配置需要扫描的源码路径,配置javaagent参数;
步骤2:通过javaagent获取web应用系统群的内部性能指标,生成日志并输出到文件;
步骤3:采集应用外部环境的日志和系统性能指标;
步骤4:基于步骤2和步骤3得到的信息,通过日志采集器进行采集,并将采集得到的信息存储至搜索服务器;搜索服务器过滤存储的所有日志;
步骤5:在搜索服务器中进行风险判断,若存在风险,则告警,并生成图表供人员查看。
优选地,所述步骤2中,通过javaagent获取web应用系统群的内部性能指标包括配置需要监控的节点。
优选地,所述步骤2中,生成日志并输出到文件包括以下步骤:
步骤2.1:构建类缓存容器,配置读取路径,加载路径里的源码至类缓存容器;
步骤2.2:javaagent通过读取源码的字节码,动态插入日志埋点;
步骤2.3:判断是否采集web应用系统群的内部性能指标,若否,则直接进行下一步,否则开始执行采集,javaagent记录初始信息,判断执行过程中是否存在异常,若是,记录异常信息,执行结束后记录结束信息;
步骤2.4:直接加载定义后的内部性能指标信息;
步骤2.5:执行并上传信息。
优选地,所述步骤2中,内部性能指标包括http响应时间、服务响应、异常、sql语句、外部连接响应。
优选地,所述步骤2中,生成的日志包括基础日志和系统响应日志,日志输出到文件后,通过filebeat采集文本日志。
优选地,所述步骤3中,应用外部环境的系统性能指标通过metricbeat采集。
优选地,所述系统性能指标包括cpu使用率、内存、硬件系统、磁盘io统计数据、网络io统计数据、任一进程的统计数据及状态信息。
优选地,所述搜索服务器通过正则过滤得到存储的所有日志中的风险日志,并通过预设的告警脚本将风险日志告警。
优选地,所述步骤5中,告警包括邮件告警和短信告警。
优选地,所述步骤5中,搜索服务器中的信息通过图表展示器进行展示。
本发明提供了一种优化的非侵入式web应用监控与日志查询方法,为web应用系统群配置需要扫描的源码路径,配置javaagent参数,通过javaagent获取web应用系统群的内部性能指标,生成日志并输出到文件,采集应用外部环境的日志和系统性能指标,通过日志采集器进行采集,并将采集得到的信息存储至搜索服务器;搜索服务器过滤存储的所有日志,进行风险判断,若存在风险,则告警,并生成图表供人员查看。本发明以不侵入系统本身的方式,对业务系统进行包括代码层面和硬件系统的性能监测和故障定位,大大降低运维人员与研发人员解决系统故障的时间,使得系统更加健壮。
本发明的有益效果包括:
1、弥补监控应用内部数据不精准的问题;通过字节码插桩,对应用系统内部进行精准埋点,如可深入到异常源头进行采集避免因为代码多次捕捉转换之后无法定位原本异常信息,可针对公司应用系统进行开发,相对风险和成本更低;
2、对应用系统内部不造成侵入,实施推广成本低;使用javaagent在不改变应用内部一行代码一行配置的情况下推进监控系统的实施,尤其适用于比较老旧的系统。
具体实施方式
下面结合实施例对本发明做进一步的详细描述,但本发明的保护范围并不限于此。
本发明涉及一种非侵入式web应用监控与日志查询方法,基于字节码插桩技术(javaagent)监控应用内部性能指标,如:http响应时间、服务响应、异常、sql语句、外部连接响应,模式特点是可以精准监控应用内部,不会对应用造成侵入,从而简化上线推广成本。
本发明的核心技术运用java1.5之后的新特性,其主要作用是在业务方法被加载之前对其拦截,插入监听字节码,从而达到监控的功能。
本发明中,在实际操作过程中,采用javassist实现,javassist是一个开源的分析、编辑和创建java字节码的类库,简单、快速,直接使用java编码的形式,不需要了解虚拟机指令就能动态改变类的结构或者动态生成。
所述方法包括以下步骤。
步骤1:为web应用系统群配置需要扫描的源码路径,配置javaagent参数。
步骤2:通过javaagent获取web应用系统群的内部性能指标,生成日志并输出到文件。
所述步骤2中,通过javaagent获取web应用系统群的内部性能指标包括配置需要监控的节点。
所述步骤2中,生成日志并输出到文件包括以下步骤:
步骤2.1:构建类缓存容器,配置读取路径,加载路径里的源码至类缓存容器;
步骤2.2:javaagent通过读取源码的字节码,动态插入日志埋点;
步骤2.3:判断是否采集web应用系统群的内部性能指标,若否,则直接进行下一步,否则开始执行采集,javaagent记录初始信息,判断执行过程中是否存在异常,若是,记录异常信息,执行结束后记录结束信息;
步骤2.4:直接加载定义后的内部性能指标信息;
步骤2.5:执行并上传信息。
所述步骤2中,内部性能指标包括http响应时间、服务响应、异常、sql语句、外部连接响应。
所述步骤2中,生成的日志包括基础日志和系统响应日志,日志输出到文件后,通过filebeat采集文本日志。
步骤3:采集应用外部环境的日志和系统性能指标。
所述步骤3中,应用外部环境的系统性能指标通过metricbeat采集。
所述系统性能指标包括cpu使用率、内存、硬件系统、磁盘io统计数据、网络io统计数据、任一进程的统计数据及状态信息。
本发明中,状态信息包括基于metricbeat中提供的插件去主动采集的mysql、redis、nginx等。
步骤4:基于步骤2和步骤3得到的信息,通过日志采集器进行采集,并将采集得到的信息存储至搜索服务器;搜索服务器过滤存储的所有日志。
步骤5:在搜索服务器中进行风险判断,若存在风险,则告警,并生成图表供人员查看
所述搜索服务器通过正则过滤得到存储的所有日志中的风险日志,并通过预设的告警脚本将风险日志告警。
所述步骤5中,告警包括邮件告警和短信告警。
所述步骤5中,搜索服务器中的信息通过图表展示器进行展示。
本发明中,步骤4的日志采集器为logstash。
本发明中,如果报警条件比较简单,可以直接基于logstash当中的logstash-output-http插件输送数据流中实现报警;如果报警条件复杂则可基于logstash-output-zabbix输送数据流zabbix系统触发报警。
本发明中,搜索服务器为elasticsearch。
本发明中,搜索服务器通过正则匹配,对步骤2和步骤3得到的日志进行过滤处理,得到存储的所有日志中的风险日志,随后将这些风险日志通过预设的告警脚本,推送给相关人员。
本发明中,搜索服务器中的信息可以用于分析趋势。
本发明中,搜索服务器中的信息通过图表展示器kibana进行展示,并可以被运维人员或研发人员进行调取,有助于运维人员更直观的查询故障,并可以根据日志分析出故障趋势,有助于对系统进行升级改造,使系统更加健壮。
本发明为web应用系统群配置需要扫描的源码路径,配置javaagent参数,通过javaagent获取web应用系统群的内部性能指标,生成日志并输出到文件,采集应用外部环境的日志和系统性能指标,通过日志采集器进行采集,并将采集得到的信息存储至搜索服务器;搜索服务器过滤存储的所有日志,进行风险判断,若存在风险,则告警,并生成图表供人员查看。本发明以不侵入系统本身的方式,对业务系统进行包括代码层面和硬件系统的性能监测和故障定位,大大降低运维人员与研发人员解决系统故障的时间,使得系统更加健壮。本发明弥补监控应用内部数据不精准的问题,对应用系统内部不造成侵入,实施推广成本低。