3

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

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

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

也有使用 AsyncAppender 的变体(声誉不太好)。

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

这有什么负面影响?为什么经常推荐队列/经纪人?

4

1 回答 1

0

以下是您的场景的一些问题:

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

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

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

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

如果可以的话,在服务器上运行 logstash-forwarder,将它们的输出发送到一个集中的 logstash 服务器,然后发送到 elasticsearch。这基本上是你的#2 选项。

于 2015-02-21T03:03:32.270 回答