стек redis+elk с использованием docker-compose

Я пытаюсь настроить стек 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",

person Darshan Chaudhary    schedule 06.10.2016    source источник
comment
Работает ли установка вне Docker? Это действительно проблема контейнера или проблема в приложении? Кроме того, что вы уже пробовали? Когда возникает ошибка? Что ты пытался сделать? Очень сложно отлаживать только с предоставленной вами информацией   -  person Horia Coman    schedule 06.10.2016
comment
Я не пробовал установку вне Docker. На самом деле это довольно просто, я упускаю что-то глупое. Как вы можете использовать Redis с logstash?   -  person Darshan Chaudhary    schedule 06.10.2016


Ответы (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
}
person Snorre    schedule 06.10.2016
comment
Другая возможная ошибка — host => "redis:6379". Я думаю, что порт должен быть указан отдельным свойством port. Итак, что-то вроде: host => redis port => 6379 Стоит попробовать. - person Snorre; 06.10.2016