日志聚合系统可以帮助我们进行故障排除和其他任务。以下是对三个主要工具的介绍。指标聚合和日志聚合有什么区别?日志不能包含指标吗?日志聚合系统不能做与指标聚合系统相同的事情吗?这些是我经常听到的问题。我还看到供应商将他们的日志聚合系统作为所有可观察到的问题的解决方案进行营销。日志聚合是一个有价值的工具,但它通常不能很好地支持时间序列数据。时序指标聚合系统中几个比较有价值的功能是固定区间规则区间和专门为时序数据定制的存储系统。固定间隔允许用户连续收集实时数据结果。如果日志聚合系统需要定期收集指标数据,它也可以。但是,其存储系统并未针对度量聚合系统中典型的查询类型进行优化。使用日志聚合工具中的存储系统处理这些查询将花费更多的资源和时间。那么,我们知道日志聚合系统可能不适合时间序列数据,但是它有什么用呢?日志聚合系统是收集事件数据的好地方。这些不规则的活动非常重要。最好的例子是Web服务的访问日志,这些很重要,因为我们想知道什么在什么时候访问我们的系统。另一个例子是应用程序错误日志——因为它不是正常操作的日志,所以在故障排除期间可能很有价值。一些记录规则:必须包括时间戳必须格式化为JSON不要记录琐碎的事件必须记录所有应用程序错误可以记录警告可以切换的错误信息不记录任何无法读取或反馈的内容。云的成本在研究日志聚合工具时,云服务似乎是一个有吸引力的选择。然而,这可能会付出巨大的代价。当跨数百或数千个主机和应用程序聚合时,日志数据非常庞大。在基于云的系统中,接收、存储和检索数据的成本很高。作为一个真实系统的参考,大约500个节点和数百个应用程序的集合每天会产生200GB的日志数据。该系统可能还有改进的空间,但即使将其减半,在许多SaaS产品中每月的成本也将接近10,000美元。而这个通常只保存30天,如果要看逐年的趋势数据,是不可能的。这并不是说您不应该使用这些基于云的系统,特别是对于较小的组织,它们可??能非常有价值。这里的重点是指出可能会产生巨大的成本,当这些成本很高时,它可能会非常令人沮丧。本文的其余部分将重点介绍自托管开源和商业解决方案。工具选择ELKELK是Elasticsearch、Logstash和Kibana的简称,是最流行的开源日志聚合工具。它被Netflix、Facebook、Microsoft、LinkedIn和Cisco使用。这三个组件均由Elastic开发和维护。Elasticsearch本质上是一个使用Lucene搜索引擎实现的NoSQL数据库。Logstash是一个日志记录管道,它获取数据、转换数据并将其加载到Elasticsearch等应用程序中。Kibana是Elasticsearch之上的可视化层。几年前,推出了Beats。Beats是数据收集器。它们简化了将数据传送到Logstash的过程。用户无需了解每种类型日志的正确语法,只需安装Beats即可正确导出NGINX日志或Envoy代理日志,以便在Elasticsearch中有效地使用它们。安装生产级ELK套件时,可能会包含其他几个部分,例如Kafka、Redis和NGINX。此外,用Fluentd替换Logstash是很常见的,我们将在后面讨论。该系统操作复杂,早期引起了很多问题和投诉。目前这些问题已经基本修复,但还是一个复杂的系统,如果你使用的功能很少,建议不要使用。也就是说,还有其他可用的服务,因此您不必为之苦恼。Logz.io可以用,但是如果你有很多数据,它的标价有点高。当然,你可能规模很小,没有很多数据。如果你买不起Logz.io,你可以看看AWSElasticsearchService(ES)。ES是AmazonWebServices(AWS)提供的一项服务,可以轻松让Elasticsearch立即运行。它还具有使用Lambda和S3将所有AWS日志记录到ES的工具。这是一个更便宜的选择,但需要一些管理工作并且有一些功能限制。ELK套件的母公司Elastic提供了一个更强大的产品,它使用开源核心的开放核心模式,为分析工具和报告提供了额外的选择。它也可以托管在谷歌云平台或AWS上。由于此工具和托管平台组合提供的成本低于大多数SaaS选项,因此这可能是最好的选择,而且很有用。该系统可以有效地替代或提供安全信息和事件管理(SIEM)系统的功能。ELK套件通过Kibana提供了很好的可视化工具,但它缺乏警报功能。Elastic在付费X-Pack插件中提供警报,但开源系统中没有内置任何内容。Yelp开发了解决此问题的解决方案ElastAlert,但还有其他解决方案。这个额外的软件非常强大,但它增加了本已复杂的系统的复杂性。GraylogGraylog最近越来越受欢迎,但它是由LennartKoopmann在2010年创建和开发的。两年后,一家同名的公司诞生了。尽管采用率越来越高,但它仍然远远落后于ELK套件。这也意味着它具有较少的社区开发功能,但它可以使用与ELK套件相同的Beats。Graylog在Go社区赢得了好评,因为GraylogCollectorSidecar是用Go编写的。Graylog使用Elasticsearch、MongoDB和底层的GraylogServer。这使得它与ELK套件一样复杂,也许更复杂一点。然而,Graylog带有内置于开源版本中的警报,以及一些其他值得注意的功能,如流、消息重写和地理定位。流功能允许数据在处理时实时路由到特定的流。使用此功能,用户可以在单个流中查看所有数据库错误,在单独的流中查看Web服务器错误。当添加新项目或超过阈值时,甚至可以根据这些流提供警报。延迟可能是日志聚合系统中最大的问题之一,而Stream在Graylog中消除了这个问题。一旦日志进来,它可以通过Stream路由到其他系统,而无需完全处理。消息重写功能使用开源规则引擎Drools。允许根据用户定义的规则文件评估所有传入消息,从而可以删除消息(称为黑名单)、添加或删除字段或修改消息。也许Graylog最酷的功能是它的地理定位功能,它允许将IP地址绘制在地图上。这是一个相当普遍的特性,在Kibana中也可用,但它增加了很多价值——尤其是当你想将它用作SIEM系统时。地理定位功能在系统的开源版本中可用。如果您需要,Graylog会为开源版本提供收费支持。它还为其企业版提供开源核心架构,提供归档、审计日志记录和其他支持。其他提供支持或托管服务的并不多,如果你不需要Graylog的,你可以托管。FluentdFluentd由TreasureData开发,CNCF已将其作为孵化项目。它是用C和Ruby编写的,并被AWS和GoogleCloud推荐。Fluentd已成为许多系统中logstach的常见替代品。它可以充当本地聚合器,收集所有节点日志并将它们发送到中央存储系统。它不是日志聚合系统。它使用强大的插件系统来提供快速、轻松地集成不同的数据源和数据输出。由于有超过500个插件可用,因此应该涵盖您的大部分用例。如果没有,这听起来像是为开源社区做出贡献的机会。Fluentd是Kubernetes环境中的常见选择,因为它具有低内存占用(仅数十兆字节)和高吞吐量的特点。在像Kubernetes这样的环境中,每个pod都有一个Fluentd依赖项,内存消耗随着每个新pod的创建而线性增加。在这种情况下,使用Fluentd将大大降低您的系统利用率。这是Java开发的工具的一个常见问题,该工具旨在为每个节点运行一个工具,其中内存开销不是主要问题。
