#docker #docker-compose #elastic-stack
#docker #docker-compose #эластичный стек
Вопрос:
Я пытаюсь настроить стек redis ELK с помощью docker. Я хочу использовать 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",
Комментарии:
1. Работает ли настройка вне Docker? Это действительно проблема с контейнером или проблема в приложении? Кроме того, что вы уже пробовали? Когда возникает ошибка? Что вы пытались сделать? Очень сложно отлаживать только с предоставленной вами информацией
2. Я не пробовал настройку вне Docker. На самом деле это довольно просто, я упускаю что-то глупое. Как вы можете использовать redis с logstash?
Ответ №1:
Я вижу одну непосредственную проблему. В вашем файле logstash.conf вы указываете имя хоста redis:
redis {
host => "redis:6379"
}
Однако в вашем файле docker-compose вы фактически не связываете службу redis с вашей службой logstash:
logstash:
<snip>
links:
- elasticsearch
Вместо этого вы связываете свою службу logstash с вашей службой redis. Насколько я понимаю, вы хотите, чтобы порт вашего контейнера redis был доступен для logstash, а не наоборот. Вы должны удалить logstash
ссылку в своей службе redis и добавить redis
ссылку в свою службу logstash. Итак:
logstash:
<snip>
links:
- elasticsearch
- redis
Однако я не могу с уверенностью сказать, что это является причиной сообщения об ошибке.
Редактировать: конфигурация для ввода redis также может быть неправильной. Согласно документации, порт должен быть указан как отдельное свойство, подобное этому:
redis {
host => "redis"
port => 6379
}
Комментарии:
1. Другой возможной ошибкой является
host => "redis:6379"
. Я думаю, что порт должен быть указан отдельнымport
свойством. Итак, что-то похожее на: host => «redis» port => 6379 Стоит попробовать.