其他
百度商业大规模高性能全息日志检索技术揭秘
一、背景介绍
二、技术原理
三、算法实现
日志元数据采集:拦截打印日志的前后操作,进行元数据采集。 元数据解析:解析元数据定位出日志文件当前位置以及日志所在文件的位置。
元数据采集的性能和准确性问题
为了保证元数据能够被准确的采集,需要基于凤睛探针拦截打印日志的方法。
在原始打印日志操作之前插入字节码,记录开始时间、读文件标识符获取打印前文件偏移量、文件的滚动策略(包括文件最大大小、文件滚动时间等)、日志级别; 在原始打印日志操作之后插入字节码,记录结束时间、读文件标识符获取打印后文件偏移量、日志内容当前写入的文件、文件按滚动策略归档后策略、同名归档时归档序号等. 在采集文件偏移量时通过直接读取文件描述符而不是直接读文件内容来提高性能。同时,在日志打印内容里注入每次调用唯一的traceId做更精准的标注,其他数据的采集用来日志检索时解析使用。
元数据解析
用户发起日志检索时,使用算法解析出此时此刻日志内容所在位置。
根据调用链traceId查询出与该traceId相同的所以日志元数据记录; 分别获取日志打印结束时间、日志打印时当前文件名、文件归档策略; 解析归档策略; 根据归档策略注入不同基准参数,模拟出一个日志打印器,以此获取到此时此刻文件位置; 根据文件位置,以及文件前后偏移量,读取出两个偏移量之前的日志内容; 用traceId进行内容校准.
四、结语
作者介绍:
李奇原,百度商业平台研发部-资深研发工程师
前后负责过商业平台API网关、商业平台部微服务凤睛监控系统。对构建高性能、高可用分布式系统有较多实践和较深入的理解。