一、概述
服务增多,流量不断的增长,日志存储所需要的空间和存储成本也对应的增加
当前系统架构逐步的走向微服务化,服务之间的调用交叉复杂,排查问题难度也是不断地增加,需要跨服务,跨系统来进行排查,日志定位,多系统协调
对研发来说,生产和线上问题为第一要务。如何减少排查时间,提高定位速度,快速的勘察原因并解决问题,较少日志输出,节约成本。故提出了日志染色方案。
二、日常使用场景
由于Apollo是热生效,通过Apollo实时修改配置,实现动态控制请求链路/应用日志打印
1、场景:特定URL的请求,会打印debug类型日志,甚至级别更低的日志
2、场景:特殊cookies的请求,会打印debug甚至级别更低的日志
3、场景:特殊请求参数的请求,会打印debug甚至级别更低的日志
4、场景:特殊请求头请求,会打印debug。。。。。。。
5、场景:异常但是属于正常场景,会打印warn甚至级别更低的日志
5、场景:异常需要特殊关注的日志,会打印error甚至级别更高的日志
三、方案总体设计
1、日常将日志设置为debgu级别,默认不会打印
2、在Apollo上配置日志打印规则,满足打印规则的日志请求会打印进dubug日志级别中
3、请求来到网关或者过滤器,检查规则,若满足在Apollo配置的规则,则打印日志
4、规则往下级调用应用传递,继续打印,完成整条链路日志的打印
5、应用日志上传日志云或者ELK,查找整条日志,方便查找问题
四、方案详细设计
网关设计:
网关增加拦截器,拦截配置有规则的请求,并向下级应用传递日志打印请求头 X-TRACE-LOG-ID
拦截请求头规则 HeardersColorGatewayFilterFactory
拦截参数规则 ParamsColorGatewayFilterFactory
拦截Cookies规则 CookiesColorGatewayFilterFactory
截URL规则 URLColorGatewayFilterFactory
应用设计:
实现带有 X-TRACE-LOG-ID打印日志:
1、应用启动将服务条件的Log设置成debug模式
2、增加拦截器请求,如果请求头含有X-TRACE-LOG-ID,则将请求头设置到MDC中
3、增加日志拦截器debug日志默认不打印,MDC含有请求头X-TRACE-LOG-ID才打印
五、具体实现