首页 文章

关于Logstash设置的建议

提问于
浏览
12

我已经实现了logstash(在测试中),如下所述的架构 .

enter image description here

Component Break Down

  • Rsyslog client: 默认情况下,所有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 .

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

3 回答

  • 8

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

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

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

    为什么要保留Redis?

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

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

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

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

    • Pro Puppet,第二版

    • Elasticsearch Cookbook,第二版

    • Redis Cookbook

    • Redis in Action

    • 掌握Elasticsearch

    • ElasticSearch Server

    • Elasticsearch:权威指南

    • 木偶类型和提供者

    • Puppet 3 Cookbook

  • 8

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

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

  • 2

    您应该只运行 logstash 的一个实例 . logstash by design具有多个输入通道和输出通道的能力 .

    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
            }
        }
    }
    

相关问题