背景
企业以springboot框架作为一个业务开发的脚手架,随着业务的迭代,以及访问量提升,服务实例递增,会导致海量日志产生;无规则的海量日志会存在以下问题 1、日志与日志之间缺少关联关系 (如果找到用户一次请求的所有日志)2、日志信息不全(该打印的时候没有打印,不该打印的打印)如果业务发生异常,开发者第一时间很难从海量的日志,第一时间定位相关问题,3、日志难以清洗,BPM插件就是解决以上问题,并且可以提供以开发视角的定义业务异常从而业务报警
什么是bpm
bpm 是 Business Performance Management 缩写,log-agent-framework是bpm 的实现,它是一款日志中间是一款基于java agent 的日志插件,用于结构化输出日志数据,便于后期的问题排查,以及业务的报警;通过maven接入,将spring 项目的日志以json输出。
产品定位
类型 |
用途 |
代表 |
NPM |
用于监控设施的基础信息,如网络、io、cpu 等,一般运维使用 |
prometheus |
APM |
用于监控应用的数据链路,日志数据大,且详细,一般运维使用 |
pinpoint、SkyWalking |
BPM |
用于监控重要业务,日志量少,且精确,一般开发人员使用 |
|
|
|
|
优点
- 对于项目维护:采用无侵入方式,较少冗余的代码
- 对于程序开发:提供公共位置的日志收集,加快开发进度
- 对于问题排查:采用标准的日志格式,可根据类型快速过滤排查
- 对于项目预警:采用模块化+api,可自定操作
什么是日志数据
它是刻意产生,并且有目的搬运、清洗、存贮,最终消费的信息流,为用户提供更好的服务;并不是所有的日志都是日志数据,对用户有意义的日志,并且耗费精力维护,才能称为日志数据。
什么时候用
- 后端开发人员排查bug,定位问题
- 前端人员开发优化资源加载性能
- leader 需要重要报表数据,提供决策
- 异常报警
如何构建日志系统
- 日志生产:规定日志规范json,以及实现
- 日志搬运:sdk、filebeat、日志汇总、阿里日志服务、oss
- 日志清洗:logstash、json、脚印、柯南系统、es
- 日志存贮:hive、es、mysql
- 日志消费:kibana、grafa、报警、报表
日志级别选型
建议 |
日志级别 |
保留时间 |
不建立,或者自建elk |
小型或者微型 |
日志保留时间建议 |
自建elk,或者阿里 elk 或者阿里日志服务 |
中型 |
小于1天 |
阿里日志服务 |
大型 |
小于3天 |
Bpm日志数据结构
日志层次划分
层次 |
例子 |
日志type |
入口日志 |
controller、httpServlet |
ACCESS |
出口日志 |
http、hession |
THIRD |
用户自定义日志 |
service、自定义log |
SERVICE |
日志aop 切面