网站日志分析系统
概述
背景:在互联网的应用中,日志是个非常重要的数据,因为互联网项目往往是要求 7*24 不间断运行的,所以能获取到监控系统运行的相关日志数据并进行分析就显得很有必要。
日志的种类:
- 系统日志:也就是由开发人员在系统后台代码中加入的日志输出语句,如果是JAVA语言,通常都是采用log4j的框架技术进行一些日志语句的输出。这类日志对了解系统的运行情况有一定的帮助,当系统出现异常情况,能借助这些信息来分析问题。但这类日志信息的输出内容是由开发人员通过编写相应输出代码产生的,并不是一种架构级的日志输出方案。所以这类输出信息并不全面,不能细致地把系统的运行信息进行输出。
- 埋点日志:简单来说日志埋点就是在现有的系统中集成相应的代码,捕获系统特定的事件,输出一些相关的信息 。
根据目前实际的使用来看,系统日志一般是开发人员比较关注,多用于代码优化和调试。而网站运营人员和业务人员更关注的数据是通过埋点产生的日志分析出来的。所以也应运而生了这一类的网站日志分析系统。由于互联网的网站的访问量都比较大,所以这类日志的采集和处理往往采用大数据的一些处理技术。
系统架构
从架构的角度来看主要从两个方面进行分析
一. 日志埋点的方式
- 客户端(前端):支持 iOS、安卓、Web/H5、微信小程序,主要用于分析 UV、PV、点击量等基本指标。例:下图是Web端的埋点技术图:
- 服务器日志:采集后端业务服务器打印的日志。更强的采集能力,更好的支撑精细化分析场景。
现在的网站系统大都采用微服务架构,如下图:
从这样的架构中,能看到每次请求是通过一个调用链才能完成,所以运维人员会关注每个链的调用执行时间,通过这个可以了解系统后台的一些性能情况,通常会采用一些中间件来完成这些性能数据的采集,比如 Skywalking 采集性能数据的架构图 :
而从业务角度来看,后端能拿到每个服务的请求参数和服务处理完成后返回的响应信息,基于这一点可以做一些业务事件的实时统计及实时的异步处理工作。这个可以通过SpringMVC的相关机制来实现,例如:
二. 日志采集和处理的方式
离线处理方案
实时处理方案: