Logstash shipper 或 indexer 应该执行过滤器吗?

Should Logstash shipper or indexer perform filters?

我是 运行 两个 Logstash 实例,一个是 "shipper",一个是 "indexer"。

我希望托运人拾取原木并使用伐木工人将它们转发给索引器。 索引器写入 elasticsearch。

为了进行过滤,应该在哪里定义过滤器?在托运人身上?索引器?两个都?

示例过滤器是键+值提取和时间戳识别。

从文档中也不清楚 lumberjack 如何 encodes/decodes 消息,所以我不确定我在处理什么。

(为了加分,答案是否也适用于 logstash-forwarder?)

使用 Logstash 1.4.2。配置如下。

机器"shipper"

input{
  file{
    path=>["/var/log/blah.log"]
    tags => ["java", "some info"]
    codec=>multiline{
      pattern=>"^%{TIMESTAMP_ISO8601} "
      negate=>true
      what=>previous
    }
  }
}

filter{ 
  # ???
}

output{
  lumberjack {
    hosts => ["10.1.1.1"]
    port => 5000
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
  }

}

另一台机器:"indexer" (10.1.1.1)

input {
 lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

filter{ 
  # ???
}

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

Logstash 旨在尽可能适应您的基础架构,因此您可以根据需要组织您的托运人和索引器。您可以 运行 它们都在同一台服务器上、不同的节点上,甚至在多层上。

我可以想象我可能会对托运人进行一些过滤的情况。也许是多行收集以保持传入事件的简单性,或者是其他不涉及大量重量级 grok 工作的短期分析。

不过,通常情况下,您会希望保持托运人的轻量级,因为这些服务器可能专注于 运行除 Logstash 之外的其他重要应用程序。如果那是您的目标,运行 索引器节点上的大部分或所有过滤器将很有意义。

实际上,我认为 shipper 和 MQ(Redis 或 Kafka)都用于提高 ELK.You 的吞吐量,如果只有一个节点,则可以在一个节点中完成所有工作(收集、过滤和转发)日志数据很少,但是,如果需要查看的日志文件很多,那么最好将这些工作分开在不同的节点上,shippers收集日志数据,MQ充当缓冲区并可以做一些负载平衡工作,索引器充当一个filter做重量级的filterwork.In这种情况,还是让shippers越简单越好。