Logstash发货人或索引器应该执行过滤器吗?

时间:2015-02-27 17:56:13

标签: logstash

我正在运行两个Logstash实例,一个作为"发货人",一个作为"索引器"。

我希望托运人拿起日志并使用伐木工人将它们转发给索引器。 索引器写入elasticsearch。

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

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

从文件中还不清楚伐木工人如何对信息进行编码/解码,所以我不确定我在处理什么。

(对于奖励积分,答案是否也适用于logstash-forwarder?)

使用Logstash 1.4.2。配置如下。

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

}

另一台机器:"索引器" (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 }
}

2 个答案:

答案 0 :(得分:4)

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

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

但是,通常情况下,您希望保持托运人的轻量级,因为这些服务器可能主要用于运行Logstash以外的重要应用程序。如果这是您的目标,那么在索引器节点上运行大部分或全部过滤器都是有意义的。

答案 1 :(得分:0)

我认为托运人和MQ(Redis或Kafka)都用于提高ELK的吞吐量。如果只有少量日志数据,您可以在节点中完成所有工作(收集,过滤和转发),但是,如果需要监视许多日志文件,那么最好将这些工作分离到不同的节点,托运人收集日志数据,MQ充当缓冲区并且可以做一些负载平衡工作,索引器充当重量级过滤器的过滤器工作。在这种情况下,最好使托运人尽可能简单。