Appearance
安全审计日志
**本文引用的文件** - [EventLog.java](file://lemes-cloud/lemes-service-common/lemes-service-common-common/src/main/java/com/lenovo/lemes/service/common/entity/EventLog.java) - [EventLogMapper.xml](file://lemes-cloud/lemes-service-common/lemes-service-common-server/src/main/resources/mapper/EventLogMapper.xml) - [EventLogController.java](file://lemes-cloud/lemes-service-common/lemes-service-common-server/src/main/java/com/lenovo/lemes/service/common/server/controller/EventLogController.java) - [LenovoLogConfig.java(框架)](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/util/compliance/LenovoLogConfig.java) - [LenovoLogConfig.java(作业)](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/util/compliance/LenovoLogConfig.java) - [LenovoLogUtil.java(框架)](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/util/compliance/LenovoLogUtil.java) - [LenovoLogUtil.java(作业)](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/util/compliance/LenovoLogUtil.java) - [logback.xml(作业执行器)](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/logback.xml) - [TraceIdConverter.java](file://lemes-job-devicemate/lemes-job-devicemate-common/src/main/java/com/lenovo/lemes/job/devicemate/common/config/TraceIdConverter.java) - [ResourceServerAutoConfiguration.java](file://lemes-cloud/lemes-framework/lemes-framework-auth/src/main/java/com/lenovo/lemes/framework/auth/config/ResourceServerAutoConfiguration.java) - [CustomMethodSecurityConfiguration.java](file://lemes-cloud/lemes-framework/lemes-framework-auth/src/main/java/com/lenovo/lemes/framework/auth/config/CustomMethodSecurityConfiguration.java) - [AuthorizationServerConfig.java](file://lemes-cloud/lemes-auth/src/main/java/com/lenovo/lemes/auth/config/AuthorizationServerConfig.java)目录
简介
本文件面向DeviceMate项目的“安全审计日志”能力,系统化阐述审计日志架构设计与实现,覆盖日志采集、存储、查询与分析的完整闭环;明确日志类型与字段规范;解释记录机制(前后数据对比、用户行为轨迹、关键业务操作审计);给出分级存储、压缩与归档策略建议;并提供基于现有接口的日志查询能力说明与安全管控建议,帮助安全分析师与合规人员构建可追溯、可分析、可审计的完整方案。
项目结构
围绕审计日志的关键模块主要分布在以下位置:
- 通用实体与持久层:事件日志实体与MyBatis映射
- 控制层:事件日志的查询与新增接口
- 配置与工具:联想审计日志配置与工具类
- 日志输出:Logback配置与TraceId注入
- 安全鉴权:资源服务与方法级权限控制
图表来源
- EventLog.java:1-64
- EventLogMapper.xml:1-44
- EventLogController.java:1-47
- LenovoLogConfig.java(框架):1-30
- LenovoLogUtil.java(框架):1-27
- logback.xml(作业执行器):1-72
- TraceIdConverter.java:1-21
- ResourceServerAutoConfiguration.java:1-30
- CustomMethodSecurityConfiguration.java:1-29
- AuthorizationServerConfig.java:36-125
章节来源
- EventLog.java:1-64
- EventLogMapper.xml:1-44
- EventLogController.java:1-47
- LenovoLogConfig.java(框架):1-30
- LenovoLogUtil.java(框架):1-27
- logback.xml(作业执行器):1-72
- TraceIdConverter.java:1-21
- ResourceServerAutoConfiguration.java:1-30
- CustomMethodSecurityConfiguration.java:1-29
- AuthorizationServerConfig.java:36-125
核心组件
- 事件日志实体:定义审计日志的核心字段,用于统一记录主机、用户、动作、事件类型、来源、键值、数据、IP与时序等信息,并支持插入时间范围查询。
- MyBatis映射:提供分页列表与新增写入能力,支持按用户名、事件类型、事件数据关键词、IP地址与时间范围过滤。
- 控制器接口:提供事件类型与用户名枚举查询、分页列表查询、新增接口,并对相关接口启用基于角色的访问控制。
- 联想审计配置与工具:提供应用名、负责人、CMDB标识等配置项,以及工具类对这些配置的引用点位。
- 日志输出策略:Logback配置中为作业执行器模块单独输出“联想专用日志”,并结合TraceId转换器在日志中注入链路追踪标识。
- 安全鉴权:资源服务与方法级权限控制,确保审计接口仅授权主体可访问。
章节来源
- EventLog.java:12-62
- EventLogMapper.xml:4-42
- EventLogController.java:21-45
- LenovoLogConfig.java(框架):17-29
- LenovoLogUtil.java(框架):22-27
- logback.xml(作业执行器):43-66
- TraceIdConverter.java:15-21
- ResourceServerAutoConfiguration.java:27-30
- CustomMethodSecurityConfiguration.java:22-28
- AuthorizationServerConfig.java:62-112
架构总览
下图展示从控制器到持久层、再到日志输出的整体流程,以及安全鉴权与追踪链路的集成点。
图表来源
- EventLogController.java:40-45
- EventLogMapper.xml:36-42
- logback.xml(作业执行器):43-66
- ResourceServerAutoConfiguration.java:27-30
详细组件分析
数据模型与字段规范
- 字段说明(摘自实体类):
- 主机名、用户名、动作类型、事件类型、事件来源、事件键值、事件数据、IP地址、创建时间
- 支持通过页面参数传入的插入时间范围数组,便于按时间段检索
- 关系与约束:
- 表名为EVENT_LOG,字段与实体属性一一对应
- 新增接口使用当前时间作为创建时间
图表来源
章节来源
日志采集与记录机制
- 记录入口:
- 控制器提供新增接口,供各业务在关键操作后调用,统一写入审计表
- 记录内容:
- 用户名、主机名、动作类型、事件类型、事件来源、事件键值、事件数据、IP地址
- 动作类型用于区分“新增/修改/删除/查询/导出/审批”等
- 事件类型用于区分“设备管理/仓库管理/工作流”等业务域
- 事件来源用于标注触发来源(如前端页面、后台任务、接口)
- 事件键值用于定位具体对象(如主键或唯一标识)
- 事件数据用于记录前后对比或补充说明
- 行为轨迹与对比:
- 可通过“事件数据”字段记录变更前后的JSON差异,或以结构化方式记录操作上下文
- 结合“插入时间范围”与“用户名/事件类型/IP”等条件实现用户行为轨迹追踪
章节来源
日志存储与输出策略
- 数据库存储:
- MyBatis映射提供标准的INSERT与SELECT(含WHERE条件与排序),支持按用户名、事件类型、事件数据关键词、IP与时间范围过滤
- 日志文件输出:
- 作业执行器模块使用独立的Lenovo专用日志appender,按日期与大小滚动,保留历史天数上限
- 控制台与调试日志分离,便于问题定位与生产环境脱敏
- 追踪链路:
- 通过TraceIdConverter将线程上下文中的traceId注入日志模式,便于跨服务串联
图表来源
章节来源
日志查询接口与分析能力
- 查询接口:
- 分页列表:支持按用户名、事件类型、事件数据关键词、IP、插入时间范围查询
- 枚举查询:支持获取事件类型与用户名列表,便于前端筛选
- 新增接口:供业务侧在关键操作后落库
- 分析建议:
- 异常行为检测:基于“IP/时间/用户/事件类型”组合异常频次与集中度
- 合规检查:按时间范围导出事件清单,核对关键操作是否留痕
- 审计报告:按用户/事件类型/来源维度统计操作次数与趋势
图表来源
章节来源
安全管理与访问控制
- 方法级权限:
- 控制器接口使用基于角色的访问控制注解,仅具备“sys:event-log”权限的主体可访问
- 资源服务与鉴权:
- 资源服务器自动配置启用方法级安全,结合自定义表达式处理器与授权服务器配置,形成统一鉴权链路
- 日志访问控制:
- 建议对审计接口与日志文件实施最小权限访问与访问审计,避免越权读取
图表来源
- EventLogController.java:21-45
- ResourceServerAutoConfiguration.java:27-30
- CustomMethodSecurityConfiguration.java:22-28
- AuthorizationServerConfig.java:62-112
章节来源
- EventLogController.java:21-45
- ResourceServerAutoConfiguration.java:27-30
- CustomMethodSecurityConfiguration.java:22-28
- AuthorizationServerConfig.java:62-112
依赖分析
- 组件耦合:
- 控制器依赖服务层;服务层依赖Mapper;Mapper依赖数据库
- 日志工具与配置通过Spring容器装配,Logback通过appender与转换器注入TraceId
- 安全配置贯穿资源服务与方法级安全,确保接口受控
- 外部依赖:
- Spring Security/OAuth2、MyBatis、Logback、Hutool JSON工具等
图表来源
- EventLogController.java:18-19
- EventLogMapper.xml
- LenovoLogUtil.java(框架):22-27
- LenovoLogConfig.java(框架):17-29
- logback.xml(作业执行器):43-66
- TraceIdConverter.java:15-21
- ResourceServerAutoConfiguration.java:27-30
章节来源
- EventLogController.java:18-19
- EventLogMapper.xml
- LenovoLogUtil.java(框架):22-27
- logback.xml(作业执行器):43-66
- TraceIdConverter.java:15-21
- ResourceServerAutoConfiguration.java:27-30
性能考虑
- 写入性能:
- 使用MyBatis批量写入或异步队列可进一步降低写入延迟
- 查询性能:
- 对常用查询字段建立索引(如用户名、事件类型、创建时间)
- 合理限制时间范围与分页大小,避免全表扫描
- 日志滚动:
- 控制单文件大小与保留天数,平衡磁盘占用与检索效率
故障排查指南
- 接口鉴权失败:
- 检查是否具备“sys:event-log”权限;确认资源服务与方法级安全配置生效
- 日志未落库:
- 核对新增接口调用与实体字段;检查数据库连接与事务提交
- 日志文件未输出:
- 检查Logback配置中Lenovo专用appender是否启用;确认日志路径与权限
- 追踪链路缺失:
- 确认TraceId转换器已注册;检查线程上下文中traceId是否注入
章节来源
- EventLogController.java:21-45
- logback.xml(作业执行器):43-66
- TraceIdConverter.java:15-21
- ResourceServerAutoConfiguration.java:27-30
- CustomMethodSecurityConfiguration.java:22-28
- AuthorizationServerConfig.java:62-112
结论
DeviceMate项目已具备完善的审计日志基础:统一的数据模型、可控的接口权限、可追踪的链路与稳定的日志输出。在此基础上,建议进一步完善日志分级存储、压缩与归档策略,强化异常行为检测与合规检查能力,并持续优化查询性能与运维可观测性,以满足安全分析师与合规人员的审计需求。
附录
- 日志类型与字段建议(扩展说明,非现有实现):
- 用户操作日志:记录用户登录、登出、密码修改、个人信息更新等
- 系统访问日志:记录API访问、接口调用、异常错误等
- 安全事件日志:记录越权尝试、暴力破解、敏感操作告警等
- 异常操作日志:记录重复提交、越权访问、数据篡改等
- 存储策略建议(扩展说明,非现有实现):
- 分级存储:热数据(近7天)驻内存/SSD,温数据(1个月)落盘,冷数据(长期)归档至对象存储
- 压缩:日志文件采用Gzip压缩,降低存储成本
- 归档:按月/季度归档,保留历史版本
- 长期保存:根据法规要求设定保留期限,定期清理过期数据