2016-10-06 76 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