怎么用尽量少的日志(避免es或者磁盘装不下),来快速定位线上问题?
这个问题其实想了好久了,日志全打印了把,太占地,不打印如果出现问题那么就难定位。
这个图是我的一些粗略的想法。
我们在aop中不直接log了,我们把日志以traceid最为key先存起来。存到内存中。内存寸土寸金,所以在存的时候应该尽量压缩。
然后在将执行的方法不断append,然后在业务结束的时候判断一下是否成功执行,如果失败了,那么我们就把我们日志信息log出来,或者发邮件,直接存到es中(方便后边做可视化),然后还是要将内存让出来。如果成功了,那么就直接不打印了。
当我们错误比较多的时候,那同时进行占用内存还是比较多的,觉得可以在存入内存前进行一个错误聚合,把相同原因的错误不要重复存。
然后整一个log查询平台,通过traceid来查询出错的整个链路。