3个开源日志聚合工具

阅读 658
收藏 19
2018-09-28
原文链接:mp.weixin.qq.com

3个开源日志聚合工具

君子兰 翻译 云技术实践 Yesterday


日志聚合系统可以帮助进行故障排除和其他任务,这里有三个顶级工具选择。


度量聚合与日志聚合有何不同,日志不能包含度量吗,日志聚合系统不能做与度量聚合系统相同的事情吗?


这些是我经常听到的问题。我还看到供应商将其日志聚合系统作为所有可观察性问题的解决方案。日志聚合是一种很有价值的工具,但它通常不是时间序列数据的好工具。


在时间序列度量聚合系统中,有两个很有价值的特性是定期间隔和专门为时间序列数据定制的存储系统。间隔规则允许用户获得真实的数学结果一致。如果日志聚合系统定期收集指标,那么它可能以相同的方式工作。然而,存储系统并没有针对度量聚合系统中典型的查询类型进行优化。使用日志聚合工具中的存储系统处理这些查询需要更多的资源和时间。


因此,我们知道日志聚合系统可能不适合时间序列数据,但是它有什么好处呢?日志聚合系统是收集事件数据的好方法,这是非常重要的非常规活动,一个例子可能是web服务的访问日志。因为我们想知道谁访问我们的系统以及什么时候访问。另一个例子是触发应用程序错误条件——因为它不是一个正常的操作条件,在故障排除时它可能很有价值。


一些日志记录规则:


  • 包括时间戳

  • 用JSON格式化

  • 不要记录无关紧要的事件

  • 请记录所有应用程序错误

  • 可能会记录日志警告

  • 打开日志记录

  • 用人类可读的形式写消息

  • 请勿在生产中记录信息数据

  • 不要记录人类无法读取或反应的任何内容


云计算成本


在研究日志聚合工具时,云似乎是一个有吸引力的选择。然而,这可能会带来巨大的成本。当跨数百或数千台主机和应用程序聚合时,日志代表着大量数据。在基于云的系统中,数据的提取、存储和检索是非常昂贵的。


作为一个真实系统的参考点,由大约500个节点和几百个应用程序组成的集群每天产生200GB的日志数据。这个系统可能还有改进的空间,但在许多SaaS产品中,即使将其减半,每月也要花费近1万美元。这通常包括仅保留30天数据,如果你想查看每年的趋势数据,这个时间还不够长。


这并不是要阻止这些系统的使用,因为它们非常有价值——尤其是对于较小的组织来说。这样做的目的是要指出,这样做可能会带来巨大的成本,当这些成本实现时,可能会令人沮丧。本文的其余部分将关注自托管的开源和商业解决方案。


工具选择


1.ELK

ELK是Elasticsearch,Logstash和Kibana的缩写,是市场上最受欢迎的开源日志聚合工具。它被Netflix,Facebook,微软,LinkedIn和思科使用。这三个组件都是由Elastic开发和维护的。Elasticsearch本质上是一个NoSQL的全文本搜索引擎实现。Logstash是一个日志管道系统,可以提取数据,转换数据并将其加载到像Elasticsearch这样的存储中。Kibana是Elasticsearch之上的可视化层。


几年前,Beat出现了,Beat是数据收集器。它们简化了向Logstash发送数据的过程。用户可以安装Beat,以便正确导出NGINX日志或Envoy代理日志,以便在Elasticsearch中有效使用,而无需了解每种类型日志的正确语法。


安装生产级ELK堆栈时,可能会包含一些其他部分,如Kafka,Redis和NGINX。此外,通常用Fluentd替换Logstash,稍后我们将讨论。这个系统操作起来很复杂,在早期导致了很多问题和抱怨。这些已基本修复,但它仍然是一个复杂的系统,所以如果规模较小,可能不想尝试它。


