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越简单越好。
我是 运行 两个 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越简单越好。