Elastic:总结收集日志的几种方法

2,189 阅读4分钟

到目前为止,我们看到有很多中不同的方法来收集日志。甚至,我们针对同样的一个日志,有好多种方法来进行采集。在今天的这篇文章中,我来简单里回顾一下。

通过 Filebeat 采集

Filebeat 是最为常用的一种采集日志的方法。使用 Filebeat,我们也有如下的几种方法:

通过模块进行采集

为了能够使用 Filebeat 更加方便地进行对数据的采集, Elastic 提供了模块进行使用:

我们可以通过如下的命令来获得被支持的模块:

 ./filebeat modules list

通过模块的运用,我们可以生成相应的 ingest pipeline,dashboard,index patterns,index templates,ILM 等。这些模块是我们经常会使用的模块。提供了开箱即用的工具。

这种方法的途径是 Filebeat => Elasticsearch。有关模块的使用,我们可以参考文章 “Beats:Beats 入门教程 (一)”。

使用 Filebeat 的 input logs 来进行收集

即使对于上面所述的通过模块的方法采集的日志,我们也可以采用这个方法来实现。只不过,我们需要自己创建 dashboard,ingest pipeline,index template,生命周期管理策略等。事实上这个是一种更为普及的收据采集方式,特别是针对那些不在模块支持范围里的定制日志。

这种数据的采集方式是:Filebeat => Elasticsearch。我们可以阅读之前的文章 “Beats:通过 Filebeat 把日志传入到 Elasticsearch”。

通过 Filebeat 及 Logstash 来完成

我们知道 Logstash 可以被用来对数据进行清洗,并且可以通过 Logstash 来对数据和外部数据库进行丰富等操作。Logstash 的使用另外一方面提供了一个缓冲的作用,特别是针对大量生成日志的情况。

这种方法采集的路径是:Filebeat => Logstash => Elasticsearch。我们可以通过阅读我之前的文章 “Logstash:Logstash 入门教程 (二)”,或者文章 “Logstash:把 Apache 日志导入到 Elasticsearch”。

通过 Kafaka 来收集数据

针对大量的数据 Kafaka 是一个比较常用的解决方法。它可以起到缓冲的作用:

详细阅读,请参考文章 “Elastic:使用 Kafka 部署 Elastic Stack”。

通过 Logstash 来进行采集

 在有些情况下,我们甚至直接可以使用 Logstash 来对日志数据进行采集。有关 Logstash 及 Filebeat 的区别,我们可以阅读文章 “Beats:Elastic Beats 介绍 及和 Logstash 的比较”。

这种方法的采集路径为:Logstash => Elasticsearch。我们可以通过阅读文章 “Logstash:Data 转换,分析,提取,丰富及核心操作”,及 “Elastic:运用 Elastic Stack 分析 Spring Boot 微服务日志 (一)”。

通过 Elastic Agent 来进行采集

随着 Elastic Stack 的开发,Elastic 在最新的发布版中更为推崇使用 Elastic Agent 来收集日志。

关于使用 Elastic Agent 的日志采集方法,我们也有两个类别:

被支持的集成(integration)

为了方便大家的使用,Elastic 也提供了类似开箱即用的模块那种方案。在最新的发布中,我们使用已经提供的集成来完成日志的采集。

我们可以阅读如下的文章来进行了解:

定制的日志

在很多的情况下,我们的日志可能并不属于 Elastic 已经提供的 integration 范畴。那么我们该如何收集这些日志到 Elasticsearch 中呢?事实上,Elastic 提供了一个叫做 Custom Logs 的集成来专门处理这累需求。如果你想了解这个方面的知识,请详细阅读文章 “Observability:如何使用 Elastic Agents 把定制的日志摄入到 Elasticsearch 中”。

在客户端中直接写日志到 Elasticsearch 中

我们也可以通过编程的方式直接在客户端中把日志写入到 Elasticsearch 中。请阅读文章:

使用其它非 Elastic Stack 方案

事实上,有很多其它的方案结合 Elastic Stack 来完成,比如:

Fluentd Elasticsearch Kibana stack

在上面,我们列举了上面我能想到的方法。在实际的使用中,开发者可能有更多的方法。如果有更多,请告诉我。我会把这写都记录下来。