我正在运行两个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 }
}
答案 0 :(得分:4)
Logstash旨在尽可能适合您的基础架构,因此您可以根据需要组织托运人和索引器。您可以在同一台服务器上,在不同的节点上,甚至在多个层中运行它们。
我可以想象我可能会对托运人进行过滤的情况。也许多线收集可以使传入事件变得简单,或者其他短期分析不会涉及大量重量级grok
工作。
但是,通常情况下,您希望保持托运人的轻量级,因为这些服务器可能主要用于运行Logstash以外的重要应用程序。如果这是您的目标,那么在索引器节点上运行大部分或全部过滤器都是有意义的。
答案 1 :(得分:0)
我认为托运人和MQ(Redis或Kafka)都用于提高ELK的吞吐量。如果只有少量日志数据,您可以在节点中完成所有工作(收集,过滤和转发),但是,如果需要监视许多日志文件,那么最好将这些工作分离到不同的节点,托运人收集日志数据,MQ充当缓冲区并且可以做一些负载平衡工作,索引器充当重量级过滤器的过滤器工作。在这种情况下,最好使托运人尽可能简单。