elasticsearch,logstash,logstash-forwarder,Amazon Ec2,elasticsearch,Logstash,Logstash Forwarder" /> elasticsearch,logstash,logstash-forwarder,Amazon Ec2,elasticsearch,Logstash,Logstash Forwarder" />

Amazon ec2 Logstash体系结构决策

Amazon ec2 Logstash体系结构决策,amazon-ec2,elasticsearch,logstash,logstash-forwarder,Amazon Ec2,elasticsearch,Logstash,Logstash Forwarder,因此,我们有很多服务器运行在EC2 Amazon Web服务上,并希望为分布式日志设置logstash/elasticsearch 据我所知,通常有几种选择: 日志存储在每个服务器节点上,使用文件输入过滤器并直接转到ElasticSearch集群作为输出过滤器 每个服务器节点上的logstash,使用logstash转发器,连接到ElasticSearch集群上的logstash,该集群将其作为输出过滤器转发给ElasticSearch 日志存储在每个服务器节点上,使用文件输入过滤器并使用Red

因此,我们有很多服务器运行在EC2 Amazon Web服务上,并希望为分布式日志设置logstash/elasticsearch

据我所知,通常有几种选择:

  • 日志存储在每个服务器节点上,使用文件输入过滤器并直接转到ElasticSearch集群作为输出过滤器
  • 每个服务器节点上的logstash,使用logstash转发器,连接到ElasticSearch集群上的logstash,该集群将其作为输出过滤器转发给ElasticSearch
  • 日志存储在每个服务器节点上,使用文件输入过滤器并使用Redis作为队列。然后在每个ElasticSearch节点上存储一个日志,从redis提取并传递给ElasticSearch
  • 还有一些变体使用AsyncAppender(它的名声不太好)

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


    这有什么负面影响?为什么经常建议使用队列/代理?

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

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

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

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

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


    如果可以的话,在服务器上运行logstash forwarder,将其输出发送到centalized logstash服务器,然后再发送到elasticsearch。这基本上是您的#2选项。

    当无法连接到elasticsearch时,文件输入过滤器本身似乎不太强大?这是排队的主要原因吗?我们选择了选项2。我不喜欢在我们所有的服务器上运行JVM的想法。这对我们很有效。很高兴您的过滤器只定义了一次。这很公平——但因为我们所有的应用服务器都是java,这对我们来说不是问题;)