系统审计日志需求分析及方案

在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。在安全领域,日志可以反应出很多的安全攻击行为,比如登录错误,异常访问等。日志还能告诉你很多关于网络中所发生事件的信息,包括性能信息、故障检测和入侵检测。日志会成为在事故发生后查明“发生了什么”的一个很好的“取证”信息来源。日志可以为审计进行审计跟踪。

需求分析

审计日志在哪里执行记录操作?

controller层?service层?dao层?

controller层最先接触到request请求,如果我们要对分析用户的行为,那么日志应该在c层记录

service层是向c层提供服务的,整合了数据访问、数据计算等任务,如果要分析系统服务性能、那么日志应该打在s层

dao层是数据访问层,主要负责数据库的读写任务,如果要对数据访问接口的性能进行分析,那么日志应该在dao层

审计日志内容怎么存储?

日志文件?关系?es?

写日志文件是对磁盘顺序写操作,操作效率高,但是有两个缺点:一是不利于检索,一是日志文件存储在本地,分布式环境下不利于日志统一管理,因此日志文件不适合审计日志的存储

关系型数据,中小型系统可以使用,随着日志越来越多,检索效率降低,可以根据日志时间或者日志类型分表存储,缺点是日志分析不是很方便

ES,卓越的检索效率,集群部署方便扩展的特点,是审计日志最好的存储方式,自带分析统计功能,可以实时统计

审计日志要记录哪些内容?

针对用户分析日志:请求用户、请求ip地址、请求参数、

针对服务分析日志:服务接口执行时间、调用次数、堆栈大小,继而可以分析出服务的调用频率、平均耗时

用户行为分析:

  • 登录日志:记录登录时间、登录ip地址、登录用户、登录结果

  • 业务访问日志:记录操作时间、用户Ip地址、访问接口、请求参数、请求结果

确定方案

spring-aop + 自定义注解 + elk

aop面向切面的思想可以将记录日志逻辑 从 业务逻辑中解耦出来

自定义注解可以 更灵活的 指定切面

es存储日志,便于扩展,利于检索和分析

方案实现

所有的外部请求都会经过网关,网关负责登录,考虑到登录与业务访问需要记录的日志内容不太相同,所以登录模块单独设计一个注解,业务模块可以共用一个注解。

登录模块:

业务模块: