Logstash不打开filebeat的输入端口

时间:2017-04-19 10:09:44

标签: elasticsearch logstash filebeat

我在设置ELK堆栈时遇到了麻烦,

配置了Filebeat,

filebeat.prospectors:
- input_type: log
    paths:
       - /var/log/syslog
       #- c:\programdata\elasticsearch\logs\*
       document_type: syslog

output.logstash:
  # The Logstash hosts
   hosts: ["localhost:5044"]
   bulk_max_size: 1024

这些是logstash的输入文件,

输入,

input {
   beats {
     type => beats
     port => 5044
   }
 }

对于输出,

 output {
  elasticsearch {
    hosts => ["localhost:9200"]
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
 }

我可以在filebeat日志中看到,它给了我这个错误,

 2017-04-19T15:30:55+05:30 ERR Connecting error publishing events (retrying): dial tcp 127.0.0.1:5044: getsockopt: connection refused

显然,logstash没有打开端口,我也可以通过netstat看到端口没有打开监听。

为什么logstash没有打开端口,我错过了什么? 此外,当端口打开时,它会自动将数据发送到logstash,然后再登录到elasticsearch吗?

2 个答案:

答案 0 :(得分:1)

当你在同一个盒子上有一个完整的logstash实例时,我有点混淆了为什么你有文件轮询日志。 Logstash可以做Filebeat可以做的事情并避免这个问题。

input {
  file {
    path => [ "/var/log/syslog" ]
    type => "syslog"
  }
}

但是,你想知道为什么Logstash没有打开端口。我建议你改变你的节拍输入来测试它:

input {
   beats {
     type => beats
     host => "localhost"
     port => 5044
   }
}

这将告诉beats输入绑定到' localhost'具体来说,这是Filebeat期望找到监听端口的地方。

答案 1 :(得分:0)

如果将Logstash与docker一起使用,请尝试使端口可用于不在容器中的其他应用程序。 在安装docker时,可以使用-p 5044标志。 例如:

docker run -d --name logstash 
-p 5044:5044
--restart=always 
-e "XPACK.MONITORING.ELASTICSEARCH.URL=http://ELASTIC_IP:9200" 
docker.elastic.co/logstash/logstash:7.0.0