ELK(Elasticsearch、Logstash、Kibana)堆栈——我真的需要同时配置 Logstash 和 Filebeat 吗?

ELK (Elasticsearch, Logstash, Kibana) stack - Do I really need both Logstash and Filebeat configured?

我想为我们的自定义应用程序在本地部署 ELK 堆栈。因此,我参考了官方文档的安装指南,安装了 Elasticsearch 集群和 Kibana。然后是问题:documentation 说如果我愿意,我可以处理来自任何自定义应用程序的日志(如果内置模块不适合我),我应该只配置 Filebeat 以便它可以收集这些日志作为输入。但是 Filebeat 的输出应该是什么?我听说 Elasticsearch 应该将经过处理的结构化日志(例如 JSON 格式)作为输入;但是我们的应用程序生成纯文本日志(因为它是 Java 应用程序,日志可以包括堆栈跟踪和其他混合数据),并且应该首先处理和结构化它们......或者不应该吗?

所以,关于这种情况,我有以下问题:

  1. 我是否需要将Filebeat 输出设置为Logstash 输入以格式化和结构化日志,然后将Logstash 输出设置为Elasticsearch 输入?或者我可以将日志从 Filebeat 直接转发到 Elasticsearch?
  2. 在这种情况下我真的需要 Filebeat,或者可以将 Logstash 配置为自己读取日志文件?

Filebeat 和 Logstash 既可以单独工作,也可以协同工作。如果您所要做的只是跟踪日志文件并将它们发送到 Elasticsearch,而不对它们执行任何处理,那么我会说选择 Filebeat,因为它比 Logstash 更轻量级。

如果您需要对日志文件执行一些处理和转换,那么您有几个选项,具体取决于您选择的解决方案。您可以利用:

顺便提一下,我提请您注意,您的 Java 应用不一定必须生成纯文本日志。使用 ecs-logging-java,它还可以生成 JSON 准备好被引入 Elasticsearch 的日志。

如果您使用上述日志库,那么 Filebeat 将非常适合您的用例,但这当然取决于您是否需要解析和处理日志中的 message 字段。