YScope的压缩日志处理器(CLP)可以压缩您的日志,并允许您在不解压的情况下搜索压缩后的日志。CLP同时支持JSON日志和非结构化(即自由文本)日志。它还支持在多个日志库中实时压缩日志。CLP还包括专门用于搜索和查看压缩日志的网页界面。要了解更多信息,您可以阅读我们的[论文][clp-paper]。
基准测试
上图显示了CLP与其他工具相比的压缩和搜索性能。我们将JSON和非结构化日志的实验分开,原因是:(1)某些工具只能处理一种类型的日志,(2)能够处理两种类型的工具通常对每种类型有不同的设计(比如CLP)。
压缩率是在各种日志数据集上的平均值。其中一些数据集可以在[这里][datasets]找到。搜索性能是使用MongoDB日志(对于JSON)和Hadoop日志(对于非结构化日志)的查询来衡量的。请注意,CLP使用无索引设计,因此为了公平比较,我们禁用了MongoDB和PostgreSQL的索引;如果启用索引,MongoDB和PostgreSQL的压缩率会更差。我们没有禁用Elasticsearch或Splunk的索引,因为这些工具本质上是基于索引的(即没有索引就无法搜索日志)。有关我们实验方法的更多详细信息,可以在[CLP论文][clp-paper]中找到。
系统概览
CLP提供了一个端到端的日志管理流程,包括压缩、搜索、分析和查看。上图显示了CLP生态系统的架构。它包括以下特性:
-
压缩和搜索:CLP将日志压缩成档案,可以在网页界面中搜索和分析。输入可以是原始日志或由CLP日志库产生的CLP压缩中间表示(IR)。
-
使用CLP日志库进行实时压缩:CLP为Python和Java(Log4j和Logback)提供日志库。这些日志库实时压缩日志,因此只有压缩后的日志会被写入磁盘或通过网络传输。压缩后的日志使用CLP的中间表示(IR)格式,该格式比Zstandard等通用压缩器能够达到更高的压缩比。将IR进一步压缩为存档可以使压缩比翻倍,并支持全局搜索,但这需要更多的内存使用,因为它需要缓冲足够的日志。关于IR与存档的更多详细信息可以在Uber工程博客中找到。
-
日志查看器:压缩后的IR可以在基于web的日志查看器中查看。与在编辑器中查看日志相比,CLP的日志查看器支持高级功能,如根据日志级别筛选日志(例如,只显示日志级别等于或高于ERROR的日志)。这些功能之所以可能,是因为CLP的日志库在将日志压缩为IR之前对其进行了解析。
-
IR分析库:我们还提供了一个Python库和一个Go库,可以分析压缩后的IR。
-
日志解析器:CLP还包括一个基于下推自动机的自定义日志解析器,其速度比RE2等最先进的正则表达式引擎快3倍。该日志解析器作为一个库提供,可供其他应用程序使用。
入门
您可以下载发布包,其中包括对分布式压缩和搜索的支持。或者,要快速尝试CLP的核心压缩和搜索功能,您可以使用预构建的容器。
我们还提供了从源代码构建软件包和CLP核心的指南。
要测试CLP,您可以查看我们的开源数据集。
文档
您可以在线查找我们的文档,或在docs/src中查看源文件。
提供反馈
您可以使用GitHub问题来报告错误或请求新功能。
加入我们的Zulip社区,与开发人员和其他社区成员聊天。
下一步
这是我们的开源发布版本,我们将不断更新错误修复、功能等。如果您想要某个功能或想报告错误,请提交问题,我们很乐意与您沟通。 [bug-report]: https://github.com/y-scope/clp/issues/new?assignees=&labels=bug&template=bug-report.yml [build-package]: http://docs.yscope.com/clp/main/dev-guide/building-package [clp-docs]: https://docs.yscope.com/clp/main [clp-ffi-go]: https://github.com/y-scope/clp-ffi-go [clp-ffi-py]: https://github.com/y-scope/clp-ffi-py [clp-loglib-py]: https://github.com/y-scope/clp-loglib-py [clp-paper]: https://www.usenix.org/system/files/osdi21-rodrigues.pdf [core]: http://docs.yscope.com/clp/main/dev-guide/components-core [core-container]: http://docs.yscope.com/clp/main/user-guide/core-container [datasets]: https://docs.yscope.com/clp/main/user-guide/resources-datasets [feature-req]: https://github.com/y-scope/clp/issues/new?assignees=&labels=enhancement&template=feature-request.yml [log-surgeon]: https://github.com/y-scope/log-surgeon [log-viewer]: https://github.com/y-scope/yscope-log-viewer [log4j1-appenders]: https://github.com/y-scope/log4j1-appenders [logback-appenders]: https://github.com/y-scope/logback-appenders [re2]: https://github.com/google/re2 [uber-blog]: https://www.uber.com/en-US/blog/reducing-logging-cost-by-two-orders-of-magnitude-using-clp [zulip]: https://yscope-clp.zulipchat.com/