Logstash设置的建议

时间:2014-06-04 10:12:41

标签: logstash

我已经实现了logstash(在测试中),如下面提到的架构。

enter image description here

组件分解

  • Rsyslog客户端:默认情况下,所有Linux解压缩程序中都安装了syslog,我们只需要配置rsyslog即可将日志发送到远程服务器。
  • Logstash: Logstash将从syslog客户端收到日志,它会 在Redis商店。
  • Redis: Redis将作为代理工作,代理将在logstash索引之前保存代理发送的日志数据。拥有代理将增强logstash服务器的性能,Redis就像日志数据的缓冲区一样,直到logstash为其编制索引并存储它。因为它在RAM中太快了。
  • Logstash:是,两个logstash实例,第一个用于syslog服务器, 第二个用于从redis读取数据并发送给elasticsearch。
  • Elasticsearch:中央日志服务器的主要目标是在一个地方收集所有日志,此外它还应提供一些有意义的数据用于分析。就像您应该能够在指定的时间段搜索特定应用程序的所有日志数据一样。因此,我们的logstash服务器上必须有搜索和良好的索引功能。为此,我们将安装另一个名为elasticsearch的开源工具.Elasticsearch使用制作索引的机制,然后搜索该索引以使其更快。它是一种用于文本数据的搜索引擎。
  • Kibana :Kibana是一种用户友好的查看,搜索和可视化方式 您的日志数据

但我对redis有点困惑。使用这个场景我将在Logstash服务器和一个redis上运行3个java进程,这将需要hugh ram。

问题 我可以只使用一个logstash和弹性搜索吗?或者最好的方法是什么?

3 个答案:

答案 0 :(得分:8)

我实际上是在我公司设置logstash,redis,elasticsearch,kibana(又名ELK架构)。

我在虚拟机之间分配了进程。虽然您可以将它们放在同一台机器上,但如果机器死机会发生什么?然后,您将同时保留索引器和群集。

您还遇到无法在Elasticsearch上正确复制分片的问题。由于您只有一台服务器,因此不会复制分片,并且您的群集运行状况将始终为黄色。您需要添加足够的服务器以避免split-brain scenario

为什么要保留Redis?

由于Redis可以与多个logstash索引器进行通信,因此一个关键点是,这使得索引对于您的发货人而言是透明的,因为如果一个索引器发生故障,交替发生器将获得负载。这使您的设置具有高可用性。

这不仅仅是发送日志并将其编入索引和搜索的问题。虽然您的设置可能会在非常小的情况下工作,但人们使用ELK设置的东西是数百台服务器,甚至数千台,因此ELK架构可以扩展。所有这些服务器也需要通过名为Puppet的东西进行远程管理。

最后,如果您尚未阅读,我建议您阅读James Turnbull的 The Logstash Book

以下是迄今为止帮助我的一些推荐书籍:

  • Pro Puppet,Second Edition
  • Elasticsearch Cookbook,第二版
  • Redis Cookbook
  • Redis in Action
  • 掌握Elasticsearch
  • ElasticSearch Server
  • Elasticsearch:The Definitive Guide
  • Puppet Types and Providers
  • Puppet 3 Cookbook

答案 1 :(得分:8)

如果将所有实例放在计算机中,则只能使用一个logstash和elasticsearch。 Logstash使用文件输入插件直接读取syslog文件。

否则,您必须使用两个logstash和redis。这是因为logstash没有任何缓冲机制,因此需要redis作为其代理来缓冲日志事件。 Redis不使用更多的ram。当logstash从中读取日志事件时,内存将释放。如果redis使用大型ram,则必须添加logstash workers以便更快地处理日志。

答案 2 :(得分:2)

您应该只运行logstash的一个实例。设计logstash能够拥有多个输入通道和输出通道。

input {
    # input instances
    syslog {
        # add other settings accordingly
        type => "syslog"
    }
    redis {
        # add other settings accordingly
        type => "redis"
    }
}
filter {
    # add other settings accordingly
}
output {
    # output instances
    if [type] == "syslog" {
        redis {
            # add other settings accordingly
        }
    }
    else if [type] == "redis" {
        elasticsearch {
            # add other settings accordingly
        }
    }
}