2016-10-06 73 views
0

我正在尝试设置docker的redis + ELK堆栈。我希望使用redis来接受来自远程位置的日志并将它们转发到logstash。redis + elk stack docker-compose

这里是我的搬运工,compose.yml

elasticsearch: 
    image: elasticsearch:latest 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
    - "9200:9200" 
    - "9300:9300" 
    volumes: 
    - /root/ebs:/usr/share/elasticsearch/data 

logstash: 
    build: logstash/ 
    command: logstash -f /etc/logstash/conf.d/logstash.conf 
    volumes: 
    - ./logstash/config:/etc/logstash/conf.d 
    ports: 
    - "5000:5000" 
    links: 
    - elasticsearch 
kibana: 
    build: kibana/ 
    volumes: 
    - ./kibana/config/:/opt/kibana/config/ 
    ports: 
    - "5601:5601" 
    links: 
    - elasticsearch 

redis: 
    image: redis:latest 
    ports: 
    - "6379:6379" 
    links: 
    - logstash 

这里是我的logstash.conf

input { 
    tcp { 
     port => 5000 
    } 
    redis { 
     host => "redis:6379" 
    } 
} 

output { 
    elasticsearch { 
     hosts => "elasticsearch:9200" 
    } 
} 

我logstash容器抛出这个错误:

logstash_1  | {:timestamp=>"2016-10-06T09:21:35.258000+0000", :message=>"An unexpected error occurred!", :error=>#<NoMethodError: undefined method `call' for nil:NilClass>, :class=>"NoMethodError", 
+0

该设置是否在Docker之外工作?这真的是一个容器问题或应用程序中的问题吗?另外,你已经尝试过了什么?错误何时发生?你想做什么?很难用你提供的信息进行调试 –

+0

我还没有试过Docker以外的设置。这真的很简单,我错过了一些愚蠢的东西。你如何使用redis和logstash? –

回答

0

我可以看到一个直接的问题。在你logstash.conf文件指定Redis的主机名:

redis { 
    host => "redis:6379" 
} 

在您的码头工人,撰写文件,但是你实际上并不链接Redis的服务为您的logstash服务:

logstash: 
    <snip> 
    links: 
    - elasticsearch 

相反,你的链接logstash服务到您的redis服务中。据我所知,您希望您的redis容器的端口可用于logstash,而不是其他方式。您应该删除您的redis服务中的logstash链接,并在logstash服务中添加redis链接。所以:

logstash: 
    <snip> 
    links: 
    - elasticsearch 
    - redis 

我不能肯定地说这是错误信息的原因。

编辑:redis输入的配置可能也是错误的。根据documentation该端口应指定为一个单独的属性,如下所示:

redis { 
    host => "redis" 
    port => 6379 
} 
+0

感谢您的提示,但我仍然得到该错误:/ –

+0

另一个可能的错误是'host =>“redis:6379”'。我认为端口应该由一个单独的'port'属性指定。所以类似于: host =>“redis” port => 6379 值得一试。 – Snorre