0

我将配置为具有负载平衡 true 的 filebeat 和两个 logstash 主机,即 logstash1 和 logstash2,它们是 elasticsearch 的输入。logstash 的 filebeat 配置如下

prospectors:
 -
  paths:
  - /home/testLogs/temp.log
  spool_size: 1
  publish_async: true
### Logstash as output
logstash:
  hosts: ["10.186.187.44:5044", "10.186.187.6:5044"]
  worker: 1
  loadbalance: true

我设置的两个logstash上的logstash输入如下

input {
   beats {
   port => 5044
   congestion_threshold => 100000
   }
}

output {
   stdout {codec => rubydebug}
   elasticsearch {
   hosts => "ipaddress:9200"
   index => "testidx"
   }
}

但是,当我将一些行回显到文件 temp.log 中时,我看到在弹性搜索中处理的行是重复的文档,在我看来,两个 logstash 都在处理所有行。在两个logstash的stdout上,有时我看到两个logstash处理的外汇line1和line2,或者有时由logstash1和line1、line2、line2处理的line1由logstash2处理但是即使使loadbalance = flase我仍然看到重复的文档。& 在标准输出中,我 sed line1 和 line2 由 logstash1 或 logstash2 处理了两次。

所以只是想知道我的配置是错误的,这些行没有分布在logstashes上,还是像它的行为或错误一样。

4

2 回答 2

0

文档中:

如果 [loadbalance option] 设置为 true 并且配置了多个 Logstash 主机,则输出插件会将已发布的事件负载平衡到所有 Logstash 主机上。

因此,filebeat 的预期行为是将事件复制到两个 Logstash。


如果要使用两个 Logstash,可以将事件发送到队列(如 redis)并让 Logstash 从队列中消费。

于 2016-09-28T08:34:48.610 回答
0

受您帖子的启发,我用最少的配置测试了这个用例(因为我们也需要它),并且它可以工作。elasticsearch 中没有重复的文档。我测试了两者,负载平衡真假。

文件节拍:

logstash:
hosts: ["IP-LS1:8098","IP-LS2:8098"]
loadbalance: true

日志存储

input {
    beats {
        port => 8098
    }
}
filter {...}
output {

    if [type] == "filebeat-test" {
        stdout {codec => rubydebug}
        elasticsearch {
          hosts => ['IP-LS1|IP-LS2:9200']
          index => "filebeat-test-%{+YYYY.MM.dd}"
        }
    }
}
于 2016-10-04T09:08:28.733 回答