不必担心,有收费的服务,Logz.io为你运行。但如果你有大量数据,它的定价有点高。当然,你可能更小,可能没有太多数据。如果你负担不起Logz.io,可以看看AWS Elasticsearch Service(ES)等服务。ES是Amazon Web Services(AWS)提供的服务,可以让Elasticsearch轻松快速地运行。它还具有使用Lambda和S3将所有AWS日志导入ES的工具。这是一个更便宜的选择,但需要一些管理,并有一些限制。


堆栈的母公司Elastic提供了一个使用开放核心模型的更强大的产品,该模型提供了有关分析工具和报告的附加选项。它也可以托管在Google Cloud Platform或AWS上。这可能是最好的选择,因为这种工具和托管平台的组合提供了比大多数SaaS选项更便宜的解决方案,并且仍然提供了很多价值。该系统可以有效地替换或提供安全信息和事件管理(SIEM)系统的功能。


ELK堆栈还通过Kibana提供了出色的可视化工具,但它缺乏警报功能。Elastic在付费X-Pack附加组件中提供警报功能,但开源系统没有内置任何功能。Yelp创建了一个解决这个问题的解决方案,名为ElastAlert,可能还有其他问题。这个额外的软件相当强大,但它增加了已经很复杂的系统的复杂性。


2.Graylog

Graylog最近越来越受欢迎,但它是由Lennart Koopmann在2010年创建的。两年后,一家同名的公司诞生了。尽管它的使用量在不断增加,但仍远远落后于ELK。这也意味社区开发的功能更少,但它与ELK堆栈保持相同的节奏。Graylog在Go社区获得了赞誉,推出了用Go编写的Graylog Collector Sidecar。


Graylog使用Elasticsearch、MongoDB和后台的Graylog服务器。这使得它像ELK堆栈一样复杂,甚至可能更复杂。然而,Graylog在开源版本内置警报功能,以及其他一些值得注意的特性,比如流媒体、消息重写和地理定位。


流媒体特性允许数据在被处理时被实时路由到特定的流。有了这个特性,用户可以看到单个流中的所有数据库错误和不同流中的web服务器错误。当添加新项或超过阈值时,警报甚至可以基于这些流。延迟可能是日志聚合系统的最大问题之一,而流在Graylog中消除了这个问题。一旦日志进入,就可以通过流将其路由到其他系统,而无需进行充分的处理。


消息重写特性使用开源规则引擎Drools。这允许根据用户定义的规则文件对所有传入消息进行求值,以允许删除消息(称为黑名单)、添加或删除字段或修改消息。


最酷的功能可能是Graylog的地理定位功能,它支持在地图上绘制IP地址。这是一个相当常见的特性,在Kibana也可以使用,但是它增加了很多价值——尤其是如果想将其用作SIEM系统的话。地理定位功能在开源版本中提供。


Graylog公司对开源版本的支持收费。它还为企业版本提供了一个开放的核心模型,提供了存档、审计日志记录和其他支持。支持或托管的选项并不多,所以如果你不使用Graylog公司服务,你很可能只能靠自己了。


3.Fluentd

Fluentd是在Treasure Data开发的,CNCF已将其作为孵化项目采用。它是用C和Ruby编写的,由AWS和Google Cloud推荐。在许多部署中,Fluentd已成为Logstash的常见替代品。它充当本地聚合工具,用于收集所有节点日志并将其发送到中央存储系统。它不是日志聚合系统。


它使用强大的插件系统,可以快速,轻松地集成不同的数据源和数据输出。由于有超过500个插件可供使用,因此应涵盖大部分用例,这听起来像是回馈开源社区的机会。


Fluentd是Kubernetes环境中的常见选择,因为它具有低内存要求(仅几十兆字节)和高吞吐量。在像Kubernetes这样的环境中,每个pod都有一个Fluentd sidecar,内存消耗将随着每个新pod的创建而线性增加。使用Fluentd将大大降低系统利用率。对于使用Java开发的工具而言,这已经成为一个常见问题,这些工具旨在每个节点运行一个,其中内存开销不是主要问题。


评论