10个开源日志收集器用于集中日志管理 和标签已经保留。
优秀产品和普通产品之间的区别在于日志记录。了解为什么如此重要,以及如何将其统筹起来。
与安全性一样,日志记录是Web应用程序(或一般应用程序)的另一个关键组成部分,由于旧习惯和无法预见的能力,它被忽视了。许多人认为无用的数字磁带实际上是查看应用程序内部、纠正错误、改进薄弱环节并取悦客户的强大工具。
在我们开始集中日志记录之前,让我们首先看看为什么日志记录如此重要。
日志记录的两种类型(级别)
计算机是确定性系统,除非它们不是。
作为一个程序员,我遇到过许多情况,应用程序的观察行为让每个人困惑了几天,但关键总是在日志中。我们运行的每个软件都会产生(或至少应该生成)日志,告诉我们在出现问题的情况下它经历了什么。
现在,我认为日志记录分为两种类型:自动生成的日志和程序员生成的日志。请注意,这不是任何教科书上的区别,引用我关于这个术语的言论会给你惹上麻烦。
上面的图像显示了可以称为“自动生成日志”的内容。
在这种特定情况下,这是WordPress系统在运行某些PHP代码时记录了一个意外的情况(一个通知)。这样的日志一直在不知疲倦地生成——由像MySQL这样的数据库工具、像Apache这样的Web服务器、环境、移动设备甚至操作系统。
这些日志很少包含有价值的信息,程序员甚至不会费心去查看它们,除非发生了问题。在这种时刻,他们会深入研究日志,试图理解出了什么问题。
但是自动生成的日志只能提供有限的帮助。例如,如果有几个人都有对网站的管理员访问权限,其中一人碰巧删除了一个关键信息,那么通过自动生成的日志是无法检测到罪魁祸首的。从作为应用程序一部分的系统的角度来看,这只是工作中的另一天——某人拥有所需的权限执行了一个任务,因此系统执行了该任务。
在这里需要的是一层额外的明确、详尽的日志记录,为人类方面创建踪迹。这些是我所谓的“程序员生成的日志”,它们构成了像银行这样敏感行业的支柱。以下是这种日志记录方案的示例:
日志记录就是力量
因此,在系统中存在这两种类型的日志时,以下是如何利用它们并提高影响力的方法。
超越客户的期望
“客户满意度”被认为是一种无用的营销手法,但由于日志记录,它可以变得很真实。我知道有一些数字产品会像鹰一样监视其日志,一旦客户在页面上出现问题,他们就可以联系客户并提供帮助。
想想看——在收到通知后的几秒钟内,你收到了来自公司的电话,他们说:“嘿,我知道您试图将此物品添加到购物车中,但它一直出问题。我可以为您添加此物品并完成订单吗?”
满意的客户?当然!
团队士气和生产力
正如我之前所说,当漏洞长时间未被追踪时,您团队中的开发人员会感到沮丧,并且会花费越来越多的时间追赶自己的尾巴。而对于日志记录,有一点需要注意——它需要一个新鲜、好奇的思维过程。如果你脑海中有一个“我操”的念头,整个过程就会崩溃。
那么是什么让调试变得困难?根据我的经验,缺乏日志记录,或者对日志记录的知识缺乏。首先,你可能没有意识到你最喜欢的数据库也只是生成日志的另一个软件,或者你在应用程序中没有进行广泛的日志记录(参见上文的程序员生成的日志)。
我特别记得有一次应用程序无响应,没有人知道原因。几天后,罪魁祸首是磁盘I/O限制达到了由于过多的流量引起的。因为没有人注意到这个问题,所以没有人能够找出原因。
审计追踪
如果两年后你的客户说所有这些订单都不是他们下的,而是某个呢?
你会怎么辩驳他们的要求?如果你有详细的日志记录(IP地址,日期和时间,信用卡等),那么你将能够分析所有这些并做出决策。不管好坏,它至少有一些客观依据,而不仅仅是凭空猜测。
如果你受到监管审查或需要作为一个新的重要项目的一部分接受第三方审计,同样如此。没有强大的日志记录系统会让你处于一个不利的境地。
改进现有系统
你如何改进当前的系统?
你应该仅仅为其增加更多的RAM和CPU线程吗?如果你的应用程序尽管有足够的资源仍然很慢,那么问题出在哪里?往往情况下,日志记录就是答案。
例如,所有主要数据库系统都有一个用于记录日志的功能slow queries。
如果你经常访问慢查询日志,你会知道哪些操作花费了最多的时间,从而揭示出需要改进的小但重要的领域。通常情况下,这样的小改变比加倍硬件容量要好。
一个良好的日志记录系统有无数种帮助你的方式。也许最好的论点是,它是一项自动化的活动,一旦设置好,就不需要任何监控,并且将在某一天挽救你。
解决了这个问题,让我们来看看一些令人惊叹的开源日志收集器(统一的日志工具)。以防你想知道,我们确实涵盖了商业云日志工具的一个。
Graylog
是工业级日志记录和可视化能力方面业界的领先名称之一。它的独特之处在于它会扫描你收集的日志,寻找安全漏洞的迹象,并立即通知你。
虽然Graylog是一个集中式日志记录系统,但它具有您所需要的灵活性,可以自定义警报、仪表板等等。
Graylog是开源的,但如果您的需求复杂,也有企业版计划。
有了SAP、思科和LinkedIn等客户的支持,Graylog是一个可以信赖的工具。
Logstash
如果你是弹性栈的粉丝或用户,那么值得一看的是Logstash(如果你不知道的话,ELK栈已经是一种东西)。像这个列表上的其他日志记录工具一样,Logstash是完全开源的,允许您自由部署和使用。
但不要被误导:Logstash是一个功能强大的工具,其能力远远超过任何简单的日志记录工具。它能够从多个平台收集大量数据,允许您定义和执行自己的数据流水线,理解非结构化日志转储等等。
当然,它的唯一限制是它只能与弹性产品套件一起使用,但如果你刚开始并计划很快扩展,那么Logstash是你应该选择的!
Fluentd
在作为数据摄取中间层工作的集中式日志记录工具中,Flutend是众多选择中的第一名。凭借出色的插件库,Fluentd能够从几乎任何生产系统中捕获数据,并将其整理成所需的结构,构建自定义流水线,并将其提供给您最喜爱的分析平台,无论是MongoDB还是Elasticsearch。
Fluentd基于Ruby构建,完全开源,由于其灵活性和可模块化性而广受欢迎。
像Microsoft、Atlassian和Twilio这样的大公司使用这个平台,Fluentd无需证明自己的实力。🙂
Flume
如果您面临的是真正巨大的数据集挑战,并且最终想要将所有数据导入到像Hadoop这样的平台中,Flume是最佳选择之一。它是一个“纯粹”的开源项目,即由我们敬爱的Apache基金会维护,这意味着没有企业计划。
这可能与您的期望并不完全一致。🙂
Flume使用Java编写(当涉及到突破性技术时,这仍然让我感到惊讶),其源代码完全开源。如果您正在寻找一个分布式、容错性强的数据摄取平台,以应对重型任务,那么Flume是最适合您的选择。
Octopussy
我给它的产品命名打零分,但是如果您的需求很简单,并且对于管道、摄取、聚合等方面的一切纷扰感到好奇,Octopussy可能是一个不错的选择。
在我看来,Octopussy可以满足大多数产品的需求(估计统计数据毫无意义,但如果我不得不猜测,我会说它能够处理实际世界中80%的使用案例)。
Octopussy的用户界面并不出色,但是它在速度和无臃肿方面弥补了不足。正如预期的那样,源代码可在GitHub上获取,我认为它值得认真研究。
Rsyslog
Rsyslog代表了一个极快的日志处理系统。
它是一个Unix-like操作系统的实用程序。从技术上讲,它是一个具有动态可装载输入和输出的消息路由器,并且高度可配置。
它可以从多个数据源接收输入,对其进行转换,并将输出发送到多个目标。使用Rsyslog,您可以每秒传递100万条消息到本地目标。
Rsyslog还提供一个与Rsyslog Linux代理紧密合作的Windows agent,用于两个环境之间的集成。此Windows代理用于转发Windows的事件日志和设置文件监视服务。
下面是Rsyslog提供的其他功能:
- 灵活的配置
- 提供多线程能力
- 使用日志签名和加密保护日志文件操作
- 支持大数据平台
- 提供基于内容的过滤能力
Grafana Loki
受到Prometheus的启发,Grafana Loki是一个多租户日志聚合解决方案。
Loki解决方案具有成本效益,它只索引元数据,并且可以插入到流行的系统中,如Kubernetes、Prometheus、Linux、SQL等。您可以查看此getting started guide进行安装,并亲自了解其工作原理。
Logwatch
我相信我们中有些人并不希望使用“统一的”、“集中的”日志记录系统所带来的一切繁文缛节。他们的业务来自单个服务器,他们正在寻找一种快速高效的方式来监视他们的日志文件。那么,欢迎使用Logwatch。
安装后,LogWatch可以扫描您的系统日志并创建所需类型的报告。虽然它是一个有点过时(也可以理解为可靠)的软件,并且是用Perl编写的。因此,您需要在服务器上运行Perl 5.6+。由于它是一个纯粹的命令行和守护进程,我没有任何截图可以分享。
如果您喜欢命令行界面且热爱传统的做事方式,您会喜欢Logwatch!
Syslog-ng
这个工具是开发用来实时处理Syslog(一种用于系统日志记录的已建立的客户端-服务器协议)数据文件的。随着时间的推移,它已经支持其他数据格式:非结构化、SQL和NoSQL。Syslog协议的工作原理在下图中很好地总结了。
是一个生产级别、可靠的日志收集和分类工具,使用C语言编写,并且在行业中有着很高的声誉。最好的部分是它的可扩展性,允许您使用C、Python、Java、Lua或Perl编写插件。
lnav
简称为(Log Navigator),lnav是一个纯终端工具,用于单台机器、单个目录的日志。适用于将日志统一到单个目录中或者想要过滤和显示来自单个源的实时日志。
如果您认为lnav只不过是像tailf | grep这样的工具,那就大错特错了。它有几个功能会让您爱不释手:时间序列视图,漂亮的打印输出(适用于JSON和其他格式),彩色编码的日志来源,强大的过滤器,能够理解多种日志协议等等。
有时候,您只想要一个零麻烦、零设置、可能是临时的日志层,而lnav完全符合要求!
结论
就是这样!这个列表编制起来很困难,坦白说,因为日志记录不像内容管理那样受欢迎,而且所有的关注似乎都被三四个工具所占据。不过,每个人的需求都不同,我尽量做了广泛的覆盖。
从幼稚的命令行、无需设置的工具到完整的数据巨头,全部都在这里!
接下来,了解一些优化应用程序的最佳方法。