jlog/README.md
2021-12-30 09:15:50 +00:00

2.7 KiB
Raw Blame History

简介

该项目架构设计文章:https://my.oschina.net/1Gk2fdm43/blog/5312538

该项目主要为海量日志秒级GB级的搜集、传输、存储而设计的全套方案。区别于传统的如ELK系列套件该项目主要是为了解决超大量级的日志出入参、链路跟踪日志从搜集到最后检索查询的中途产生的高昂硬件成本、性能低下等问题。

核心点在于 性能、成本

较ELK系列方案filebeat、mq传输、es存储等常见方案该框架拥有10倍以上的性能提升和70%以上的磁盘节省。这意味着在日志这个功能块上使用相同的硬件配置原本只能传输、存储一秒100M的日志采用该方案一秒可以处理1GB的日志且将全链路因日志占用的磁盘空间下降70%。

背景

京东App作为一个巨大量级的请求入口涉及了诸多系统为了保证系统的健壮性、和请求溯源以及出现问题后的问题排查通常我们保存了用户请求从出入参、系统中途关键节点日志info、error、链路日志等并且会将日志保存一段时间。

日志系统基本划分为几个模块收集filebeat、logstash等传输kafka、tcp直传等存储esmysql、hive等查询kibana、自建

以传统日志解决方案为例当有一个G的日志产生后日志写本地磁盘占用磁盘1G读取后写入mqmq占用2G单备份消费mq写入eses占用1G共需占用磁盘4GB附带着网络带宽占用和同体量的服务器资源占用单服务器秒级处理100M

则以京东App的体量当秒级百G日志产生时所耗费的硬件资源相当庞大成本已到了难以承受的地步。

该日志框架即为在有所取舍的情况下支撑海量日志的场景所研发如前文所讲该方案在同等硬件配置下较filebeat+mq+es的模式秒级 日志吞吐量提升10倍且全链路磁盘占用下降了70%以上

方案简介

详细的可以看开头那篇文章。 这里只放两张图基本能说明原理。 输入图片说明

输入图片说明

输入图片说明

基本流程为通过filter获取web请求出入参、自定义log4j、logback的appender搜集中途打印的日志通过请求入口时生成的tracerId进行关联写入本地内存取代写磁盘进行压缩字符串空间占用减少80%以上通过Udp发往worker端取代mqworker接收数据抽取索引字段并入库clickhouse除未来查询要用的索引字段外其他内容全程压缩直至入库。