一种基于字节码技术的零侵入监控方法及系统与流程

文档序号:24550912发布日期:2021-04-06 12:03阅读:106来源:国知局
一种基于字节码技术的零侵入监控方法及系统与流程

本发明涉及系统监控技术领域,特别是一种基于字节码技术的零侵入监控方法及系统。



背景技术:

监控系统整体实现分为数据采集、传输、存储、图表展示以及报警,其中采集可分为资源指标和系统指标两类。

一般监控系统调用操作系统命令可轻松获得资源指标,而内部的系统指标,或者应用自身采集数据发送数据监控系统,或者引入监控系统提供的jar来修改,但无论哪种都对应用造成了侵入,不利于实施。



技术实现要素:

本发明的目的是提供一种基于字节码技术的零侵入监控方法及系统,旨在解决现有技术中系统监控对应用造成侵入的问题,实现在零侵入的情况下,采集服务器各项信息,提高监控数据的准确性。

为达到上述技术目的,本发明提供了一种基于字节码技术的零侵入监控方法,所述方法包括以下操作:

通过java代理监控应用程序,并通过字节码修改来获取应用程序的返回值,形成agent服务,打包成jar包,用于监控系统内部http服务、service服务以及jdbc服务;

在应用启动时,加载用于监控的jar包,启动监听;

部署filebeat采集系统日志以及系统调用链耗时日志,部署metricbeat采集中间件以及服务器的基本信息,将filebeat和metricbeat收集到的数据通过logstash写入服务器集群;

在kibana中查看采集数据以及制作各种监控报表,并在logstash中配置输出监控告警的规则,进行异常信息的告警。

优选地,所述http服务的监控具体为:

对调用链数据进行字节码监听,形成http监控数据,http监控数据模型字段包括开始时间、请求url、客户端ip、调用耗时、记录耗时以及服务类型。

优选地,所述service服务的监控具体为:

对service服务进行字节码监听,形成service监控数据,service监控数据模型字段包括开始时间、耗时、异常消息、异常类型、服务类名、服务类名简称、方法名、主机ip、应用名称和标识、追踪id以及服务类型。

优选地,所述jdbc服务的监控具体为:

对jdbc服务进行字节码监听,数据访问对象获取连接时生成代理连接,预声明sql生成代理sql语句,执行sql生成代理结果集,读取返回结果,形成jdbc监控数据,jdbc监控数据模型字段包括开始时间、调用耗时、客户端ip、执行sql、数据库、记录耗时以及服务类型。

本发明还提供了一种基于字节码技术的零侵入监控系统,所述系统包括:

监听打包模块,用于通过java代理监控应用程序,并通过字节码修改来获取应用程序的返回值,形成agent服务,打包成jar包,用于监控系统内部http服务、service服务以及jdbc服务;

监听启动模块,用于在应用启动时,加载用于监控的jar包,启动监听;

信息采集模块,用于部署filebeat采集系统日志以及系统调用链耗时日志,部署metricbeat采集中间件以及服务器的基本信息,将filebeat和metricbeat收集到的数据通过logstash写入服务器集群;

信息展示模块,用于在kibana中查看采集数据以及制作各种监控报表,并在logstash中配置输出监控告警的规则,进行异常信息的告警。

优选地,所述http服务的监控数据模型字段包括开始时间、请求url、客户端ip、调用耗时、记录耗时以及服务类型。

优选地,所述service服务的监控数据模型字段包括开始时间、耗时、异常消息、异常类型、服务类名、服务类名简称、方法名、主机ip、应用名称和标识、追踪id以及服务类型。

优选地,所述jdbc服务的监控数据模型字段包括开始时间、调用耗时、客户端ip、执行sql、数据库、记录耗时以及服务类型。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

与现有技术相比,本发明基于java代理以及字节码技术,对系统内部http服务、service服务以及jdbc服务进行监听,在零侵入的情况下,采集系统日志、系统调用链耗时日志以及服务器的基本信息等,并对采集到的数据进行异常告警。本发明可有效弥补内部数据监控不准确的问题,且可做到零侵入,通过字节码插桩减少对现有业务系统的侵入,规避降低传统项目接入监控系统的风险,降低运维成本,便于实施推广,另外可扩展,可有效集成到开源的监控系统中。

附图说明

图1为本发明实施例中所提供的一种基于字节码技术的零侵入监控方法流程图;

图2为本发明实施例中所提供的零侵入监控架构示意图;

图3为本发明实施例中所提供的jdbc监控原理示意图;

图4为本发明实施例中所提供的一种基于字节码技术的零侵入监控系统框图。

具体实施方式

为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

下面结合附图对本发明实施例所提供的一种基于字节码技术的零侵入监控方法及系统进行详细说明。

如图1、2所示,本发明公开了一种基于字节码技术的零侵入监控方法,所述方法包括以下操作:

通过java代理监控应用程序,并通过字节码修改来获取应用程序的返回值,形成agent服务,打包成jar包,用于监控系统内部http服务、service服务以及jdbc服务;

在应用启动时,加载用于监控的jar包,启动监听;

部署filebeat采集系统日志以及系统调用链耗时日志,部署metricbeat采集中间件以及服务器的基本信息,将filebeat和metricbeat收集到的数据通过logstash写入服务器集群;

