我正在尝试使用docker设置redis + ELK堆栈。我希望使用redis从远程位置接受日志并将其转发到logstash。
这是我的docker-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 :(得分:0)
我可以看到一个直接的问题。在logstash.conf文件中指定redis主机名:
redis {
host => "redis:6379"
}
在您的docker-compose文件中,您实际上并未将redis服务链接到您的logstash服务中:
logstash:
<snip>
links:
- elasticsearch
而是将您的logstash服务链接到您的redis服务。据我所知,您希望redis容器的端口可用于logstash,而不是相反。您应该删除redis服务中的logstash
链接,并在您的logstash服务中添加redis
链接。所以:
logstash:
<snip>
links:
- elasticsearch
- redis
我不能肯定地说这是错误信息的原因。
编辑:redis输入的配置也可能有误。根据{{3}},端口应指定为单独的属性,如下所示:
redis {
host => "redis"
port => 6379
}