使用Filebeat和Logstash推送日志文件到Elasticsearch的区别

Difference between using Filebeat and Logstash to push log file to Elasticsearch

我正在试用 ELK 来可视化我的日志文件。我尝试了不同的设置:

  1. Logstash 文件输入插件https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html
  2. Logstash Beats 输入插件https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html with Filebeat Logstash output https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html
  3. Filebeat Elasticsearch 输出https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html

有人可以列出他们的差异以及何时使用哪种设置吗?如果不是这里,请将我指向正确的位置,如超级用户或 DevOp 或服务器故障。

不太熟悉 (2)。 但, Logstash(1) 通常是一个不错的选择,可以使用 input/output 过滤器来播放内容,将其与您的分析器匹配,然后将其发送到 Elasticsearch。 前任。 您将 Logstash 指向您的 MySql,它需要对数据进行一行修改(可能对其进行一些数学运算,然后合并一些并删除一些单词,然后将其作为处理后的数据发送到 ElasticSearch)。

至于Logbeat(2),它是一个完美的选择,可以提取一个已经处理过的数据并将其传递给elasticsearch。 Logstash(顾名思义)主要适用于日志文件和类似的东西。通常你可以对这些做微小的改变。 前任。我的服务器中有一些日志文件(包括错误、系统日志、进程日志……) Logstash 侦听这些文件,自动选择添加到其中的新行并将其发送到 Elasticsearch。 然后你可以在elasticsearch中过滤一些东西,找到对你来说重要的东西。

p.s: logstash 有一个很好的方法来平衡太多数据到 ES。

1) 要使用 logstash file 输入,您需要在要收集日志的机器上有一个 logstash 实例 运行,如果日志与您已经在同一台机器上运行 logstash 这不是问题,但是如果日志在远程机器上,并不总是推荐使用 logstash 实例,因为它比 filebeat 需要更多的资源。

2 和 3) 对于在远程机器上收集日志,建议使用 filebeat,因为它需要的资源少于 logstash 实例,如果您想解析日志、添加或删除字段或进行一些充实,您可以使用 logstash 输出在你的数据上,如果你不需要做任何类似的事情,你可以使用 elasticsearch 输出并将数据直接发送到 elasticsearch。

这是主要区别,如果您的日志与您 运行 logstash 在同一台机器上,您可以使用 file 输入,如果您需要从远程机器收集日志,如果要对数据进行转换,可以使用 filebeat 并将其发送到 logstash,或者如果不需要对数据进行转换,则直接发送到 elasticsearch。

使用 filebeat 的另一个优点,即使在 logstash 机器上,是如果你的 logstash 实例关闭,你不会丢失任何日志,filebeat 将重新发送事件,使用 file 输入你可以在某些情况下会丢失事件。

您现在可以使用 filebeat 将日志直接发送到 elasticsearch 或 logstash(没有 logstash 代理,但当然仍然需要 logstash 服务器)。

主要优点是 logstash 将允许您自定义解析日志的每一行...而单独的 filebeat 将简单地发送日志并且没有太多字段分隔。

Elasticsearch 仍会索引和存储数据。

大规模应用程序的另一个要点是,如果您有很多 Beat(FileBeat、HeartBeat、MetricBeat...)实例,您不希望它们完全打开连接并将数据直接发送到同时Elasticsearch实例。
并发索引连接过多可能会导致大量队列、不良响应和超时。由于这个原因,在大多数情况下,常见的设置是将 Logstash 放置在 Beat 实例和 Elasticsearch[=22= 之间] 来控制索引。

对于更大规模的系统,常见的设置是在 Beats 和 Logstash 之间有一个缓冲消息队列(Apache Kafka、Rabbit MQ 或 Redis)以实现弹性,以避免在事件高峰期间 Logstash 发生拥塞。 数字来自 Logz.io。他们也有一个很好的 article 关于这个主题。