在kibana中查看采集数据以及制作各种监控报表,并在logstash中配置输出监控告警的规则,进行异常信息的告警。

本发明实施例使用java代理+字节码技术监控系统内部的http服务、service服务以及jdbc服务。javaagent为java代理,其为一个jar包,但不能独立运行,需要依附在目标jvm进程中。在需要了解目标jvm的运行指标时,通过javaagent来获取性能日志等。javassit是一个java字节码的类库,其直接使用java编码的形式进行字节码处理。

对于http服务,http监控数据模型采用json数据格式,字段包括开始时间、请求url、客户端ip、调用耗时、记录耗时以及服务类型。通过对javax.servlet.http.httpservlet#service进行字节码监听,实现对调用链数据的包装,通过抽象,不假设基于特定某种框架的实现,基于底层封装,实现通用性。

对于service服务,service监控数据模型采用json数据格式,字段包括开始时间、耗时、异常消息、异常类型、服务类名、服务类名简称、方法名、主机ip、应用名称和标识、追踪id以及服务类型。通过对service服务的字节码监听,无需对用户的使用场景做设定,即通过抽象、不假设特定的方式,将监控的范围通过配置的方式,实现自定义配置,通过include和exclude灵活指定监控目录。

对于jdbc服务,jdbc监控数据模型采用json数据格式,字段包括开始时间、调用耗时、客户端ip、执行sql、数据库、记录耗时以及服务类型。通过字节码代理在driver实现代理,数据访问对象获取连接时生成代理连接,预声明sql生成代理sql语句,执行sql生成代理结果集,读取返回结果,纳入监控逻辑,如图3所示。

应用在启动时通过-javaagent加载监控程序的jar包,启动监听。java程序运行时,需将源文件进行编译,生成字节码文件,将字节码文件加载到内存中进行解析执行,而在本发明实施例中,应用启动时,在字节码文件被加载前,通过javaagent在主函数方法之前进行拦截监听。通过部署filebeat采集系统日志以及系统调用链耗时日志,部署metricbeat采集中间件以及服务器的基本信息,将filebeat和metricbeat收集到的数据通过logstash写入elasticsearch集群。在kibana中查看采集数据以及制作各种监控报表,另外在logstash中配置输出监控告警的规则,实现异常信息的告警。

本发明实施例基于java代理以及字节码技术,对系统内部http服务、service服务以及jdbc服务进行监听,在零侵入的情况下,采集系统日志、系统调用链耗时日志以及服务器的基本信息等,并对采集到的数据进行异常告警。本发明可有效弥补内部数据监控不准确的问题,且可做到零侵入,通过字节码插桩减少对现有业务系统的侵入,规避降低传统项目接入监控系统的风险,降低运维成本,便于实施推广,另外可扩展,可有效集成到开源的监控系统中。

如图4所示,本发明实施例还公开了一种基于字节码技术的零侵入监控系统,所述系统包括:

监听打包模块,用于通过java代理监控应用程序,并通过字节码修改来获取应用程序的返回值,形成agent服务,打包成jar包,用于监控系统内部http服务、service服务以及jdbc服务;

监听启动模块,用于在应用启动时,加载用于监控的jar包,启动监听;

信息采集模块,用于部署filebeat采集系统日志以及系统调用链耗时日志,部署metricbeat采集中间件以及服务器的基本信息,将filebeat和metricbeat收集到的数据通过logstash写入服务器集群;

信息展示模块,用于在kibana中查看采集数据以及制作各种监控报表,并在logstash中配置输出监控告警的规则,进行异常信息的告警。

对于http服务,http监控数据模型采用json数据格式,字段包括开始时间、请求url、客户端ip、调用耗时、记录耗时以及服务类型。通过对javax.servlet.http.httpservlet#service进行字节码监听,实现对调用链数据的包装,通过抽象,不假设基于特定某种框架的实现,基于底层封装,实现通用性。

对于service服务,service监控数据模型采用json数据格式,字段包括开始时间、耗时、异常消息、异常类型、服务类名、服务类名简称、方法名、主机ip、应用名称和标识、追踪id以及服务类型。通过对service服务的字节码监听,无需对用户的使用场景做设定,即通过抽象、不假设特定的方式,将监控的范围通过配置的方式,实现自定义配置,通过include和exclude灵活指定监控目录。

对于jdbc服务,jdbc监控数据模型采用json数据格式,字段包括开始时间、调用耗时、客户端ip、执行sql、数据库、记录耗时以及服务类型。通过字节码代理在driver实现代理,数据访问对象获取连接时生成代理连接,预声明sql生成代理sql语句,执行sql生成代理结果集,读取返回结果,纳入监控逻辑。

应用在启动时通过-javaagent加载监控程序的jar包,启动监听。java程序运行时,需将源文件进行编译,生成字节码文件,将字节码文件加载到内存中进行解析执行,而在本发明实施例中,应用启动时,在字节码文件被加载前,通过javaagent在主函数方法之前进行拦截监听。通过部署filebeat采集系统日志以及系统调用链耗时日志,部署metricbeat采集中间件以及服务器的基本信息,将filebeat和metricbeat收集到的数据通过logstash写入elasticsearch集群。在kibana中查看采集数据以及制作各种监控报表,另外在logstash中配置输出监控告警的规则,实现异常信息的告警。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1