Logstash 架构决策

Logstash architecture decisions

所以我们在 EC2 Amazon Web Services 上有一堆服务器 运行,并且正在寻求为分布式日志记录设置 logstash/elasticsearch。

根据我的阅读,通常选择几个选项:

  1. 每个服务器节点上的 logstash,使用文件输入过滤器并直接进入 ElasticSearch 集群作为输出过滤器
  2. 每个服务器节点上的 logstash,使用 logstash 转发器,连接到 ElasticSearch 集群上的 logstash,它将其作为输出过滤器转发到 ElasticSearch
  3. 每个服务器节点上的 logstash,使用文件输入过滤器并使用 Redis 作为队列。然后每个 ElasticSearch 节点上的 logstash 从 redis 获取并传递给 ElasticSearch。

还有使用 AsyncAppender 的变体(名声不太好)。

我很想选择#1,特别是因为我们使用的是自动转换为 JSON 的 patternLayout。因此,我们将在每个服务器节点上使用 JSON 保存额外的文件,并将文件输入直接发送到 ElasticSearch。

这有什么负面影响?为什么 queue/broker 经常被推荐?

您的场景存在一些问题:

1:每台机器上都必须有 JVM,以及相关的内存占用和维护问题。由于他们直接写入 elasticsearch,因此您的过滤器必须分发到每台机器。

3:仍然是每个服务器上的 JVM,加上额外的 redis 步骤。

仅仅因为您的应用程序需要 JVM 并不是在其上堆放更多内容的充分理由。在 AWS 中尤其如此,每个月都会收到账单...

请注意,当 logstash 繁忙时,logstash 和 logstash-forwarder 都会退出,因此您在这种环境中不需要像 redis 这样的代理(只要您可以在您的之前获得 logstash 运行ning日志文件循环)。

如果可以,运行 服务器上的 logstash-forwarder,将它们的输出发送到集中式 logstash 服务器,然后发送到 elasticsearch。这基本上是您的第二个选项。